LoginSignup
7
3

More than 1 year has passed since last update.

ESP32のBLE機能を使って、Zwiftアプリと連携する

Last updated at Posted at 2021-11-07

概要紹介

オンラインサクリングアプリのZwiftでは自転車のペダルを漕ぐ力出力:パワーの情報をもらって自転車のアバターが走行する仕組みとなっております。(ケイデンスなどでも可)
今回、通信環境の構築を一度したかったので試しにESP32のBLE通信を使って擬似的なパワー情報を生成してZwift内のアバターを動かしてみました。

環境

・Zwiftアプリ:iPad
・ESP32

github

参考元

BLE通信内容

参考元でほぼソフトはできていたので、自分のESP32のBLE通信の内容に合わせて更新したものとなります。まずは参考元をソフトを確認。

BLEService CyclePowerService("1818");
BLECharacteristic CyclePowerFeature("2A65", BLERead, 4);
BLECharacteristic CyclePowerMeasurement("2A63", BLERead | BLENotify, 8);
BLECharacteristic CyclePowerSensorLocation("2A5D", BLERead, 1);

ServiceID:1818, CharacteristicID:2A63 (Notifyが連続読込)となります。

short power;
unsigned short revolutions = 0;
unsigned short timestamp = 0;
unsigned short flags = 0x20;
byte sensorlocation = 0x0D;
bleBuffer[0] = flags & 0xff;
bleBuffer[1] = (flags >> 8) & 0xff;
bleBuffer[2] = power & 0xff;
bleBuffer[3] = (power >> 8) & 0xff;
bleBuffer[4] = revolutions & 0xff;
bleBuffer[5] = (revolutions >> 8) & 0xff;
bleBuffer[6] = timestamp & 0xff;
bleBuffer[7] = (timestamp >> 8) & 0xff;

powerを送信している部分が配列の[2]と[3]となっているので、適当にpowerに値を入れてBLUの送信変数の[2]と[3]に入れれば良さそうです。他の部分はちょっとよくわからないので、そのまま同じものを入れておきます。

今回使うソフトへの反映は下記。それぞれのUUIDに余分なものがついていますが初期の8桁の下4桁しか使用しないので、そこだけ先ほどのUUIDの値にします。

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

#define SERVICE_UUID        "00001818-0000-1000-8000-00805F9B34FB" 
#define CHARACTERISTIC_UUID "00002A63-0000-1000-8000-00805F9B34FB" 

powerの値をloop周期に合わせて加算します。

        adj_time += interval;

        if(adj_time > 200){     
            power_add  = 0;
            adj_time   = 0;
        }else{
            power_add += 1;
        }

          power = 100 + power_add;

        buff[0] = flags & 0xff;
        buff[1] = (flags >> 8) & 0xff;
        buff[2] = power & 0xff;
        buff[3] = (power >> 8) & 0xff;
        buff[4] = revolutions & 0xff;
        buff[5] = (revolutions >> 8) & 0xff;
        buff[6] = timestamp & 0xff;
        buff[7] = (timestamp >> 8) & 0xff;

あとはZwiftを起動して、パワーソースを選択します。”ESP32”の項目があるかと思いますので選択します。Zwiftの動作画面でPowerの値が変化していればOKです。

IMG_01B6767DAE7F-1.jpeg

IMG_0449.jpg

Zwiftにpower値を送れるようになったので、今後サイクリング用のデバイスを自作して連携できるようにしていきたいと思います。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3