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

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


TCPとは?
TCPとは、ネットワークで信頼性を高くしてデータを送受信するプロトコル(ルール)です。データが正しく送信されたかを確認して、もし正しく送信できなかった場合には、そのデータを再送します。
データの確認をするので信頼性は高いですが、転送速度は遅くなってしまいます。そのため正しくデータが送られてほしいWEBページやメール、ファイルを転送するなどの通信をするときに利用されます。
具体的な送信手順を電話にたとえてみましょう。
ステップ | 電話の例 | TCPの処理 |
---|---|---|
1 | 受話器を取り「もしもし?」 | socket() → connect() (クライアントが呼びかけ) |
2 | 相手が「はい、私です」 | サーバー側の accept() で接続を受け入れ |
3 | 会話(データのやり取り) | send() で送信 → 相手の recv() で受信 |
4 | 「それでは失礼します」 | close() でソケットを閉じて通信終了 |
このようになっています。



電話で例えると身近でわかりやすいですね!
家庭内で使える「呼び鈴」を作ろう!
ここからは、実際に呼び鈴を作って、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アドレス例 |
---|---|
BUFFALO | 192.168.11.1 |
NEC(Aterm) | 192.168.0.1 / 192.168.10.1 |
TP-Link | 192.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階にいる人を呼ぶ」といったこともできます。



接続確認やエラーの処理を加えると、IoT家電として実用できるレベルになりますね。
応用アイデア
- スマートフォンに通知を表示:メールやAPIを活用
- 人が来たら自動で送信:スイッチを人感センサーに
- 送受信両方対応:スレッドで並列処理
シンプルな構成なので、色々カスタマイズしやすいです。
まとめ
今回は、Raspberry Pi Pico Wを使った呼び鈴の作り方を解説しました。STAモードの使い方やTCPの基本について学べたと思います。
このプロジェクトをベースに、オリジナルの呼び鈴やIoT家電を作ってみてください。



作ったらXで教えて下さい!
コメント