9. @SunFounder コントローラーで遊ぶ¶
このプロジェクトでは、SunFounder Controller APPを使用してリモートプロジェクトを構築する方法を学びます。 ローカルエリアネットワーク(LAN)環境で、スマートフォンやタブレットを使ってPico W回路を制御できます。 Pico Wでシンプルなロボットを作成したい場合、このアプリは非常に便利です。
ここでは、APPのスライダーバーでサーボの角度を制御し、APPのゲージで超音波によって検出された距離を表示します。
1. 必要なコンポーネント
このプロジェクトで必要なコンポーネントは以下の通りです。
一式を購入することは確かに便利です、リンクはこちらです:
名前 |
このキットのアイテム |
リンク |
---|---|---|
ケプラーキット |
450以上 |
以下のリンクからそれぞれ個別に購入することもできます。
番号 |
コンポーネント |
数量 |
リンク |
---|---|---|---|
1 |
1 |
||
2 |
マイクロUSBケーブル |
1 |
|
3 |
1 |
||
4 |
数本 |
||
5 |
1 |
||
6 |
1 |
||
7 |
1 |
||
8 |
18650バッテリー |
1 |
|
9 |
バッテリーホルダー |
1 |
2. 回路の構築
警告
ダイヤグラムに示されているように、Li-poチャージャーモジュールが接続されていることを確認してください。そうでない場合、ショートが起きてバッテリーや回路が損傷する可能性があります。
3. SunFounderコントローラーのセットアップ
SunFounder Controller APP を APP Store(iOS) または Google Play(Android) からインストールします。
APPを開いて、ホームページの + ボタンをクリックしてコントローラーを作成します。
ここでは Blank と Dual Stick を選びます。
空のコントローラーが表示されます。
H エリアをクリックして、 Slider ウィジェットを追加します。
コントロールの歯車をクリックして設定ウィンドウを開きます。
最大値を180、最小値を0に設定し、 Confirm をクリックします。
Lエリアをクリックして、ゲージウィジェットを追加します。
ゲージの歯車をクリックして設定ウィンドウを開き、最大値を100、最小値を0、単位をcmに設定します。
ウィジェットの設定が完了したら、保存をクリックします。
4. コードの実行
注釈
Pico Wが現在Anvilファームウェアを使用している場合、 1.3 Raspberry Pi PicoにMicroPythonをインストール が必要です。
kepler-kit-main/libs
のパスからws.py
とwebsocket_helper.py
をRaspberry Pi Pico Wにアップロードします。ws.py
スクリプトをダブルクリックして、WiFiのSSID
とPASSWORD
を入力します。kepler-kit-main/iot
のパス下の9_sunfounder_controller.py
を開きます。 Run current script ボタンをクリックするか、F5を押して実行します。接続に成功すると、Pico WのIPが表示されます。注釈
このスクリプトを起動できるようにするには、それをRaspberry Pi Pico Wに
main.py
として保存できます。SunFounder Controller APPに戻り、 Connect ボタンをクリックします。
PicoWが検出された場合、それを直接タップして接続します。
自動的に検索しない場合、IPを手動で入力して接続することもできます。
Runボタンをクリックした後、Hエリアのスライダーバーをスライドすると、サーボが角度を調整します。Lエリアのゲージは、手が超音波センサーから100cm以内であれば距離を表示します。
どのように動作するか?
ws.py
ライブラリの WS_Server
クラスは、APPとの通信を実装しています。以下は、その基本機能を実装するためのフレームワークです。
from ws import WS_Server
import json
import time
ws = WS_Server(8765) # WebSocketの初期化
def main():
ws.start()
while True:
status, result = ws.transfer()
time.sleep_ms(100)
try:
main()
finally:
ws.stop()
まず、 WS_Server
オブジェクトを作成する必要があります。
ws = WS_Server(8765)
それを開始します。
ws.start()
次に、 while True
ループを使用して、Pico WとSunFounder Controller APP間でのデータ転送を実行します。
while True:
# WebSocketでデータを転送
status, result = ws.transfer()
# 転送データの状態
print(status)
# 受信したデータ
print(result)
# 送信するデータ
print(ws.send_dict)
time.sleep_ms(100)
status
は、SunFounder Controller APPからデータを取得できなかった場合に False
です。
そして、 result
は、Pico WがSunFounder Controller APPからフェッチしたデータです。
それを出力すると、以下のようなものが表示されます。これは、すべてのウィジェットエリアの値です。
{'C': None, 'B': None, 'M': None,,,,, 'A': None, 'R': None}
このケースでは、Hエリアの値を別々に出力し、それを使用して回路を操作します。
status, result = ws.transfer()
#print(result)
if status == True:
print(result['H'])
そして、 ws.send_dict
辞書は、Pico WがSunFounder Controller APPに送信するデータです。これは WS_Server
クラスで作成されています。 ws.transfer()
が実行されたときに送信されます。
そのメッセージは以下の通りです。
{'Check': 'SunFounder Controller', 'Name': 'PicoW', 'Type': 'Blank'}
これは空のメッセージであり、SunFounder Controller APPのウィジェットにそれをコピーするには、辞書内の対応するエリアに値を割り当てる必要があります。例えば、Lエリアに値 50
を割り当てます。
ws.send_dict['L'] = 50
表示されるデータは以下の通りです。
{'L': 50, 'Type': 'Blank', 'Name': 'PicoW', 'Check': 'SunFounder Controller'}
SunFounder Controllerの詳しい使い方については、 SunFounder Controller APP をご参照ください。