初心者向けESP-WROOM-02解説その1: ラズパイを母艦にする

More than 3 years have passed since last update.

電子工作をはじめて一週間経過したかしてないか位のerukitiです。ごきげんよう。そんな電子工作ビギナーですが、ラズパイを母艦にしてESP-WROOM-02を使うのはそれなりに簡単でした。今回はそんな知見を雑多にまとめていこうと思いますが、今回はラズパイを母艦にする方法です。

間違ったこと書いてる可能性高いかもしれないので、是非ハードウェア上級者の人は突っ込みを入れて頂けると助かります!


まずはESP-WROOM-02とはなんぞや

Arduinoのスケッチをある程度互換で動かす事ができる、WiFi搭載マイコンです (補足: AtmelAVR互換かと思ってたけど、そうじゃないようでした!)。500円〜1000円程度で入手できてWifi通信が可能で単体動作可能なマイコンです。すごくないですか?流行ってるのも理解できるというものです。


ESP-WROOM-02開発でRaspberry Pi を母艦にする

世の中ではESP-WROOM-02をUSB-serial変換器でPCにつなぐ系の記事ばかりですが、実はラズパイを母艦にすることも十分に可能です。電源も供給できますし、シリアルをクロス接続するだけで通信もできます。いちいちUSB-serial変換器を買う必要はありません。


電源をどうつなぐか

ラズパイのGPIOのピン番号1番は3.3Vが出ています。そのままESP-WROOM-02につなげば動きます。が、一つ問題があって、3.3Vは、最大で50mAしか出せません。2番ピンの5Vにはそのような制限はないようです。なので、三端子レギュレータで5Vから作成してしまいましょう。


シリアル(RXD, TXD)をクロスにつなぐ

ラズパイのピン番号8番がTXDでピン番号10番がRXDです。これらをESP-WROOM-02のTXD, RXDとそれぞれクロスにつなぐだけで通信が可能です。


用意するモノ

ひとまずこんなところでしょうか。秋月なのは単に好みです。というか、秋月のESP-WROOM-02 DIP化キットが一番使いやすそうな気がしています。ただ、秋月バージョンはモード切替をする時に自前でタクトスイッチを使う必要があります。結構操作が面倒です。なので、ファーム焼くモードと、普通に立ち上げるモードを別々に作ってしまおうということです。なのでブレッドボードを二つ用意しましょう。

むしろ、ブレッドボードは小さいサイズ、普通サイズ、大きいサイズをいくつかそろえておくといいと思います。カジュアルに買いましょう。


組み立て方 (焼く方)

回路図の書き方よくわからないので表形式で書いてみます。

ESP-WROOM-02
接続先

3V3
三端子レギュレータの3.3V

EN
10kΩ抵抗を挟んで、三端子レギュレータの3.3V

IO15
10kΩ抵抗を挟んで、GND (RaspberryPiの6番ピン)

IO02
10kΩ抵抗を挟んで、三端子レギュレータの3.3V

IO0
10kΩ抵抗を挟んで、GND (Raspberry Piの6番ピン)

GND
GND (Raspberry Piの6番ピン)

RST
10kΩ抵抗を挟んで、三端子レギュレータの3.3V

TXD
RXD (Raspberry Piの10番ピン)

RXD
TXD (Raspberru Piの8番ピン)

三端子レギュレータ
接続先


5V (Raspberry Piの2番ピン)


積層セラミックコンデンサを挟んでで真ん中

真ん中
GND (Raspberry Piの6番ピン)


3.3V (ESP-WROOM-02の3.3Vに供給)


電解コンデンサを挟んで真ん中 (極性に注意)

うーん、これでわかる気がしません。誰かいい感じに回路図をPlantUMLみたいに書けるツール教えてください。

ESP-WROOM-02の接続方法は、ESP8266 - ESP-WROOM-02 の Arduino 環境で I2C 制御 - Qiita を参考にしました。この図のうちESP-WROOM-02だけ利用した上で、タクトスイッチを両方省略しています。

