電子工作をはじめて一週間経過したかしてないか位の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とそれぞれクロスにつなぐだけで通信が可能です。
用意するモノ
- ブレッドボード二つ (ファーム焼くやつと、実際に動かすやつ)
- Wi-Fiモジュール ESP-WROOM-02 DIP化キット
- カーボン抵抗 (炭素皮膜抵抗) 1/4W 10kΩ (100本入)
- 低損失三端子レギュレーター 3.3V 500mA TA48M033F(S Q) x2
- タクトスイッチ 100個セット (実際に使うのは1個だが、どうせ色々使い勝手いいんだからまとめて買っておきましょう)
- ジャンパワイヤ
- 好きな RaspberryPi
- 動作検証用のLEDとそれに必要な抵抗
ひとまずこんなところでしょうか。秋月なのは単に好みです。というか、秋月の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チカしておくといいでしょう。
まとめ
- 一家に一台転がってるラズパイを有効活用しましょう
- ファーム焼く用のブレッドボードと、実際に動かすブレッドボードは分けましょう
- 間違ってたら突っ込みお願いします!
- 回路図楽に書くツール教えてください
それではごきげんよう。