9. @SunFounder コントローラーで遊ぶ

このプロジェクトでは、SunFounder Controller APPを使用してリモートプロジェクトを構築する方法を学びます。 ローカルエリアネットワーク(LAN)環境で、スマートフォンやタブレットを使ってPico W回路を制御できます。 Pico Wでシンプルなロボットを作成したい場合、このアプリは非常に便利です。

ここでは、APPのスライダーバーでサーボの角度を制御し、APPのゲージで超音波によって検出された距離を表示します。

1. 必要なコンポーネント

このプロジェクトで必要なコンポーネントは以下の通りです。

一式を購入することは確かに便利です、リンクはこちらです:

名前

このキットのアイテム

リンク

ケプラーキット

450以上

Kepler Kit

以下のリンクからそれぞれ個別に購入することもできます。

番号

コンポーネント

数量

リンク

1

Raspberry Pi Pico W

1

BUY

2

マイクロUSBケーブル

1

3

ブレッドボード

1

BUY

4

ジャンパーワイヤー

数本

BUY

5

サーボ

1

BUY

6

超音波モジュール

1

BUY

7

Li-po充電モジュール

1

8

18650バッテリー

1

9

バッテリーホルダー

1

2. 回路の構築

警告

ダイヤグラムに示されているように、Li-poチャージャーモジュールが接続されていることを確認してください。そうでない場合、ショートが起きてバッテリーや回路が損傷する可能性があります。

../_images/9.sc_bb.png

3. SunFounderコントローラーのセットアップ

  1. SunFounder Controller APPAPP Store(iOS) または Google Play(Android) からインストールします。

    ../_images/sc-a-2.jpg
  2. APPを開いて、ホームページの + ボタンをクリックしてコントローラーを作成します。

    ../_images/sc-a-3.jpg
  3. ここでは BlankDual Stick を選びます。

    ../_images/sc-a-4.jpg
  4. 空のコントローラーが表示されます。

    ../_images/sc-a-5.jpg
  5. H エリアをクリックして、 Slider ウィジェットを追加します。

    ../_images/sc-a-6.png
  6. コントロールの歯車をクリックして設定ウィンドウを開きます。

    ../_images/sc-a-7.jpg
  7. 最大値を180、最小値を0に設定し、 Confirm をクリックします。

    ../_images/sc-a-8.jpg
  8. Lエリアをクリックして、ゲージウィジェットを追加します。

    ../_images/sc-a-9.jpg
  9. ゲージの歯車をクリックして設定ウィンドウを開き、最大値を100、最小値を0、単位をcmに設定します。

    ../_images/sc-a-10.png
  10. ウィジェットの設定が完了したら、保存をクリックします。

4. コードの実行

注釈

Pico Wが現在Anvilファームウェアを使用している場合、 1.3 Raspberry Pi PicoにMicroPythonをインストール が必要です。

  1. kepler-kit-main/libs のパスから ws.pywebsocket_helper.py をRaspberry Pi Pico Wにアップロードします。

    ../_images/9_sc3.png
  2. ws.py スクリプトをダブルクリックして、WiFiの SSIDPASSWORD を入力します。

    ../_images/9_sc1.png
  3. kepler-kit-main/iot のパス下の 9_sunfounder_controller.py を開きます。 Run current script ボタンをクリックするか、F5を押して実行します。接続に成功すると、Pico WのIPが表示されます。

    ../_images/9_sc2.png

    注釈

    このスクリプトを起動できるようにするには、それをRaspberry Pi Pico Wに main.py として保存できます。

  4. SunFounder Controller APPに戻り、 Connect ボタンをクリックします。

    ../_images/sc-c-4.jpg
  5. PicoWが検出された場合、それを直接タップして接続します。

    ../_images/sc-c-5.jpg
  6. 自動的に検索しない場合、IPを手動で入力して接続することもできます。

    ../_images/sc-c-6.png
  7. Runボタンをクリックした後、Hエリアのスライダーバーをスライドすると、サーボが角度を調整します。Lエリアのゲージは、手が超音波センサーから100cm以内であれば距離を表示します。

    ../_images/sc-c-8.jpg

どのように動作するか?

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 をご参照ください。