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を使うというだけです。

把握しておくべきポイント

右も左も分からない人が押さえるべきポイントは以下の通り。

  1. 「Raspberry Pi Pico」と「ESP-WROOM-02」間はUART通信(シリアル通信)でやり取りをする

  2. 「ESP-WROOM-02」は「ATコマンド」というコマンドで制御する

  3. 「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コマンドを投げてバージョンの取得までできるようになりました。今回はここまで。

参考

この記事が気に入ったらサポートをしてみませんか?