とらのメモ

IT関係やガジェットについての雑記

電子ペーパー+RaspberryPiでカレンダーを作る(2回目)

概要

RaspberryPi zero WHで1時間に1回SwitchBotから温度湿度を取得して、電子ペーパーに表示する。

経緯

画像右上の部分、
いままでOpenWetherの気温と湿度を表示していたんですが、 外気温ではなく部屋の温度を取得したかった為、Switchbotを購入しました。

BLE通信で気温と湿度が取得可能な為、部屋の外に1台、部屋に1台などで同時に複数台の値も取得可能です。

前回の記事 ikayome.hateblo.jp

作業環境

使うもの - RaspberryPi zero WH + microSD 16GB - 電子ペーパー(Waveshare製 7.5inch BW) - SwitchBot 温湿度計 - MacBook Pro(2020) OS Monterey - その他 接続・給電に使うコード等

今回やること - SwitchBotから温度, 湿度を取得できるようにする。

温度と湿度を取得する

iPhoneアプリからMACアドレスを確認します。

SwitchBotアプリでデバイス選択

設定 > デバイス情報

EF:B9:15:E2:8E:C6 MACアドレスが分かったので、これを小文字に変換してコードに組み込みます。

コードはこちらの記事のものをベースに使用させて頂きました。

qiita.com

元記事を参考にbluepyをインストール、権限付与した上で
switchbot.pyにメインスクリプトを書き足して使ってみてください。

  def receive_env_sensor(macaddr):  
    temp = 0  
    humid = 0  
    loop = 0  
    while humid == 0:  
        loop += 1  
        scanner = Scanner().withDelegate(SwitchbotScanDelegate(macaddr))  
        scanner.scan(5.0) # タイムアウト5秒  
        temp = scanner.delegate.sensorValue['Temperature']  
        humid = scanner.delegate.sensorValue['Humidity']  
  
        if loop >= 4:  
            break  
    return temp, humid

  
if __name__ == '__main__':
    print(receive_env_sensor('ef:b9:15:e2:8e:c6'))

1回のスキャンでは取得できないことが多々あった為、
湿度が取得できるまで4回は取得を試みるようにしています。
それでも取れなかった場合は0が表示されます。

MACアドレスは小文字に変換して書きましょう。

余談

今回の試みとはあまり関係がないけれど、

ラズパイで試す前にMac (Monterey)のBluetooth ExplorerからMACアドレスを取得しようとしたところ、
OSのバージョンアップ(Monterey)でいくつかのBluetoothの規格が削除されたことによってソフトがクラッシュするようになっていました。
→ 今回の目的はMacからBLE通信を行うことではないので、おとなしくiPhoneアプリから確認することによって解決しました。

終わり

以上です。

ずっとデスクにいても部屋の特定の場所に置いた温度湿度が分かるのはなかなか便利なんじゃないでしょうか。

2000円弱で買えるので複数配置して気温と比較してみるのも面白いかもしれません。