温湿度計ゲートウェイ(THGateway)の作製(途中)
はじめに
私は趣味の盆栽を通じて、IT技術を深く掘り下げたいと思っています。
元はマイクロコントローラーにセンサーを付けて、情報を取得しようと悪戦苦闘していました。
ヒトの感覚と機械とのずれを認識し、いかにして欲しいデータに近づけるかが大切でした。
センサーとの格闘に疲れたとき、校正済みで安定した値を返してくれるSwitchbot温湿度計の魅力に引き寄せられ、温度湿度の取得だけにとどまらず、屋外向けのケーシング作製をおこない、果ては、かわいくSwitchbot温湿度計を飾るためのミニ百葉箱を作りはじめ、木材工作の楽しさを知るきっかけとなりました。
Switchbot温湿度計+ミニ百葉箱を知人に譲り、新しいものと交換したところ、今まで愛用していたBLEGatewayTestから値が拾えなくなっていることが分かりました。
何か違いがあるのか調べてみると、ファームウェアのバージョンが違っており、発信されている信号も異なっていました。
思えば、このBLEGatewayTest。テスト運用のままうまく使えていたので、そのまま愛用していたものでした。
部屋の各所+屋外に置かれたSwitchbot温湿度計から発信されるBLE信号をつかまえて、解読し、Ambientへデータを飛ばしています。
このプログラムの好きなところはSwitchbot温湿度計を特定するのみで個体の特定を行いません。
このため、ソースを書き換えることなく増設することができます。
ただ、あくまでもテスト運用中でしたので、表示される情報はぐちゃぐちゃ、ソース管理もきちんとできていない状態でした。
半年前に書いたソースはもうすでに忘却の彼方にあり、思い出すところからのスタートになります。
ならば、もう少しきちんと作ってみたい。
ということで、やってみることにしました。
改良したい点は、
・使用するハードウェアをM5StackからAtomMatrixへ変更する。
・新しく加えたSwitchbot温湿度計も表示できるようにしたい。
・表示内容を改善したい。(もしくは、表示をしないようにしたい。)
・Switchbot温湿度計だけではなく、CYALKIT-E03も対象としたい。
等です。
以前の記事
【SwitchBot温湿度計モニター】の製作~ソースコード付き~
で課題としていた、再起動しても値を残すようにするのは、今回も見送ることにいたします。
しばらく使っていましたが、調子が悪くなり再起動を掛けた際、認識順序の違いからグラフの色が変わってしまうことはありましたが、特にそれ以上の問題は起きていません。
本格的にIoTデバイスとして考えるときは、今度こそはMACアドレスで個体認識させたほうがよいでしょうから、それでよいと思います。
使用するハードウェアをM5StackからAtomMatrixへ変更する。
最終版のソースが見当たらず、結局note.comにアップしたソースを元に再構築しました。
後は関係する箇所(表示関係)を書き換えました。
新しく加えたSwitchbot温湿度計も表示できるようにしたい。
まずはなぜ表示されないかを調べてみることにしました。
見た目はまったく同じです。
外見では見分けはつきません。
アプリで見てみます。
従来機はv2.6、新規追加機はv2.8です。
アンドロイドのアプリ、nRF Connectを用いてどんな信号が来ているか見てみます。
確かに、従来機と新規追加機とで信号が異なっています。
異なっていることはわかったのですが、そもそも、Bluetoothってどんな仕掛けだったっけ?
ぐらいに忘れてしまっています。
ここはもう一度勉強し直しです。
今回はこちらのブログにお世話になりました。
ムセンコネクト
【サルでもわかるBLE入門】(1) BLEの基礎
ムセンコネクト
【サルでもわかるBLE入門】(2) アドバタイズとGATT通信
少し思い出してきました。
Switchbot温湿度計から発信されている、BLEアドバタイズを受信し、選別・特定し、その中に含まれる、温度・湿度を読み取ることをしていました。
この選別・特定方法が、新規追加機には当てはまっていなかった。
というのが調査の結果になります。
もし、ServiceUUIDを持っていたら、SwitchbotのUUIDである"cba20d00-224d-11e6-9fb8-0002a5d5c51b"と照合していました。新規追加機ではそもそもUUIDのデータが飛んできていません。
では、どのように対処すればよいかについて考えます。
特定できるデータはないか探します。
nRF Connectの情報を元に見ていくと、Service DataのUUID:0x0D00、0xFD3Dが気になります。
これらのデータがSwitchbot温湿度計を表していればよいのですが、これだけではわかりません。
だいぶBLEの仕掛けに頭が慣れてきたので、プログラムで取得できた値を見てみます。
manufacturer dataの中に6909が見えます。これは0x0969、Woan Technology (Shenzhen) Co., Ltd.を示しています。従来機の場合は、0x0059、Nordic Semiconductor ASAと書かれた部分です。
この部分を取り出して、会社名でフィルタリングする形でいいのか。。。
少し不安が残ります。
結局今回は、下記の方法で判定しました。
1.Service Dataを持っている
2.かつ、そのデータのサイズが6バイト
3.自前の構造体SwitchBotServiceDataへ読込み、deviceTypeが'T'か比較する。
※'T':SwitchBot MeterTH (WoSensorTH) Normal Mode
とすると、新規追加機からもデータを取得することができました。
表示内容を改善したい。(もしくは、表示をしないようにしたい。)
そもそもゲートウェイに表示する情報って何でしょう?
WifiルーターやHUBを見ていると、LEDがチカチカ光っている様子が見えます。
温度や湿度の具体的な数字というよりも、データが届いているかどうかがわかるような仕掛けが必要です。
11★22
--★--
33★44
--★--
〇〇〇〇〇
11:アドレス1、22:アドレス2、33:アドレス3、
44:アドレス4、★:Ambient更新までの残り時間、〇:fConnect
こんな感じで考えてみました。
Switchbot温湿度計を最大4台まで管理できるようにしています。
Ambientでは8個のデータを送れますので、実際には4台までの温度・湿度を管理できることになります。
余談ですが、私の開発スキルではこれぐらい表示が制限されている方が、楽しくUIを設計できます。
M5Stick-CやM5Stackのように表示できてしまうと、何をしたらよいか、途端にわからなくなってしまいます。。。
Switchbot温湿度計だけではなく、CYALKIT-E03も対象としたい。
ずいぶん昔、まだ電子工作に興味を持つ前に、棚場の温度管理のために何かできないかと考えていた時、
Cypress Semiconductor社(現在はInfineon)のCYALKIT-E03を入手していました。
Solar-Powered BLE Sensor 5 Pack
ソーラーで電源供給できて、BLEで温湿度を発信します。
USBドングルとBLEセンサーの評価キットCYALKIT-E02のBLEセンサー部分のみの追加パックなのです。
今までも何度かCYALKIT-E02の技術資料を読んで、何とかしようと思っていましたが、結局よくわからないままでした。
BLEについての考え方が全く分からず、アプリで発信されているデータを読むという術も知りませんでした。
でも、今回は違います。5年近く寝かせてきた装置を活用する機会がやってきました。
なんとかできそうな気がしています。
CYALKIT-E02の技術資料とnRF Connectの出力をにらみながら、データを取り出します。
さいごに。。。そしてつづく
今回は思い立ってから再勉強しプログラムを書き換えました。とても幸運なことに大きなつまずきもせず完成まで進めることができました。全く真っ白になったかに思えた私の記憶も再勉強するとだんだんと思い出してきました。今までの苦労は無意味ではなかったと安心しました。
という流れで、さいごにプログラムソースを見ていただき終了にしようと考えていました。
ところが、なかなか思い通りにならないのが電子工作の世界。(今回は全く工作をしていませんが。。。)
データの受信が安定していません。
とびとびです。
今まで使用していたBLEGatewayTestの表示を見てみると、今まで受信できていなかった3台目が表示されています。
でも何かおかしい様です。
棚場とリビングのデータの間をフラフラ渡り歩いているような感じです。
頭の中が真っ白になりました。全く理由が分かりません。
なぜ3台目のデータが急に取れ始めたのか?
なぜ1台目と2台目のデータに似ているのか?
もっとしっかり調べなさいということなのでしょうか。。。
まずはここまでを記事にして、続きは次回といたします。
最後までお読みいただき、誠にありがとうございました。
#途中 #IoT #温湿度計ゲートウェイ #Ambient #Switchbot温湿度計 #M5Stack #AtomMatrix #CYALKIT -E03