1000m タイムトライアルサイト 構築(3)

Javascript発見)

 いろいろやっている内に、JavascriptでBLEを使えることを発見。Javascriptで動かすためには、Windows10と最新のブラウザが必須だが、Javascriptで作れるのであればスマホタブレットでも動くだろうし、WEBサイトが作れる。アプリ(プログラム)をインストールするより、ハードルが低いので、ユーザの拡大も期待できそう。Javascriptは、C#よりも、いい加減なところがあり、取っつきやすいのも有難い。

 JavascriptのBLE APIの本家はGoogleで、

samples/web-bluetooth at gh-pages · GoogleChrome/samples (github.com)。Sampleにnortificationがあったが、一式ダウンロードしてhtmlをたたいても動かない。そもそも、htmlには存在しない筈のinclude文が書いてあったりして意味不明。結局、Sampleサイトのソースコードを取り出して、それをベースに作ってみることにした。

 canvas要素の勉強を行ったり、WEBから動画撮影が行えることに感心したりしながら、なんとか動きそうなものをでっち上げた。中身は種々のサンプルプログラムの切り貼りなので、全く美しくない。本来、避けるべきグローバル変数も思い切り使用している。とりあえず、まぁ、良いか。

 GoogleのBLE Notificationサンプルサイトは、

googlechrome.github.io

 このサイトで、cycling_speed_and_cadenceとcsc_measurementを選んで、start notificationsボタンを押すと、

f:id:Kanreki-Ganbaru-kun:20210226132903p:plain

というのが出てくる。しばらくするとペアリングできる機器(私の場合はXOSSのスピードセンサー)を見つけてきて、

f:id:Kanreki-Ganbaru-kun:20210226133037p:plain

 という画面になる。

 ここで、センサ(XOSS S-49513)を選択してペアリングボタンを押すと、サイトの真ん中にある窓に、

f:id:Kanreki-Ganbaru-kun:20210226133404p:plain

というのが出てくる。"> Notification started"以下が、センサからのデータ。

 1行目の、0x01 0x75 0x02 0x00 0x00 0xfc 0xd5というのを説明する。共通して付いている"0x"は、このデータが16進数であることを表している。16進数で2桁なので、00~ffまで、10進数でいうと0~255までの数値(2進数でいうと2の8乗個の数字)が入ることを示しているわけだ。これがデータの1つの単位(8bit)になる。

 1行目、最初のデータの0x01は、このセンサがスピードセンサであることを示している。2つめから5つめまでのデータ(0x75 0x02 0x00 0x00)は、ホイールの累積回転数。0x75は10進数で16*7+5=117、0x02は10進数で2。4つ目と5つ目のデータは0だから、ホイールの累積回転数は117+256*2=639であることがわかる(前ページの記事参照)。6つめから7つめのデータ(0xfc 0xd5)は、その累積回転数を記録した時の時間(1/1024秒単位)で、0xfcは10進数で16*15+12=252、0xd5は10進数で16*13+5=213。つまり、このときの時間は(256*252+213)/1024秒≒63.2秒となる。こういうデータがセンサーから1秒ごとに通知(notification)される。1行目から3行目まで値が変化していないのは、センサーが回転を検知しなかったことを示す(ホイールが回転しない=速度0)。4行目でデータの数字が変化しているのは、手でセンサーを動かしたからだけれど、ホイールの回転だとみなせば、この変化分から自転車の速度が計算できるという訳だ。