WiFiのモジュール ESP8266-01と、Arduino Pro Mini 3.3V, 8MHzを接続して、ネットワーク経由で色々な遊びを始めてみることにしました。
目次
【ESP8266-01モジュール】 (参考にさせて頂いたページ)
ESP8266モジュールの中では最も小さくて端子数の少ないESP-01タイプで実験をしてみます。モジュール仕様はこのページを参考にしました。 これによると、なかなか強力なスペックです。
- このモジュール単体でホストコントローラーとして動作可能
- 2本のGPIOピンを直接センサー等に接続することも可能
- I/Oは 3.6V耐圧なので、5V回路とは直接接続不可能。
- 電源電圧は 3.3V
- 初期ボーレートは 115200 baudに設定されている
- TCP/IPプロトコル・スタックを内蔵
- 802.11b/g/n対応
- 通常動作時の消費電流は 70mA程度
- ピーク時の消費電流は 300mA程度
- パワーダウン時の消費電流は、 10uA以下
- 802.11b時のRF出力は +19.5dBm
- WPA, WPA2対応
このモジュールに搭載されているICは、ESP8266EX(WiFiコントローラー)と、Berg MicroのSerial EEPROM:25Q80ASSIG)の2つ。
このICがモジュールの肝となるデバイスですね。(仕様書はこちら)
このBerg MicroのICは型名から見ると、
- 3.0V Serial Flash with 4KB uniform-sector, dual and quad I/O
- 8Mbit (1024kx8)
という事がわかります。(メーカーは違いますが仕様書はこちら)。 このEEPROMに8266用のFirmwareが保存されているという事ですね。
ESP8266の消費電流がピークで 300mAも必要というなので、Arduino Pro Miniに搭載されている3.3V レギュレーター(Pro Miniの回路図上に最大150mAという記載があります) や、FTDIに搭載されているレギュレーターでは足りません。
まずは、実験なので手元にある、プロトボード用の電源モジュールを使って電源を供給することにします。
【まずは、シリアル通信の確認から】
まずは、Arduino Pro Miniは接続せず、FTDI (3.3V)を使って、ESP8266とのシリアル通信を確立させ、ATコマンドが動作するかどうかの確認からはじめます。本当は、RESETも、CH-PDも独立でPULL-UPしておく方が良いと思いますが、プロトボードの接続を楽にするために、サボりました。
ESP-01のモジュールのGPIOピン二本の設定を変えることにより、通常ブートモード(内部のEEPROMからの起動)と、EEPROMへの書き込みモードの切り替えができます。まずは、普通に立ち上げる確認なので、GPIO-0は、Hにしておきます。(ネットの情報だと、GPIO-2はオープンのままにしてある例もありますが、とりあえず、GPIO-0と直接繋いでおきます)
CH-PDのピンは、8266をパワーダウンモードに切り替えるための信号なので、通常動作モードのときには、Hにしておかないといけません。
RESETピンの扱いがちょっと自信ないです。ESP8266-01モジュールの回路図をネット上で探しましたが、現時点、それらしき物は見つかっておらず、この基板内で ESP8266デバイスのリセットピンが、どのように処理されているのか分からないためです。単純に端子に出てきているだけかもしれません。
【接続図】
FTDIとの接続は、シリアル通信の向きを間違えなければ大丈夫でしょう。もちろん、FTDIの電圧セレクターは、3.3Vにしておきます(間違えると ESP8266が死ぬのでは・・と思われます・・)
【TeraTermで接続】
まずは、定番のターミナルソフト、TeraTermで接続してみます。TeraTermを起動し、以下の設定をします。
- FTDIの接続されているUSBに割り当てられたシリアルポート番号を指定
- 115200baud, 8bit, non-parity, 1-stop bit, flow制御=none
- 送信の改行コードは”CR+LF”
- 文字コードは UTF-8 (不要かも)
電源アダプターからの電源を供給し、USBも接続してみると、文字化けした画面の後に、”Ready”という表示が出るときがあったり、こんな画面が出て止まってしまう時があったり・・・(追記:後で調べてみたら、この表示は 76.8kbpsで出力されているものらしい・・・でも何故、表示されるんだろう・・?)
やっぱり、ESP8266へのリセットが正しくかかっていないと思われ、とりあえず強制的に、ESP8266モジュールのRESETピンをGNDに落として見ると、ぐちゃぐちゃに文字化けした表示の後に、必ず、”Ready”が表示されるようになりました。
ここで、”AT”と叩いてみると、めでたしめでたし、”OK”表示が出ました。
試しに、GPIO-2の接続を外してオープンにしても、同様に動作したので、当面GPIO-2はオープンのままにしておくことにします。
それにしても、なぜ、リセット後の文字が激しく化けるのか?スッキリしなかったので、色々試してみましたが、全然だめ。ネットで色々探してみたら、「リセット後の通信は76.8kbpsで行われる」という記述がありました。手元に76.8kbpsのターミナルソフトが無いので、事実かどうか調べることは出来ませんが、まぁ、readyの所からは、115200baudで正常に通信できるので、今の時点ではこれでOKとしておきます。(なぜ76.8kbpsになっているのか、理由は全く分かりません)
【ArduinoのIDEからシリアルモニタで接続】
やはり、リセット直後の文字化けは起こりますが、CR/LFにした上で、”AT” + Enterを送信すれば、ちゃんと下記のように “OK”が返ってきました。めでたしめでたし。
とりあえず、これで、ESP8266-01とのシリアル通信が出来ることは確認できました。
試しに、ATコマンドを幾つか確認し、我が家のWIFIアクセスポイントにも接続してみましたが、問題なく一発で接続されました。このATコマンドの詳細は次回に・・・。