Raspberry Pi Picoで無線LAN(1)
2022.5.26:ソースコードを修正(例外処理をの範囲を狭めました)
はじめに
Raspberry Pi Pico × MicroPython の組み合わせで「ESP-WROOM-02」を動かします。そのものズバリのサンプルが無いか、非常に少ないみたいなので、とりあえず動いた配線やソースコードを上げておきます。
(今後進展があったら追記があると思います)
このページでは「ESP-WROOM-02」と「Raspberry Pi Pico」を通信させて、ESP-WROOM-02のバージョン情報を取得するとこまで載せておこうと思います。”とりあえず動作させる”という感じなので、PCにつないだ状態で動かします。
正直なところ、シンプルに行くならESP-WROOM-02若しくは、ESP32を直接使えばいいだけの話ですが、「システム ALL Python」という影の目標があるので、そういうことからラズパイPicoを使うというだけです。
把握しておくべきポイント
右も左も分からない人が押さえるべきポイントは以下の通り。
「Raspberry Pi Pico」と「ESP-WROOM-02」間はUART通信(シリアル通信)でやり取りをする
「ESP-WROOM-02」は「ATコマンド」というコマンドで制御する
「Raspberry Pi Pico」の3.3Vから電源をとると、電流不足で動作が不安定なことがあるらしい。3.3vレギュレータで5vから取ってくるなどの対策が必要
UARTとATコマンドは、雰囲気感じる程度に予習しておいた方がいいかもしれません。
使ったもの
主要なものだけ。
SWITCHSCIENCE
ESP-WROOM-02ピッチ変換済みモジュール《シンプル版》
配線に関しては、”Arduinoで使ってみた”的なサイトなどで探せば、割とあると思いますし、秋月電子のDIP化キットとかでも、載ってるモノは一緒なので、大して変わりないと思います。
この”シンプル版”に関しては、販売サイトにATコマンドを利用するための接続方法が載ってるので楽ちんです。
3.3vレギュレータ
正式には「HiLetgo 10個セット AMS1117-3.3 DC-DC ステップダウン パワーモジュール AMS1117-3.3V 降圧型モジュール LDO 800MA」
ESP-WROOM-02モジュールは意外と電気食うようで、ラズパイPicoの3.3vから直に電源取ると動かない、と書かれておられる方いたので、高くないし取り合えず導入。ラズパイPicoの5vから3.3vをとってみました。
類似の中華製モジュールはいくつもあるので適当に。私は、同メーカーのLCD買って普通に使えたのでメーカーそろえてみました。
配線・コードサンプル

写真なんか載せてますが、ESP-WROOM-02の接続に関しては、SWITCHSCIENCEの販売サイト掲載の配線ガイドそのままです。ただ、電源については、レギュレータを入れて5vから3.3vに落として使ってるだけです。
(追記)
実は秋月電子でT型のヤツも持ってたりするので試しに配線してみました。

3V3→3.3vへ
EN→10kΩ経由で3.3v
IO15→GND
IO0→10kΩ経由で3.3v
GND→GND
ーーーー
RST→10kΩ経由で3.3v
TXD→ラズパイのRX
RXD→ラズパイのTX
まあ、スイッチサイエンスのページに載ってたまんまですが。
import machine, utime
u = machine.UART(1, 115200, tx=machine.Pin(4), rx=machine.Pin(5))
print("UART START")
u.write('AT+GMR\r\n') #ATコマンドの後には、「\r\n」(改行コード)を入れる
utime.sleep(3) #無いとエラー 1secでもいいので入れる
print(u.any()) #ESP-WROOM-02からのバイト数
res = u.read() #読み取り
print(res) #生データ
try:
print(res.decode('utf-8')) #デコード
except:
print("except err!")
UARTの通信に関しては、取り上げてるサイトがいくつもありましたので、ベースはそれを参考にさせてもらいました。
なお、ボーレートは115200です。
一番はまったところは、ATコマンドの後には改行コード「\r\n」が必要
この点は、あんまり触れてるサイトがなかったような気がします。
(開発環境はWindowsなので、Linuxとかだと変わるかもしれませんが…)
ひとまずATコマンドを投げてバージョンの取得までできるようになりました。今回はここまで。