Raspberry Pi Pico WでWiFi経由でセンサデータをストリーミング配信

Raspberry Pi Pico WとADXL343を接続。

Raspberry Pi Pico Wの最も良い使い方の1つは、Webページを提供する機能を含むことです。

つまり、WiFiの範囲内であれば、スマホのセンサーデータをモニタリングするために使用することができます。

このプロジェクトでは、加速度データをモニターする方法の簡単な基礎と、ADXL343センサーを叩くと作動するデジタルサイコロを作成します。

ビデオ

必要な部品

  • ブレッドボード
  • ジャンパー線

ADXL343とは?

アナログ・デバイセズのADXL343は、先代のADXL345に続く製品です。

センサーは3軸の測定が可能で、感度は+-2g、+-4g、+-8g、+-16gの4段階で設定できます。低域は低速の動きに対して分解能が高く、高域は高速のトラッキングに適しています。

ADXL343にはCircuitPythonのライブラリもあり、MicroPythonで使えるので、かなり簡単に始められるようになりました。

このプロジェクトを行うには、Pico Wと同様にADXL343にヘッダをハンダ付けする必要があります。

ADXL343とPico Wの接続

Raspberry Piに接続するピンは4本です。

を接続します。 VIN にピンを刺す。 3.3V出力 をRaspberry Pi Pico Wにインストールします。

を接続します。 GND をPico Wのグランドピンに接続してください。

を接続します。 エスディーエー 宛がう GPIO0;

を接続します。 SCL 宛がう GPIO1.

Raspberry Pi Pico WのMicroPythonファームウェアをフラッシュする。

まず、MicroPythonのファームウェアをPico Wにフラッシュする必要があります(まだフラッシュしていない場合)。

こちらからダウンロードできます。

次に、BOOTSELボタンを押しながら、Picoをコンピュータに接続します。新しいドライブが表示されるはずです。ダウンロードした.UF2ファイルをそのドライブにコピーしてください。

Raspberry Pi Pico WにThonnyをセットアップする。

Thonnyを開いてください。ダウンロードしてない人は ここで入手する

インタプリタに設定する MicroPython (Raspberry Pi Pico) をクリックすると、Thonny IDEのウィンドウの左下に表示されます。

Pico Wにライブラリーをコピーする

ライブラリやファイルは、こちらのGithubリポジトリからダウンロードしてください。

ZIPファイルをダウンロードするには、そのリンク先に行き、緑色の""をクリックします。コード" ボタンをクリックし ZIPダウンロード.

ダウンロードしたら、どこか覚えのある場所で解凍してください。

次に、Thonny IDE で、次のようにクリックします。 表示 > ファイル をクリックすると、あなたのファイルシステムとPico Wのファイルシステムが表示されます。

解凍したファイルを移動し、フォルダに入る MicroPython > II Pico W センサーサーバー。 各項目を右クリックし、"Upload to /" をクリックして、すべてをPico Wにコピーします。

コードの修正

Raspberry Pi PicoをWiFiネットワークに接続させるためには、まず 秘密.py を変更し sid そして pwの値を入力します。前者にはネットワークのSSID(名前)、後者にはパスワードを入力します。ファイルを保存します。

のです。 索引.html は、配信されるウェブページです。行の"<p>X AccX|Y AccY|Z AccZ</p>" と <p>結果 DiceVal</p> は、プロジェクト実行時にセンサーデータに置き換わります。

Raspberry Pi PicoをWiFiに接続する。

のです。 main.py は、アクションが起こる場所です。

これらの線は、あなたのWiFiに接続します。の文字列を変更するのを忘れないでください。 RP2.カントリー あなたの国がドイツ(DE)でない場合。


# エラーの可能性を避けるために国を設定する
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# 節電モードを無効にする必要がある場合
# wlan.config(pm = 0xa11140)

# 無線チップのOTPでMACアドレスを見てみる
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# その他のクエリ
# print(wlan.config('チャンネル'))
# print(wlan.config('essid'))です。
# print(wlan.config('txpower'))です。

