外出したとき、家にいるペットがどのように動いているか、大切な物がちゃんとその場所にあるか気になりませんか
MicroBitのモーション検知機能とEthernet通信機能を組み合わせて、遠隔モーションディテクターとディスプレイ装置を作ってみました!
しかし、MicroBitはEthernet機能をサポートしておらず、関連する機能も提供していません。
そこで、Ethernetが可能なMicroBit FWも自分で作成しました!(作成過程は次の投稿で)
HW設定
MicrobitとW5500モジュールを用意します。
より快適に開発するために、MicroBitアダプターも購入しました。
WIZnetのW5500シリーズ製品、Wiz850ioとPico-Ethernet-Hatを使用しました。
(価格面ではHatを、サイズではWiz850ioをお勧めします。)
Micro:Bit
Wiz850io
Pico Ethernet Hat
SW設定
FWアップロード
公式のファームウェアではEthernet機能を使用することができません。ですから、私が作成したカスタムFW
を以下のGitからダウンロードしてください。
https://github.com/wiznetmaker/MicroBit_Ethernet/releases/tag/proto
ファームウェアファイルをMicrobitフォルダにコピーするだけでアップロードが可能です。
WindowsのバージョンによってはBootselボタンを使用することもあります。アップロード方法は公式ウェブサイトに説明されています。
Code
コード
二つのデバイスにそれぞれ異なるファイルを入れます。
ファイル名を変更しないでください。 ファイル名はmain.py
に設定する必要があります
https://github.com/wiznetmaker/MicroBit_Ethernet/tree/main/examples/Projects/MotionSyncNet
コード中のネットワーク設定のために、あなたの環境に合わせてNetwork Infomationを修正してください。
以下のnic.ifconfig()
関数のパラメータとして、デバイスIP、ネットマスク、ゲートウェイ、DNSの順に入力します。
* このプロジェクトではサーバーIPを入力する必要があるため、DHCPよりも静的IPを使用します。
def w5x00_init():
nic = network.WIZNET5K()
nic.active(True)
nic.ifconfig(('192.168.11.20','255.255.255.0','192.168.11.1','8.8.8.8'))
print('IP address :', nic.ifconfig())
while not nic.isconnected():
sleep(1)
DisplayはServerとして、Motion DetectorはClientとして設定します。
Motion Detectorには、DisplayデバイスのIPをServer IPとして入力 します。
main関数のs.bind()
のパラメータとして、Motion DetectorデバイスのIPとクライアントで設定したポート番号を入力します。
def main():
w5x00_init()
s = socket()
s.bind(('192.168.11.20', 5000)) #Motion_Detector IP
MicroBitで提供されているコードを基に作成しましたが、動きに応じて異なるアイコンを変更することも可能です。
Exampleを参考にして、Displayのアイコンを修正してみてください。
コードはDisplay/main.py
で以下を修正すればいいです。
def display_gesture(gesture_bytes):
gesture_to_display = {
"shake": Image.CONFUSED,
"up": Image.ARROW_N,
"down": Image.ARROW_S,
"face up": Image.HAPPY,
"face down": Image.SAD,
"left": Image.ARROW_W,
"right": Image.ARROW_E,
"freefall": Image.SURPRISED,
"3g": 3,
"6g": 6,
"8g": 8,
}
私は騒がしいのが苦手なので入れていませんが、アラームも追加できます。
MicroBitの基本機能を使って、さまざまにカスタマイズしてみてください。
コードの作成が完了したら、両方のデバイスにFWとコードをアップロードしてください。
私はThonnyIDEを使用しています。
Demo