python BLEにて Zwift STEERINGに接続し、エアロバイクのハンドルのデータを取得する方法

エアロバイクのデータをPythonで取得する方法。
Zwiftはペダル部分と、ハンドル部分で違うBluetoothのデバイスになっている。
今回はハンドル側のデータ取得について。

STEERINGというデバイスをペアリングしてハンドルのデータを取得する。
また、実機を持っていないのでESP32で自作する。
下記のURLを参照して作成可能。
github.com

で、python側は下記のようなコードにてハンドルの角度が取得できる。

import asyncio
from bleak import BleakClient
import struct

address = "E0:5A:1B:60:08:C6"
UUID = "347b0030-7635-408b-8918-8ff3949ce592" # STEERING_ANGLE_CHAR_UUID notify


async def run(address, loop):
    async with BleakClient(address, loop=loop) as client:
        x = await client.is_connected()
        print("Connected: {0}".format(x))
        for i in range(100):
            y = await client.read_gatt_char(UUID)
            print(struct.unpack('<f', y)[0])

loop = asyncio.get_event_loop()
loop.run_until_complete(run(address, loop))

BluetoothのBLE機能は今回初めて使ったけど対象のUUIDが判れば簡単ということが分かった。
本体側はUUIDが不明なので、そちらも解析出来たら公開することにする。

1回だけ更新可能なOnceCellでフォルダ名をダイアログから取得 rust tauri vue

前回ダイアログを扱ったがフォルダ名をグローバルに書き出す方法がわからなかったので、最近メジャーなOneCellを使った方法で、フォルダ名をグローバルにコピーする方法をチェック。

ただし…、1回だけ更新可能だと使いずらいので別の方法を探す必要あり。

 

dj-dz.hatenablog.com

#![cfg_attr(
    all(not(debug_assertions), target_os = "windows"),
    windows_subsystem = "windows"
)]

use tauri::api::dialog;
use tauri::{CustomMenuItem, Menu, MenuItem, Submenu};
use once_cell::sync::OnceCell;

static folder_name: OnceCell<String> = OnceCell::new();

#[tauri::command]
fn open_folder_dialog(){
    dialog::FileDialogBuilder::default()
    .pick_folder(|path_buf| match path_buf {
      Some(p) => {
        folder_name.set(p.into_os_string().into_string().unwrap());
        println!("選択されたフォルダ: {}", folder_name.get().unwrap());
    }
      _ => {}
    });
}

#[tauri::command]
fn check_folder_name()
{
    println!("選択されたフォルダ!!: {}", folder_name.get().unwrap());
}

fn main() {
    tauri::Builder::default()
    .invoke_handler(tauri::generate_handler![open_folder_dialog, check_folder_name])
    .run(tauri::generate_context!())
    .expect("error while running tauri application");
}

 

 

tauri vue の初歩 - rust

App.vueとGreet.vueの関連

紐づけ①

<script setup>
import Greet from "./components/Greet.vue";
</script>

紐づけ②

    <Greet />

にて、Greet.vueのtemplateを読み込むようになる。

文字入力部分について、vueのv-modelという仕組みを使う。

 

await invokeにてrustのコードを読み込む

 

 

 

tauri (1:初歩)- RUST関連の備忘録

アプリケーションの作成

yarn create アプリケーション名

そのあと、cdすること。

 

実行

yarn tauri dev

 

配布用にコンパイル

yarn tauri build

セキュリティ対策ソフトに例外設定していても何故か引っかかるため、何度もやり直し…。