できること

第34回 Arduinoで使える小型WifiモジュールESP-WROOM-02でガジェットを作る(Arduino利用編)

※この記事は2015年11月30日に公開した記事を再編集し、2022年2月3日に再度公開しました。

1-DSC_0479

 

目次

  1. 今回の電子工作レシピ
  2. Arduinoのバージョン確認
  3. ArduinoにESP-WROOM-02ボードを追加する
  4. ESP-WROOM-02にプログラムを書き込む
  5. ESP-WROOM-02でアナログ入力をするには
  6. analogWrite関数を試してみる
  7. まとめ

 

今回は、いよいよ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)

 

図1 arduino.ccのIDEダウンロード画面

図1 arduino.ccのIDEダウンロード画面

 

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に新しいボードを手軽に追加できる管理マネージャー機能です。

図2 Arduino IDEの環境設定画面

図2 Arduino IDEの環境設定画面

 

4. URLを入力したら、「環境設定」画面右下「OK」を押して閉じます。次に、「ツール」から「マイコンボード」-「ボードマネージャー」を選択

図3 ボードマネージャー

図3 「ツール」-「マイコンボード」-「ボードマネージャー」

 

5. ボードマネージャー画面が表示されるので、そこの上にある検索欄に「ESP82」と入力すると、ESP8266~と表示されます。このESP8266~がESP-WROOM-02に対応するボードですので、「インストール」を押して、ボードを追加します。

図4 ボードマネージャー画面

図4 ボードマネージャー画面

 

6. 2~3分待つとインストールが完了しますので、完了したらArduinoを一度再起動して、再度「ツール」-「ボード」を開くとESP8266に関係するボード一式が追加されていればボードの追加は完了です。

図5 ESP8266の追加

図5 ESP8266の追加

 

準備が完了したので、さっそくArduinoプログラムを書き込んでみます!

 

ESP-WROOM-02にプログラムを書き込む

ESP-WROOM-02の準備が完了したら、あとは通常のArduino同様の手順でプログラムを書き込むことができます。何はともあれ、まずは下記プログラムのLチカを試してみます。出力はESP-WROOM-02の13ピンに設定します。

図6 ESP-WROOM-02のLチカ回路

図6 ESP-WROOM-02のLチカ回路

 


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()」という関数を使って、アナログ値を取得することができるようです。

 

写真1 TOUTピン

写真1 TOUTピン

 

しかし、通常のArduinoのアナログピンとは少し違い、TOUTピンは0v~1vの入力値の検出はできますが、3.3vの値をそのままTOUTピンに入力するとボードが壊れてしまう可能性があるため、光センサを加える場合も、3.3vから電源をとる場合、TOUTに入る電圧は最大1vになるように調整する必要があります。今回は、抵抗器をいくつか使って分圧回路を作成して対応しました。

写真2 光センサ

写真2 光センサ

写真3 分圧回路で1vを出力

写真3 分圧回路で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); 
 }
}

プログラムを起動させるとシリアルモニタに光センサの値が出力されました。

図7 シリアルモニタ結果

図7 シリアルモニタ結果

 

 

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通信にチャレンジしてみます!

 

この連載の記事

アバター画像

電子工作や新しいデバイスをこよなく愛するエンジニア。日常生活のちょっとしたことを電子工作で作って試して、おもしろく過ごしたいと日々考えています。

Arduinoでスマートウォッチを作ろう