BLEのGATTサービス(FTMP/FTMS)を実装したmicro:bitと家庭用サイクルトレーナーでバーチャルライドを楽しもう

# はじめに
在宅勤務が増え、外出する頻度も少なくなり、運動不足が続いていませんか。そこで、BLEのGATTサービス(FTMP/FTMS)を実装したmicro:bitと家庭用サイクルトレーナーでバーチャルライドを楽しんでみませんか。

`micro:bit mini bicycle`をmicro:bitにインストールすると、マグネット負荷方式の家庭向けサイクルトレーナーの負荷を制御したり、クランクのセンサーから回転数や速度、パワーを算出したりすることが可能となります。また、micro:bitのBluetooth機能を使って、スマホなどと無線通信でき、スマホから、負荷の強度を変更できたり、スマホで回転数や速度、パワーを確認したりできます。さらには、Zwiftをはじめとした各社のバーチャルライドアプリ（サービス）も楽しむことができます。

> 補足：BBC micro:bit v1.5をターゲットとしています。

**例：マグネット負荷方式の家庭向けサイクルトレーナー**
[Amazon: マグネティックバイクミニ （黄色）- 10588](https://amzn.to/3bm5ly5)
[Amazon: マグネティックバイクミニ （白色）- 9593](https://amzn.to/3bqcnBW)

# インストール方法
![microbit-minibicycle.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/7979d4aa-12a5-5c03-32ab-9e963531170a.jpeg)

## 必要なもの

1. micro:bit本体 (v1.5)
1. 小型サーボモーター(MG90S等)
1. マグネット負荷方式の家庭向けサイクルトレーナー
1. 3Dプリンターで作成したパーツ([GitHubのリポジトリ](https://github.com/jp-96/microbit-minibicycle/tree/main/docs/print3d))
1. 工具、ネジ、配線部品等
1. コンパイル済みのHEX形式ファイル（[GitHubのリポジトリ](https://raw.githubusercontent.com/jp-96/microbit-minibicycle/main/docs/build/microbit-minibicycle.hex)）

##コンパイル済みのHEX形式ファイル
次のいずれかの方法で、HEXファイルを入手し、micro:bitに転送（コピー）します。

1. githubからコンパイル済みのHEXファイルをダウンロードする
2. mbed オンライン コンパイラで、プログラムをインポートし、コンパイルする

### 入手方法1 - githubからコンパイル済みのHEXファイルをダウンロードする
次のリンクからHEX形式ファイルをダウンロードし、micro:bitへ転送（コピー）します。
[microbit-minibicycle.hex](https://raw.githubusercontent.com/jp-96/microbit-minibicycle/main/docs/build/microbit-minibicycle.hex)

### 入手方法2 - mbed オンライン コンパイラで、プログラムをインポートし、コンパイルする

1. Mbed オンライン コンパイラを開きます  
https://ide.mbed.com/compiler/
2. プログラムをインポートします  
https://github.com/jp-96/microbit-minibicycle.git
3. コンパイルを実行し、コンパイルに成功すると、HEX形式ファイルがダウンロードされます
4. ダウンロードしたHEX形式ファイルをmicro:bitへ転送（コピー）します

# 接続方法
小型サーボモーターをmicro:bitのP1端子へ、センサー信号をmicro:bitのP2端子へそれぞれ接続します。
配線方法については、手書きの回路図を参考にしてください。

![手書きの回路図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/ce3de580-6437-40e1-7135-004dc62a437d.jpeg)


# 使い方
micro:bitのAボタンとBボタンで、負荷を1から8まで変更できます。
スマホの汎用BLEアプリで、BIKEMINI:BITに接続すると、回転数や速度、パワーを確認したり、スマホから、負荷の強度を変更できたりします。

## 汎用BLEアプリ

- [Google Play - nRF Connect for Mobile](https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=ja&gl=US)
- [App Store - nRF Connect: Bluetooth App](https://apps.apple.com/jp/app/nrf-connect/id1054362403)

## バーチャルライド
いくつかのバーチャルライドアプリも対応していますので、試してみてください。

- Zwift - https://www.zwift.com/
- Kinomap - https://www.kinomap.com/
- RGT CYCLING - https://www.rgtcycling.com/
- OneLap - https://www.onelapjapan.jp/ , https://www.onelap.com/

# 開発資料

## リンク
1. [**家庭用サイクルトレーナーにmicro:bitをつなぐ（その１）**  
ワイヤレス運動測量計から出力されるクランク回転センサーの信号をモニターする](https://qiita.com/jp-96/items/110b6364a3da89553b27)
2. [**家庭用サイクルトレーナーにmicro:bitをつなぐ（その２）**  
STEP信号からワイヤレス運動測量計に表示されているスピードをmicro:bitで推定する](https://qiita.com/jp-96/items/c494da04f04603ef258d)
3. [**家庭用サイクルトレーナーにmicro:bitをつなぐ（その３）**  
STEP信号からケイデンスとスピードを求めるモジュールをドライバー（アイドル・コンポーネント）として作成する](https://qiita.com/jp-96/items/3863e31b1c92a9caa44b)
4. [**家庭用サイクルトレーナーにmicro:bitをつなぐ（その４）**  
スマホ・アプリでケイデンスやスピードを表示できるようにBLEのGATTサービス(FTMP/FTMS)を実装する](https://qiita.com/jp-96/items/abb988a286bfb72ea7c6)
5. [**【最終回】家庭用サイクルトレーナーにmicro:bitをつなぐ（その５）**  
BLEのGATTサービス(FTMP/FTMS)で推定パワーをサポートする](https://qiita.com/jp-96/items/f7432824716f55de4930)

## モジュールの構成 - シーケンス図

開発当初のシーケンス図をメモとして残しておきます。実装とは異なっています。

![当初のシーケンス図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/0b4bfc95-da55-ad6f-1b9e-06073052b352.jpeg)

## ソースコード - GitHub
[https://github.com/jp-96/microbit-minibicycle](https://github.com/jp-96/microbit-minibicycle)

# おわりに

micro:bitを組み合わせることにより、家庭用サイクルトレーナーでも、気軽にバーチャルライドを楽しめます。
パワー計算や負荷強度は、プログラミング可能ですので、バーチャルライドもプログラミングの楽しんでください。