Arduinoで何かを作ろうとする時にデータをインターネットから取得したりだとか、またはインターネットに対して送信したりだとか、そういうことがしたくなる時がある。
こういった時に選択肢はいくつかある。
- Arduino用のWiFIシールドを用意する
- Arduino YUN等の、WiFI標準搭載のArduinoを使用する
- シリアル接続のWiFIモジュールを使用する。
1に関しては、下記のページにあるように純正品が存在するのだけれど、Amazonやスイッチサイエンスでも2016年6月10日現在は取り扱っていないようだし、少なくとも日本国内では入手困難にであるように思われます。
Arduion YUNは日本でも容易に入手可能ではあるものの1万円程度と、結構な値段がしてしまう。
そこで、有力な選択肢となるのが、ESP8266である。Amazonだと一個500円程度かな。
もし急がないようであれば、Aliexpressで送料込で1個2ドル弱からある。
http://www.aliexpress.com/wholesale?SearchText=ESP-01www.aliexpress.com
この値段でArduinoをWiFi対応に出来るのであるから、非常にコストパフォーマンスが高いと言えるのだが、実際に使えるようになるまで色々と詰まってしまったので、備忘録代わりにここに手順を書き残して置く。
1. ライブラリのダウンロードとインストールし、コードの修正
上記からArduinoからESP8266を使用するためのライブラリを取得し、ライブラリフォルダに展開する。
なお、注意点として、Arduino UNOの場合はソフトウェアシリアルを使用する事になるので、27行目にある下記の1行をアンコメントしておくこと。
#define ESP8266_USE_SOFTWARE_SERIAL
2. ESP8266を Arduinoに接続する(RX、TXをピン0、1に)
接続する必要があるのは合計5本。Arduino UNOは5V駆動、EPS8266は3.3V駆動なので、RX/TXに分圧抵抗等を入れている例もネットにはある。本当は入れたほうがいいのだけれど、私は入れていない。心配な方はどうぞ。
2. ESP8266のbaud rateを9600bpsに設定する
Arduinoにはシリアル端子が付いているのだけれど、この端子はデバッグ時に使用したいので無線モジュールとはソフトウェア的にシリアル通信をさせたい。しかしながら、ESP8266のデフォルトボーレートは115200bpsで、Arduino UNOのソフトウェアシリアルは115200bpsに対応出来ない。厳密には設定自体は出来るのだけれど、ビットエラーが多く使いものにならない。そこで、ボーレートを9600bpsまで落として使用する事にする。
Arduinoにからのスケッチをアップロードして、シリアルコンソールを出し、下記のコマンドを打てば良い。
AT+UART_DEF=9600,8,1,0,0
3. ArduinoとESP8266の接続を変更する
RX、TXをピン12、11などに接続を変更する。これはソフトウェアシリアルを使用するためであるけれど、特にどこのピンでも問題無いように思われる。
4. Arduinoでコードを書く
ほぼライブラリのexampleからのコピペなのだけれど、下記のようなコードを書く。SSIDとパスワードは環境に合わせて。
github.com
#include "ESP8266.h" #define SSID "XXXX" #define PASSWORD "XXXX" SoftwareSerial mySerial(12, 11); /* RX:D12, TX:D11 */ ESP8266 wifi(mySerial); void setup(void) { Serial.begin(9600); Serial.print("setup begin\r\n"); Serial.print("FW Version: "); Serial.println(wifi.getVersion().c_str()); if (wifi.setOprToStation()) { Serial.print("to station ok\r\n"); } else { Serial.print("to station err\r\n"); } if (wifi.joinAP(SSID, PASSWORD)) { Serial.print("Join AP success\r\n"); Serial.print("IP: "); Serial.println(wifi.getLocalIP().c_str()); } else { Serial.print("Join AP failure\r\n"); } Serial.print("setup end\r\n"); } void loop(void) { }
これでArduinoあらWiFIが使用出来るようになる。書いて見ると簡単なのだけれど、ボーレート設定の所に気が付かず、半日以上かかってしまった。どうやら以前出荷されたESP8266はデフォルトボーレートが9600bpsになっていたようで、繋げばすぐに使える状態だったようです。最近のもの、と言ってもいつごろからかはわからないのだけれど、デフォルトが115200bpsになっているようで、Arduino UNOからは使用しにくくなってしまったという事らしい。