ArduinoOTAでプログラムの無線書き込み(ESP8266)

No Image

ESP8266はプログラムの無線書き込みができる機能(OTA:On The Air)があるらしいというのを最近知ったので実際にやってみました。
一度書き込み用のプログラムを入れると次からは端子の接続不要で書き込めるのが魅力的です。
「ArduinoOTA」は標準で入っているライブラリで、サンプルプログラムを真似すれば簡単に導入できます。

ArduinoOTAでプログラムの無線書き込み(ESP8266)

スポンサーリンク

準備

最低限必要なものは以下のものです。

  • ESP8266(ESP-WROOM-02)
  • Arduino IDE(1.8.5で動作確認済)
  • Python 2.7

ここからは「ESP8266」は持ってて「Arduino IDE」はインストール済みという前提で話を進めます。
「Python 2.7」のインストーラは下記URLでダウンロードできます。

無線で書き込むためのプログラム

先程言ったように標準でサンプルプログラムがありますので、ありがたく使わせてもらいます。
上部メニューの[ファイル]→[スケッチ例]→[ArduinoOTA]→[BasicOTA]を使います。
BasicOTAのプログラム

このプログラムのsetup関数とloop関数をそのまま使いたいプログラムに結合するだけでOKです。
そして、このプログラムを「ESP8266」に書き込むと無線で書き込むことができるようになります。(この時点では有線です)

WiFiManagerと一緒に使う

個人的にですがWiFiManagerと一緒に使いたいので先のプログラムを少し変更してこうなります。

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <ArduinoOTA.h>

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  
  WiFiManager wifiManager;
  wifiManager.autoConnect("LCD_Clock_Server");
  
  Serial.println("connected...yeey :)");

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  // ArduinoOTA.setHostname("myesp8266");

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH)
      type = "sketch";
    else // U_SPIFFS
      type = "filesystem";

    // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
    Serial.println("Start updating " + type);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
}

無線でプログラムを書き込む

OTAのプログラムを書き込めたら、シリアルポートの欄に[ネットワークポート]というのが出現しているはずです。

Pythonが入っていないと出現しません。

複数あれば書き込む対称のIPアドレスを確認しておく必要があります。
出現すれば、このネットワークポートを選択し、プログラムを書き込みます。
今までUSB-シリアル変換器を接続したり面倒だったのが嘘のように遠隔でプログラムの書き込みができました。
これ以降はOTAのプログラムがある限り無線で書き込むことができるようになっています。


今までケースをあけて、USBシリアル変換器を挿して、書き込んでいたのが面倒になりませんか。
といってもネットワーク環境がある場所に限りますけどね。

ArduinoOTAでプログラムの無線書き込み(ESP8266)

スポンサーリンク

Leave a Comment