ESP8266 (ESP-01) をArduino IDEで使う(2: OTA編)

DIYする

前回、ESP8266を搭載したESP-01を、Arduino IDEでプログラミングできるよう設定し、単体で動作させました。

ESP8266 (ESP-01) をArduino IDEで使う(1: Lチカ編)
これまで、ESP32を使ってHomeKitで動作するアクセサリをDIYしてきました。ESP32の下位モデルにESP8266があります。シンプルなアクセサリならばESP8266でも作れますし、市販のスマートプラグ、スイッチ、センサー類にはES...

今回は、USBアダプタに接続しないで、ESP-01単体のままプログラム更新できるように、Arduino OTAを使ってみます。

Arduino OTA

ESP32 dev kitや通常のArduinoと違って、ESP-01には書き込み用のインタフェースはありません。なので、単体で組み込んでしまうとプログラムの更新が面倒です。Wi-Fi経由(Over The Air) で更新したいところです。そこで、Arduino OTAを使ってみます。Arduino OTAに関してはこちらをご覧ください。

Arduino IDEからESP32をOTAアップデート(改訂版)
OTA (Over The Air)を使ってESP32のスケッチをアップデートする方法の改訂版です。以前、試したESP32のスケッチ例は、もっと簡単にしても良いことを他の方のブログで知りました。おかげさまで活用できるようになりました。という...

この記事に従って、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 library — ESP8266 Arduino Core 3.1.2-21-ga348833 documentation

これによると、プログラム冒頭で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を試します。続きはこちらです。

ESP8266 (ESP-01) をArduino IDEで使う(3: MQTT編)
前回、ESP8266を搭載したESP-01を、Arduino IDEでプログラミングできるよう設定し、OTAによりプログラム更新しました。今回は、MQTTメッセージをパブリッシュ、サブスクライブしてみます。OTAも引き続き有効にします。以下...

コメント

タイトルとURLをコピーしました