ブレッドボードに乗せた写真

ミニサイズのブレッドボードを使っています。


組み立て方 (動かす方)

三端子レギュレータは同じです。

ESP-WROOM-02
接続先

3V3
三端子レギュレータの3.3V

EN
10kΩ抵抗を挟んで、三端子レギュレータの3.3V

IO15
10kΩ抵抗を挟んで、GND (RaspberryPiの6番ピン)

IO02
10kΩ抵抗を挟んで、三端子レギュレータの3.3V

IO0
10kΩ抵抗を挟んで、GND (Raspberry Piの6番ピン)

GND
GND (Raspberry Piの6番ピン)

RST
10kΩ抵抗を挟んで、三端子レギュレータの3.3V

RST
タクトスイッチを挟んでGND (Raspberry Piの6番ピン)

IO13
動作検証用のLED

動作検証用のLEDは、仕様に合わせて抵抗を決める必要があります。たとえば、3mm 緑色LED EBG3402S (20個入)ならば、(3.3 - 2.1) / 0.02 = 60 ですが、それに近い カーボン抵抗 (炭素皮膜抵抗) 1/4W 75Ω (100本入り) を買っておけばいいような気がします。僕もあまりよくわかっていません。きっと詳しい方のコメントが入ると思います。

あとタクトスイッチはタクトスイッチでRaspberryPiをシャットダウンさせてみた【Python】【supervisor】: Raspberry Piでやってみたを参考につなぎましょう。失敗するとリセットが入りっぱなしになります。

ブレッドボードに乗せた写真


焼き方 (CUIで焼く)

ESP8266 を CUI で開発する - Qiitaを参考に PlatformIOを使って焼いてしまいましょう (僕はIDEが大嫌いなのです)。

まずラズパイにどうにかしてPythonとcurlが動くようにしましょう。補足: Raspbian (Jessie現在) ならデフォルトでPythonとcurlは入っているのですが、python-devが追加で必要になります。

$ sudo apt-get -y install python-dev

$ sudo python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"
$ exec bash -l

pip 経由でインストールする方法が色々なサイトに書かれてますが、何故かちょっと古いバージョンが入ってしまってラズパイ&ESP-WROOM-02だとエラーが出たりするので、この方法で最新のを入れましょう。

シリアル(/dev/ttyAMA0)を自由に使えるようにする必要があります。備忘録 Raspberry PiでUART、シリアル通信なんかを参考にしてセットアップしてください。

また、シリアルにアクセスする権限が無いとファームウェアを転送できません。/dev/ttyAMA0 のグループである dialout をユーザーに追加しておいてください。

後はスケッチを用意して焼き込みます。

$ mkdir test

$ cd test
$ yes y|platformio init -b esp12e
$ cat > src/test.ino
// src/test.ino

#define LED_PIN 13

void setup() {
pinMode(LED_PIN, OUTPUT);
}

void loop() {
digitalWrite(LED_PIN, HIGH);
delay(1000);
digitalWrite(LED_PIN, LOW);
delay(1000);
}
$ platformio run
$ platformio run -t upload --upload-port /dev/ttyAMA0


おまけの知見 (ラズパイでGPIO)

ラズパイでGPIOを制御するのにライブラリは必要ありません。シェル上からデバイスファイルを叩くだけでも十分可能です。How to use GPIOs on raspberry pi (Simple I/O, PWM and UART) - Semillero: Advanced Digital Technologies - UPB Bucaramanga, Colombia を参考にしてみてください。

試しにLチカしておくといいでしょう。


まとめ


  • 一家に一台転がってるラズパイを有効活用しましょう

  • ファーム焼く用のブレッドボードと、実際に動かすブレッドボードは分けましょう

  • 間違ってたら突っ込みお願いします!

  • 回路図楽に書くツール教えてください

それではごきげんよう。