マイコンでIoTを始めるとき、最初の壁になるのが「無線でネットにつなぐ」ことです。2024年11月に登場したRaspberry Pi Pico 2 Wは、高性能なRP2350マイコンにInfineon製CYW43439無線モジュール(2.4GHz 802.11n Wi-Fi+Bluetooth 5.2)を載せ、わずか7ドルでWi-Fi対応のマイコン開発を可能にしたボードです。この記事では、Pico 2 W を使ってWi-Fiに接続し、ブラウザから操作できるWebサーバーを立て、MQTTでクラウドへデータを送るところまでを、MicroPythonの実際のコードとともに公式ドキュメントの一次情報に基づいて解説します。無印のPico 2との違いや、技適・アンテナといった実運用の注意点も最後にまとめます。
Raspberry Pi Pico 2 W とは:無印Pico 2との違い
Pico 2 W は、2024年8月に発売されたRaspberry Pi Pico 2(RP2350)に無線機能を追加したワイヤレス版です。頭脳となるRP2350は、Arm Cortex-M33 と RISC-V(Hazard3)のデュアルコアをどちらも2基ずつ搭載し、ソフトウェアで切り替えて使えるユニークな構成です。最大150MHz動作、浮動小数点演算(FPU)対応、Arm TrustZone によるセキュリティ機能を備えます。ここに Wi-Fi/Bluetooth が加わったのが Pico 2 W です。
主なスペックを公式発表からまとめます。
- マイコン:RP2350(Cortex-M33×2/Hazard3 RISC-V×2、最大150MHz)
- メモリ:オンチップSRAM 520KB/オンボードFlash 4MB
- 無線:Infineon CYW43439(2.4GHz 802.11n Wi-Fi、Bluetooth 5.2)
- アンテナ:Abracon(旧ProAnt)ライセンスのオンボードアンテナ
- フォーム:ブレッドボード対応のPico形状、micro-USB端子、価格7ドル
無印Pico 2との違いは「無線の有無」だけで、GPIOの本数やPIO(プログラマブルI/O)などマイコン部分は共通です。そのため、まず基礎を固めたい人はPico 2 の入門記事から、ネット接続まで一気に進めたい人は本記事から始めると良いでしょう。標準でWi-Fi/Bluetoothを内蔵する点はESP32と似ていますが、Picoは公式のMicroPython・C SDKのサポートと日本語作例の多さ、PIOによる柔軟なI/Oが強みです。
用意するもの
最小構成なら、Pico 2 W本体とmicro-USBケーブル(データ通信対応のもの)だけで始められます。オンボードのLEDを使えば配線なしでWebサーバーの動作確認までできます。センサーを足してクラウドへ送るなら、ブレッドボード・ジャンパーワイヤと、I2C接続の温湿度センサー(BME280やSHT31など)を用意すると発展させやすいです。ピンヘッダ未実装のモデルを買った場合ははんだ付けが必要になります。下の「この記事で使う機材」も参考にしてください。
開発環境:MicroPythonの書き込みとThonny
本記事はMicroPythonで進めます。手順は次のとおりです。
- micropython.org または Raspberry Pi公式から、Pico 2 W 用のファームウェア(.uf2)をダウンロードする。ボード名を必ず「Pico 2 W」で選ぶこと(無印Pico 2用は無線が動きません)。
- 本体のBOOTSELボタンを押しながらPCにUSB接続すると、USBストレージ(RPI-RP2)として認識される。
- ダウンロードした.uf2ファイルをそのドライブにドラッグ&ドロップすると自動で再起動し、書き込み完了。
- PC側にThonny(無償のPython IDE)を入れ、右下のインタプリタで「MicroPython (Raspberry Pi Pico)」を選ぶ。
Thonnyのシェルに print('hello') と打って応答が返れば準備完了です。
Wi-Fiに接続する(network.WLAN)
MicroPythonでは network モジュールでWi-Fiを扱います。ステーションモード(STA)で家庭のルーターに接続する基本形が次のコードです。wlan.status() が 3(network.STAT_GOT_IP)になればIP取得まで成功しています。
import network, time
SSID = "あなたのSSID"
PASSWORD = "あなたのパスワード"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
# 最大10秒待つ
timeout = 10
while timeout > 0 and wlan.status() != 3:
print("接続中...")
time.sleep(1)
timeout -= 1
if wlan.status() == 3:
print("接続成功:", wlan.ifconfig()) # (IP, サブネット, GW, DNS)
else:
print("接続失敗 status =", wlan.status())
CYW43439は2.4GHz帯のみ対応なので、ルーター側で5GHz専用のSSIDを指定すると接続できません。2.4GHzのSSIDを使ってください。取得したIPアドレスは、このあとのWebサーバーへブラウザからアクセスするときに使います。
ブラウザから操作するWebサーバーを立てる
Pico 2 W自身を小さなWebサーバーにして、同じLAN内のスマホやPCのブラウザからオンボードLEDを操作してみます。Pico W系ではオンボードLEDが無線チップ側に接続されているため、GPIO番号ではなく machine.Pin("LED") で扱う点に注意します。
import network, socket, machine, time
led = machine.Pin("LED", machine.Pin.OUT) # Pico W系はGPIO番号でなく"LED"
# (上のWi-Fi接続コードで wlan が接続済みとする)
addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
print("サーバー起動:", wlan.ifconfig()[0])
while True:
cl, remote = s.accept()
req = str(cl.recv(1024))
if "/on" in req:
led.value(1)
elif "/off" in req:
led.value(0)
html = """<html><body style='font-family:sans-serif;text-align:center'>
<h1>Pico 2 W コントロール</h1>
<p><a href='/on'>LED ON</a> | <a href='/off'>LED OFF</a></p>
</body></html>"""
cl.send("HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n")
cl.send(html)
cl.close()
実行後、シェルに表示されたIPアドレス(例:192.168.1.50)に同じLANのブラウザからアクセスすると、「LED ON/OFF」のリンクが表示され、クリックで基板上のLEDが点灯・消灯します。GPIOにリレーやモーターをつなげば、そのまま宅内IoTのスイッチに発展できます。
MQTTでクラウド/ブローカーへ送信する
IoTの定番プロトコルがMQTTです。センサー値を軽量メッセージとしてブローカーへ「publish」し、別の端末やクラウドが「subscribe」して受け取ります。MicroPythonでは umqtt.simple ライブラリを使います。標準に含まれない場合は、Wi-Fi接続後に mip でインストールできます。
import mip
mip.install("umqtt.simple") # 初回のみ(Wi-Fi接続後に実行)
ここでは配線なしで試せるよう、RP2350内蔵の温度センサー(ADCチャンネル4)の値を、公開テスト用ブローカー test.mosquitto.org へ10秒ごとに送ります。内蔵センサーはチップ温度の目安で、換算式は公式データシートの近似式に基づきます。
from umqtt.simple import MQTTClient
import machine, time, ubinascii
CLIENT_ID = ubinascii.hexlify(machine.unique_id())
BROKER = "test.mosquitto.org"
TOPIC = b"engineergo/pico2w/temp"
sensor = machine.ADC(4) # 内蔵温度センサー
CONV = 3.3 / 65535
def read_temp():
v = sensor.read_u16() * CONV
return 27 - (v - 0.706) / 0.001721 # データシートの近似式
client = MQTTClient(CLIENT_ID, BROKER, port=1883, keepalive=60)
client.connect()
print("MQTT接続:", BROKER)
while True:
t = read_temp()
client.publish(TOPIC, "{:.1f}".format(t))
print("送信:", "{:.1f}".format(t), "C")
time.sleep(10)
PCやスマホのMQTTクライアント(例:MQTT Explorer)で同じブローカーの engineergo/pico2w/temp をsubscribeすれば、送られてきた温度がリアルタイムに見えます。ここを AWS IoT Core や各種クラウドのMQTTエンドポイントに置き換えれば、そのままクラウド連携になります。実際のセンサーで画面表示まで作りたい場合は、M5StackでIoTセンサーダッシュボードを作る記事や、ESP32でWi-Fi温湿度モニターを作る記事も参考になります。
Bluetooth(BLE)も使える
Pico 2 W の CYW43439 は Bluetooth 5.2 にも対応し、MicroPythonでは aioble(bluetoothの高水準ラッパー)を使ってBLEペリフェラルやセントラルを実装できます。スマホアプリからのBLE通知、ビーコン、近距離のセンサー連携などに向きます。Wi-Fiが届かない場所や消費電力を抑えたい用途ではBLEが選択肢になります。エッジでAI推論まで踏み込みたい場合は、エッジAI・TinyMLの解説記事で全体像をつかんでおくと設計しやすくなります。
実運用の注意:技適・アンテナ・消費電力
日本国内で無線機能を使うには技適(技術基準適合証明)が必要です。国内の正規流通品には技適マークが付いているので、無線を使う前提なら技適対応品を選んでください。アンテナはオンボード実装のため、金属ケースに入れると電波が弱くなります。無線利用時は基板のアンテナ部分を金属で覆わないレイアウトにします。また常時通信は消費電力が増えるため、電池駆動では送信間隔を空ける、machine.lightsleep() を併用するなどの省電力設計が有効です。
よくある質問
Raspberry Pi Pico 2 W と無印Pico 2の違いは何ですか?
マイコン(RP2350)やGPIOは共通で、違いは無線の有無です。Pico 2 W はInfineon CYW43439による2.4GHz Wi-Fi(802.11n)とBluetooth 5.2を搭載します。ネット接続を伴うIoT用途ではPico 2 Wを選びます。
MicroPythonとC/C++のどちらで始めるべきですか?
学習や試作ならMicroPythonが手軽で、本記事のWi-Fi・Webサーバー・MQTTもすぐ動かせます。高速化や省メモリ、細かな制御が必要な量産段階ではC/C++ SDKが適します。まずMicroPythonで動かし、必要に応じてCへ移すのが現実的です。
Pico 2 W は5GHzのWi-Fiに接続できますか?
できません。搭載するCYW43439は2.4GHz帯(802.11n)専用です。ルーター側で2.4GHzのSSIDを指定して接続してください。5GHz専用SSIDでは接続に失敗します。
🛠️ この記事で使う機材(Amazonで探す)
※型番・在庫は変動します。無線を使う場合は技適マーク付きの正規流通品を選んでください。Amazonアソシエイトの広告を含みます。
📚 Raspberry Pi・IoTをさらに深く学ぶ書籍
書名・出版社・発行年は国立国会図書館サーチで確認しています
※価格・在庫は変動します。リンク先で最新情報をご確認ください。Amazonアソシエイト・楽天アフィリエイトの広告を含みます。
※本記事にはアフィリエイト広告(PR)を含みます。掲載時点の情報に基づいており、価格・在庫・仕様は変わる場合があります。無線機能の利用は電波法に従い、技適マーク付きの機器をご使用ください。




