※この記事は2015年11月30日に公開した記事を再編集し、2022年2月3日に再度公開しました。
目次
- 今回の電子工作レシピ
- Arduinoのバージョン確認
- ArduinoにESP-WROOM-02ボードを追加する
- ESP-WROOM-02にプログラムを書き込む
- ESP-WROOM-02でアナログ入力をするには
- analogWrite関数を試してみる
- まとめ
今回は、いよいよEXP-WROOM-02にArduinoプログラムを書き込んでArduinoとして使ってみたいと思います。今回からは前回紹介したESP-WROOM-02が手軽に試せるESP-WROOM-02開発ボードを使って取り組んでいきます。
今回の電子工作レシピ
時間目安:60分
必要なパーツ
Arduinoのバージョン確認
まずはじめに、ESP-WROOM-02をArduinoとして利用するためには、適切なバージョンのArduinoを利用しているかどうか確認します。現在Arduinoでは、arduino.ccおよびarduino.orgの2つのウェブサイトからそれぞれのバージョンのArduino IDEがリリースされています(詳細はスイッチサイエンスさんの記事「Arduinoの内部分裂について」がわかりやすく書かれています)。ESP-WROOM-02を利用するには、arduino.ccからリリースされているArduino IDEをインストールしてください。(記事執筆時2015年11月の最新バージョンは1.6.6)
ArduinoにESP-WROOM-02ボードを追加する
ESP-WROOM-02をArduinoとして利用するには、Arduinoの開発環境であるIDEにESP-WROOM-02のボードを追加する必要があります。下記の手順に沿ってESP-WROOM-02をArduinoに追加します。
1. Arduino IDEを起動する
2. 「ファイル」-「環境設定」を開く
3. 「環境設定」の中にあるAdditional Boards Manager URLs:に下記のURLを入力
入力するURL:http://arduino.esp8266.com/stable/package_esp8266com_index.json
配布元:https://github.com/esp8266/Arduino
これは、ボード情報が記載されているURLを入力することで、Arduinoに新しいボードを手軽に追加できる管理マネージャー機能です。
4. URLを入力したら、「環境設定」画面右下「OK」を押して閉じます。次に、「ツール」から「マイコンボード」-「ボードマネージャー」を選択
5. ボードマネージャー画面が表示されるので、そこの上にある検索欄に「ESP82」と入力すると、ESP8266~と表示されます。このESP8266~がESP-WROOM-02に対応するボードですので、「インストール」を押して、ボードを追加します。
6. 2~3分待つとインストールが完了しますので、完了したらArduinoを一度再起動して、再度「ツール」-「ボード」を開くとESP8266に関係するボード一式が追加されていればボードの追加は完了です。
準備が完了したので、さっそくArduinoプログラムを書き込んでみます!
ESP-WROOM-02にプログラムを書き込む
ESP-WROOM-02の準備が完了したら、あとは通常のArduino同様の手順でプログラムを書き込むことができます。何はともあれ、まずは下記プログラムのLチカを試してみます。出力はESP-WROOM-02の13ピンに設定します。
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(400); digitalWrite(13, LOW); delay(400); }
無事、Lチカができましたね!
ESP-WROOM-02でアナログ入力をするには
無事、Lチカができたので他のプログラムも動かしてみましょう。wifi通信をすることを考えると、遠隔でデータを取得するようなデバイスの作成に使ったり、車などに乗せてラジコンのように操作する、なんていうアイデアが生まれてきます。まずは、連載初期でも取り組んだ、光センサーからの入力を扱ってみましょう。Arduino UNOでは、アナログ入力ピンがA0~A4と用意されていましたが、ESP-WROOM-02にはA0~A4のようなアナログ専用の入力ピンがついていません。そして、デジタルピンも1、3~4、6~11がありません。これは、wifi通信など、ESP-WROOM-02の標準で用意されている機能を動かすために、ピンが使われているため使うことができません。
調べてみると、ESP-WROOM-02にはanalogRead関数が用意されていないらしく、そのため利用することができないようでした。では、どうすればアナログ入力をすることができるでしょうか?さらに調べてみると、ESP-WROOM-02でアナログ入力を行うには、TOUTピンで「system_adc_read()」という関数を使って、アナログ値を取得することができるようです。
しかし、通常のArduinoのアナログピンとは少し違い、TOUTピンは0v~1vの入力値の検出はできますが、3.3vの値をそのままTOUTピンに入力するとボードが壊れてしまう可能性があるため、光センサを加える場合も、3.3vから電源をとる場合、TOUTに入る電圧は最大1vになるように調整する必要があります。今回は、抵抗器をいくつか使って分圧回路を作成して対応しました。
ESP-WROOM-02:光センサ値の取得プログラム
//ESP-WROOM-02でアナログ入力をするために必要 extern "C" { #include "user_interface.h" } void setup() { Serial.begin(115200); //シリアル通信も通常のArduinoとは違う pinMode(13, OUTPUT); } //TOUTピンからの入力値を取得 int getToutValue(){ int res = system_adc_read(); //ここでTOUTの値を取得 return res; } void loop() { int val= getToutValue(); Serial.print("value:"); Serial.println(val); if(val > 580){ digitalWrite(13, HIGH); delay(400); } else{ digitalWrite(13, LOW); delay(400); } }
プログラムを起動させるとシリアルモニタに光センサの値が出力されました。
analogWrite関数を試してみる
analogRead関数はだめでしたが、analogWrite関数はどうでしょうか。Arduino UNOでは、デジタルピンもアナログ出力できるピンがありましたが、ESP-WROOM-02でもできるでしょうか。下記のプログラムを動かしてみます。
ESP-WROOM-02:光センサ値の取得プログラム
void setup() { pinMode(13, OUTPUT); } void loop() { for(int i=0;i<256;i++){ analogWrite(13, i); delay(40); } }
だんだんLEDが明るくなってあるところで消えて、最初から始まる、という動作をしていますね。analogWrite関数は使えることがわかりました!
まとめ
今回ESP-WROOM-02を使ってArduinoプログラムの動作を行いました。analogReadに変わるsystem_adc_readなど、通常のArduinoと少し違う部分がありますが、手軽に開発ができそうです。次回は、いよいよArduinoプログラムでwifi通信にチャレンジしてみます!
この連載の記事
- 第32回 Arduinoで使える小型WifiモジュールESP-WROOM-02でガジェットを作る(準備編)(このページの記事)
- 第33回 Arduinoで使える小型WifiモジュールESP-WROOM-02でガジェットを作る(Wifi通信テスト編)
- 第34回 Arduinoで使える小型WifiモジュールESP-WROOM-02でガジェットを作る(Arduino利用編)(このページの記事)
- 第35回 Arduinoマイコンとしても使える小型WifiモジュールESP-WROOM-02を使ってみる(Arduinoでwifi利用編)
- 第36回 Arduinoマイコンとしても使える小型WifiモジュールESP-WROOM-02を使ってみる(IFTTTで手軽にIoT編)