【IoT工作】Raspberry Pi Pico Wでワイヤレス呼び鈴を作ろう!

  • URLをコピーしました!

皆さんこんにちは。yossyです。

今回は、Raspberry PI Pico WのWi-Fi機能を活用して、家の中で使える「ワイヤレス呼び鈴」を作ります。

このプロジェクトを通して

  • APモード・STAモードの使い分け
  • TCPソケット通信の基本
  • MicroPythonでのソケットプログラミング

について学習することができます。Pico Wの魅力を体感してみましょう!

目次

Pico WのWi-Fiのキホン

まずは、Pico WのWi-Fiの基本であるAPモード・STAモードと、通信の方法の一つであるTCPについて説明します。

APモードとSTAモード

APモードとSTAモードは、Pico WがWi-Fiネットワークの中でどのような役割をするかを表します。

APモード

APモードはPico Wがアクセスポイントとなり、STAモードのPico W・スマートフォンやパソコンなどからの接続を待機するモードです。

このモードではPico Wはインターネットには接続せず、APに接続されたデバイスとの間でネットワークが構成されます。独立したネットワークや、インターネットがない環境で使いたいときに便利です。

STAモード

STAモードはPico Wがクライアントとなり、アクセスポイントに接続します。接続できるアクセスポイントは家のWi-FiルーターやAPモードのPico Wなどです。

このモードはアクセスポイントを経由して他のデバイスと通信できるので、電波が届く範囲が広いのが特徴です。
また、家のルーターに接続すればインターネット経由で時刻や天気を取得したりすることもできます。

yossy

家の中でのIoTプロジェクトにぴったりです!

図で比較


TCPとは?

TCPとは、ネットワークで信頼性を高くしてデータを送受信するプロトコル(ルール)です。データが正しく送信されたかを確認して、もし正しく送信できなかった場合には、そのデータを再送します。

データの確認をするので信頼性は高いですが、転送速度は遅くなってしまいます。そのため正しくデータが送られてほしいWEBページやメール、ファイルを転送するなどの通信をするときに利用されます。

具体的な送信手順を電話にたとえてみましょう。

ステップ電話の例TCPの処理
1受話器を取り「もしもし?」socket()connect()(クライアントが呼びかけ)
2相手が「はい、私です」サーバー側の accept() で接続を受け入れ
3会話(データのやり取り)send() で送信 → 相手の recv() で受信
4「それでは失礼します」close() でソケットを閉じて通信終了

このようになっています。

yossy

電話で例えると身近でわかりやすいですね!


家庭内で使える「呼び鈴」を作ろう!

ここからは、実際に呼び鈴を作って、Pico WのWi-Fi通信を体験してみましょう!

今回は2台のPico Wを両方STAモードにします。最初は片方をAPモード、もう片方をSTAモードにしていたのですが、思いの外通信距離が短かったので変更しました。

家のWi-Fiルーターに経由して、送信側のPico Wのボタンを押すとTCPでデータを送信。受信側がデータを受け取ると音がなるようにします。

必要なもの

用意するものはこちら。

  • Raspberry Pi Pico W 2台
  • スピーカー(パッシブブザー)
  • タクトスイッチ
  • ブレッドボード
  • ジャンパーワイヤー

Raspberry Pi Pico Wを2台使う以外は、どれも基本的なパーツで構成されていて作りやすいと思います。

・Raspberry Pi Pico WH

・スターターキット(パッシブブザー,タクトスイッチ,ブレッドボード,ジャンパーワイヤー)

開発環境の準備

Pico Wの開発環境の用意ができていない人は、この記事を参考にセットアップしましょう。

配線

受信側

接続:

Raspberry Pi PicoWスピーカー
GP16+
GND

送信側

接続:GP16→スイッチ→GND

プログラム

まずは受信側から

import network, socket
from machine import Pin, PWM
import time

# Wi-Fi接続
ssid = 'あなたのSSID'
password = 'あなたのパスワード'

sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.ifconfig(('192.168.XX.XX', '255.255.255.0', '192.168.XX.XX', '8.8.8.8'))  #この行でIPを固定
sta_if.connect(ssid, password)

