前回、ESP8266を搭載したESP-01を、Arduino IDEでプログラミングできるよう設定し、単体で動作させました。
今回は、USBアダプタに接続しないで、ESP-01単体のままプログラム更新できるように、Arduino OTAを使ってみます。
Arduino OTA
ESP32 dev kitや通常のArduinoと違って、ESP-01には書き込み用のインタフェースはありません。なので、単体で組み込んでしまうとプログラムの更新が面倒です。Wi-Fi経由(Over The Air) で更新したいところです。そこで、Arduino OTAを使ってみます。Arduino OTAに関してはこちらをご覧ください。
この記事に従って、Arduino IDEにArduino OTA関係のライブラリをインストールして、この先を続けてください。
Lチカプログラム
前回の記事では、以下のLチカプログラムを作成しました。(点滅速度を速めました)GPIO1に接続された青色LEDを点滅させます。
const int BlueLED=1;
void setup() {
pinMode(BlueLED, OUTPUT); // Initialize the LED pin as an output
}
void loop() {
digitalWrite(BlueLED, LOW); // Turn the LED on
delay(250); // Wait for 250ms
digitalWrite(BlueLED, HIGH); // Turn the LED off by making the voltage HIGH
delay(250); // Wait for 250ms
}
そしてこれを、USBアダプタに接続して、書き込みました。
USBアダプタをUSB接続する際には、前回追加した、プログラム書き込みモードスイッチを押しました。
OTA対応に改造する
次に、このLチカプログラムをOTA対応に書き換えます。そのためには、まずはWi-Fiを使用する必要があります。ESP32では、Wi-Fiを使うために、WiFi.hをインクルードしてました。同じようにしたら、いろいろとエラーが出ます。ESP8266ではライブラリが違うようです。探したところ、こちらのページで、ESP8266でWi-Fiを使う方法が説明されていました。
これによると、プログラム冒頭でESP8266WiFi.hをインクルードすれば良いようです。ライブラリの使い方は、ESP32と同じでした。ですので、Arduino OTAのプログラムも前記事同様に以下になりました。ハイライトの部分が、Lチカプログラムに追加したOTA対応部分です。ホスト名とHashパスワードの設定については、こちらをご覧ください。
#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
#define LED 4
const int BlueLED=1;
void setup() {
WiFi.begin("XXXXXXXX", "xxxxxxxx"); //SSID and password
while (WiFi.status() != WL_CONNECTED) delay(500);
ArduinoOTA.setHostname("ESP8266_OTA"); //host name
ArduinoOTA.setPasswordHash("3924..............105f4241e"); //hash password
ArduinoOTA.begin();
pinMode(BlueLED, OUTPUT); // Initialize the LED pin as an output
}
void loop() {
ArduinoOTA.handle();
digitalWrite(BlueLED, LOW); // Turn the LED on
delay(250); // Wait for 250ms
digitalWrite(BlueLED, HIGH); // Turn the LED off by making the voltage HIGH
delay(250); // Wait for 250ms
}
OTAを使う
このプログラムが動き始めるとネットワークポートが見えるようになってます。これを選択すると、新しいプログラムが書き込めます。
上の例では、パスワードもつけました。なのでArduino IDEから最初に接続する際にパスワードを尋ねられます。
これで、プログラムをWi-Fi経由で書き換えることができました。Lチカのタイミングいろいろ変えると、その通りに変更できました。
ESP-01の起動モードを変更する必要が無いので、前回取り付けた押しボタンスイッチを操作して、起動時にGPIO0をLowにする手前も不要です。さらに、ESP-01をUSBアダプターから外して、単体で動作させた場合でも、Wi-Fi経由でプログラム書き換え可能でした。
まとめ
ESP8266開発ボードESP-01のプログラムを、Arduino OTA経由で更新できるようにしました。これでUSBアダプタを使用することなく、ESP-01単体でプログラムの更新が可能になりました。
次はMQTTを試します。続きはこちらです。
コメント