# 安全のために別のファイルからログインデータをロードする
ssid = secrets['ssid'] (秘密)
pw = secrets['pw'] (秘密)

wlan.connect(ssid, pw)

このコードのおかげで、WiFi接続が成功すると、オンボードのLEDが3回点滅します。また、メッセージとThonnyで見ることのできるIPアドレスが表示されます。 このIPアドレスは、後でサーバーにアクセスするのに便利です。

   led = machine.Pin('LED',machine.Pin.OUT))です。
    for i in range(wlan.status()):
        led.on()
        時間.sleep(0.2)
        led.off()
        time.sleep(0.2)
    print('Connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

エラーが発生した場合は、エラーコードの値に基づいてLEDが点滅します。

エラーの意味

  • 0 = リンクダウン
  • 1 = リンクジョイン
  • 2 = Link NoIp
  • 3 = リンクアップ
  • -1 = リンクフェイル
  • -2 = Link NoNet
  • -3 = Link BadAuth

Pico WとADXL343の接続

I2Cオブジェクトを初期化します。

# I2Cの初期化
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)

そして、この2本の線は加速度センサーを作成し、タップ検出(サイコロ読み用)を可能にします。

# 加速度センサオブジェクトの作成
加速度センサ = adafruit_adxl34x.ADXL343(i2c)

accelerometer.enable_tap_detection()

コードの実行時間

コードを実行するには、Thonnyの実行ボタン(上部のツールバーの緑色のボタンの中に再生アイコンがあるボタン)を押します。

そして、Raspberry Pi Pico WのIPアドレスに接続し、Thonnyのシェルを開いていれば、そこで見ることができます。さもなければ、ルータにログインして、Pico WのIPアドレスを調べます。

Pico W はソケット接続で HTTP サーバを動作させており,ここで定義された接続を待ち受けます.

addr = socket.getaddrinfo('0.0.0', 80)[0][-1]を実行します。

s = socket.socket()
s.bind(addr)
s.listen(1)

Pico WのIPアドレスに接続すると、このコードが起動し、index.htmlが1秒ごとに最新のデータで更新されます。

   cl, addr = s.accept()
        print('クライアント接続元', addr)
        cl_file = cl.makefile('rwb', 0)
        while True:
            line = cl_file.readline()
            if not line or line == b'\n':
                break
            
        response = get_html('index.html')
        data = 加速度計.加速度
        tapped = accelerometer.events['tap'] (タップ)
        response = response.replace('AccX', str(データ[0]))
        response = response.replace('AccY', str(データ[1]))
        レスポンス = レスポンス.replace('AccZ', str(data[2]))
        if tapped:
            dice_val = str(random.randint(1,6))
        response = response.replace('DiceVal', dice_val)
        
        cl.send('HTTP/1.0 200 OKrnContent-type: text/htmlrn╱')
        cl.send(レスポンス)
        cl.close()
main.py は、Pico W のサーバに接続したときに、値を現在の読みに置き換えます。

ご覧のように、AccX、AccY、AccZをセンサーのデータに置き換えています。

センサーがタップされたら、1〜6のランダムな整数をHTMLページの "DiceVal "文字列に出力します。

次はどうする?

このチュートリアルは、センサーデータをウェブページにストリーミングする簡単な方法の一つです。

実はこれ、他のセンサーにも使えるコードなんです。

方法論は変わりません。センサーのための正しいライブラリを見つけて、main.py と index.html を修正し、センサーデータを取得して正しい値をウェブページにプッシュできるようにする必要があります。

DHT22やBME688を使った温湿度センサーのプロジェクトや、光抵抗器を使った明るさセンサーのプロジェクトなど、他にもいろいろなプロジェクトに着手することができます。

1コメント

  1. Ken Anderson on 7月 15, 2022 at 7:24 am となります。

    HTML5の機能を使うことで、HTML5がどのように作られているかを知ることができるのは良いことだ。

コメントを残す