while not sta_if.isconnected():
    time.sleep(0.1)


# ソケット準備
addr = socket.getaddrinfo(sta_if.ifconfig()[0], 8888)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)

#音を鳴らす関数
def pinpon():
    buzzer = PWM(Pin(16))
    buzzer.duty_u16(32767)
    buzzer.freq(659)  #ミ
    time.sleep(0.5)
    buzzer.freq(523)  #ド
    time.sleep(0.8)
    buzzer.duty_u16(0)
    buzzer.deinit()

print('Waiting for CALL...')

#メインループ
while True:
    cl, addr = s.accept()  #接続を受け入れ
    print('Connected from', addr)

    data = cl.recv(1024)  #データを受信
    print('Received:', data)
    
    #CALLが来たら音を鳴らす
    if data == b'CALL':
        pinpon()

    cl.close()

このプログラムをmain.pyとして保存します。保存するときに

# Wi-Fi接続
ssid = 'あなたのSSID'
password = 'あなたのパスワード'

この部分を家のルーターのSSIDとパスワードに変更しておきます。Pico Wは2.4Ghzのみの対応なので注意が必要です。

また、

sta_if.ifconfig(('192.168.XX.XX', '255.255.255.0', '192.168.XX.XX', '8.8.8.8'))  #この行でIPを固定

この行には、ルーターのIPアドレスとPicoのアドレスを設定しておきましょう。

1つ目の192.168.XX.XXの部分には、Pico Wで使用するIPアドレスを入力します。
IPアドレスの決め方は「[WiFiルーター名] IPアドレス 手動設定」などで検索するとヒットします。

2つ目には、Wi-FiルーターのIPアドレスを入力します。基本的にルーターの設定をするときにアクセスするアドレスを入力すればOKです。

下の表は、有名なメーカーのルーターIPアドレスをまとめた表です。

メーカー初期設定IPアドレス例
BUFFALO192.168.11.1
NEC(Aterm)192.168.0.1 / 192.168.10.1
TP-Link192.168.0.1 / 192.168.1.1
エレコム192.168.2.1

次は送信側です。

import network, socket
from machine import Pin
import time

sw = Pin(16, Pin.IN, Pin.PULL_UP)

# Wi-Fi接続
ssid = 'あなたのSSID'
password = 'あなたのパスワード'

sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, password)

while not sta_if.isconnected():
    time.sleep(0.1)

# 音を鳴らすPicoのIPアドレス
target_ip = '192.168.XX.XX'
target_port = 8888

while True:
    #ボタンが押された時にデータ送信
    if sw.value() == 0:
        s = socket.socket()
        s.connect((target_ip, target_port))  #受信側に接続
        s.send(b'CALL')  #データを送信
        s.close()
        print('Called!')
        while sw.value() == 0:
            time.sleep(0.01)
            
    time.sleep(0.01)

こちらも同様に

#Wi-Fi接続
ssid = 'あなたのSSID'
password = 'あなたのパスワード'

この部分を設定して、

# 音を鳴らすPicoのIPアドレス
target_ip = '192.168.XX.XX'
target_port = 8888

こちらのIPアドレスを先程設定Pico WのIPアドレスに変更しておきます。

これをmain.pyとして書き込めば、プログラムは完了です。


動かしてみる

動かしてみるとこんな感じです。Wi-Fiルーターの電波が届く範囲ならどこでも使えるので、
「1階から2階にいる人を呼ぶ」といったこともできます。

yossy

接続確認やエラーの処理を加えると、IoT家電として実用できるレベルになりますね。


応用アイデア

  • スマートフォンに通知を表示:メールやAPIを活用
  • 人が来たら自動で送信:スイッチを人感センサーに
  • 送受信両方対応:スレッドで並列処理

シンプルな構成なので、色々カスタマイズしやすいです。

まとめ

今回は、Raspberry Pi Pico Wを使った呼び鈴の作り方を解説しました。STAモードの使い方やTCPの基本について学べたと思います。

このプロジェクトをベースに、オリジナルの呼び鈴やIoT家電を作ってみてください。

yossy

作ったらXで教えて下さい!

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次