初心者でも電子工作を簡単に始められるマイコンボードArduinoですが、ある程度センサーやアクチュエーターが触れるようになってくると、インターネットに繋いで外出先からコントロールしたいと考える方も多いでしょう。
以前の解説記事「JavaScriptでArduinoをコントロール」ではパソコンとArduinoをUSBで接続してインターネットに接続していましたが、有線接続だったため設置できる場所が限られてしまう制限がありました。本記事では2015年に発売された数百円で購入できる爆安のWi-FiモジュールESP-WROOM-02を使って、お手頃にArduinoを無線化する方法を紹介します。
スマートフォンからLチカしよう
まずは次の動画をご覧ください。インターネットからArduinoに設置したLEDを光らすオリジナルのデモです。Wi-Fiモジュールを使って開発しました。
本記事を試していただくと上の動画のようにスマートフォン(ウェブブラウザ)からインターネット経由でArduinoに接続し、LEDをコントロールできるようになります。Arduinoを触ったことのある初心者の方でも、回路を組むことから各プログラミングと約1時間で試せる内容となっていますので、ぜひお試しください!
Wi-Fiモジュール界に現れた黒船「ESP-WROOM-02」
ESP-WROOM-02はEspressif Systems社の開発したWi-Fiモジュールです。従来はESP8266というモジュールが国外で販売されてましたが、技適が未取得だったため電波法によって日本国内で使用できませんでした。その後、技適を取得したことによって、スイッチサイエンスでも2015年7月6日からESP-WROOM-02という製品名で販売が開始されました。電子工作界で今話題のモジュールの1つです。
人気の理由は「ダントツの安さ!」
ESP-WROOM-02が話題になっている理由は数百円で購入できるという価格です。Arduinoで無線LANを利用する方法は3種類ありますが、ESP-WROOM-02を利用する構成がもっともコストを抑えられます。「ArduinoとWi-Fiモジュールの一体型」と比べて、半額以下の4,104円と驚きの価格です。
構成 | パーツ | 価格(税込) | 合計(税込) |
---|---|---|---|
ArduinoとWi-Fiモジュールの一体型 | Arduino YÚN | 9,990円 | 9,990円 |
ArduinoとWi-Fiシールド | Arduino Uno R3 | 3,240円 | 8,432円 |
CC3000 WiFi シールド | 5,192円 | ||
ArduinoとESP-WROOM-02 | Arduino Uno R3 | 3,240円 | 4,104円 |
ESP-WROOM-02 | 864円 |
インターネット経由でLチカさせる仕組みを解説
ここからはESP-WROOM-02を用いた電子工作を解説します。次の構成でIoTな電子工作を目指しましょう。
スマートフォンのウェブブラウザでボタンをON/OFFすると、サーバーに設置されているPHPへ値を渡します。Arduinoからは定期的にPHPを監視し、接続されているLEDをチカチカと点滅させます。
回路を組もう
電子工作でよく用いるブレッドボードやジャンパー線はすでに手元にあることを前提に、下記のパーツで回路を組みます。ESP-WROOM-02はブレッドボードで扱いやすいように変換されたものを使用します。
※ESP-WROOM-02が正常に起動しない場合は、Arduino UNO R3のリセットボタンを押しながらESP-WROOM-02の電源をリセット(5V、GND線を抜き差し)すると解消されることがあります。
ArduinoとESP-WROOM-02でWi-Fi接続する回路
- Arduino Uno R3
- ESP-WROOM-02ピッチ変換済みモジュール
- 8ビット双方向ロジックレベル変換モジュール
- 低損失三端子レギュレーター 3.3V500mA
- 超小型スイッチングACアダプター12V1A 100V~240V
- コンデンサー 0.1μF
- 抵抗 10kΩ
Arduino Uno R3
ESP-WROOM-02ピッチ変換済みモジュール
8ビット双方向ロジックレベル変換モジュール
低損失三端子レギュレーター 3.3V500mA
超小型スイッチングACアダプター12V1A 100V~240V
コンデンサー 0.1μF
抵抗 10kΩ
LEDを点灯させる回路
LED
抵抗 330Ω
ESP-WROOM-02の初期設定
ArduinoとESP-WROOM-02間の通信はシリアル通信で行います。ESP-WROOM-02の転送レートは工場出荷時に115200bps
で設定されているので、Arduinoに合わせて9600bps
に設定します。
1. 設定用のプログラムをArduinoに書き込む
Arduino IDEのメニューで[ファイル]→[スケッチの例]→[SoftwareSerial]→[SoftwareSerialExample]をクリックしSoftwareSerial用のサンプルスケッチを開き、次のようにコードを編集してArduinoへ書き込みます。
30行目
SoftwareSerial mySerial(12, 11); // RX, TX
34行目
Serial.begin(115200);
43行目
mySerial.begin(115200);
2. ATコマンドで通信速度を設定
Arduino IDEのメニューから[ツール]→[シリアルモニター]をクリックするとシリアルモニターウィンドウが開きます。右下の改行コードを「CRおよびLF」へ、転送レートを「112500」へ変更します。多少文字化けが起こりますが設定には問題ありません。ESP-WROOM-02との通信が成功すると「Hello World?」と表示されるので、上部のテキスト入力部分に「AT」と入力し[送信]ボタンをクリックします。
この「AT」はATコマンドと呼ばれるもので、ESP-WROOM-02の情報の取得や設定を行うことができます。ATコマンドについては記事「WiFiモジュール(ESP-WROOM-02) ATコマンド一覧 : e電子工房」にコマンドの一覧が有りますのでご覧ください。「OK」とESP-WROOM-02側から返答があれば下記のコマンドを入力し転送レートを9600bps
へ設定します。
AT+UART_DEF=9600,8,1,0,0
3. Arduino IDEにライブラリをインストール
ESP-WROOM-02用のライブラリ「ITEADLIB_Arduino_WeeESP8266」をダウンロードします。Arduino IDEのメニューから[スケッチ]→[Include Library]→[Add .ZIP Library]をクリックし、ダウンロードしたライブラリをインストールします。
4. ライブラリを編集
ライブラリの初期状態ではSoftwareSerialが無効になっているので、ライブラリを編集し有効にします。Documents/Arduino/libraries/ITEADLIB_Arduino_WeeESP8266-master/
フォルダー内にESP8266.h
ファイルがあるので、27行目のコメントアウトを外し下記のように変更します。
#define ESP8266_USE_SOFTWARE_SERIAL
スマートフォンからLチカさせるプログラム
GitHubにサンプルコードをアップロードしていますので、詳しい内容についてはソースコード内のコメントを参照ください。
html
フォルダー内にはサーバーへアップロードするファイルが格納されています。そのままサーバーへアップロードしていただいても動作します。「arduino」フォルダー内にはArduinoスケッチが格納されており、Wi-FiのSSIDやパスワード、サーバー情報などを適宜変更してArduinoへ書き込んでください。
ウェブブラウザのボタンをタップすることにより、ON/OFF情報がPHPへ送信されPHPと同階層のledLog.txt
に値が保持されます。その値をArduinoから一定間隔(サンプルでは200ミリ秒)ごとに取得し、ONならLEDを点灯させるという仕組みです。
ESP-WROOM-02のすごいところがもう1つ!
なんと、ESP-WROOM-02自体にArduino IDEでコンパイルしたプログラムを書き込むことでArduinoのように動作させることができるのです! Arduino UNO R3のようにUSBポートやACコネクタなどが付いていないため、1から回路を組む必要はありますがArduinoよりもコンパクトにできるので、ぜひお試しください。
最後に
ACアタプターのケーブルは、別途バッテリーを接続すると完全に持ち運べる状態にすることも可能です。LEDの代わりにGPSモジュールを接続すると、某スパイ映画のようななんちゃって発信機も作ることができます。ぜひご活用ください。