ESP32C3を使ったBLE – UART変換

今回はESP32C3を使って、BLEとUARTを変換させることで、iPhone経由でFirmwareの更新ができるようにしてみました。配線はフライトコンピューターとESP32C3(D6:RX、D7:TX)をUARTで繋ぐだけです。 (正確にはGNDも必要で、また今回はフライトコンピューターから電源も供給しているので、5Vも繋いでいます) ソフトウェアの構成はメインアプリとブートローダーに分かれていて、ブートローダーが起動中にコマンドを送信することでFirmware Update Modeに遷移し、メインアプリを書き換えるようになっています。ブートローダーからメインアプリに飛ぶ際にメインアプリのチェックサムを計算して、一致していればメインアプリにジャンプしますが、一致しなければチェックサムエラーで赤い点滅になるようにしています。

ESP32C3でHardwareSerialを使用していますが、UARTのTimeout時間を設定していないとデフォルトの1000msとなるようです。そのため、応答性を向上させるためにはTimeoutの時間を設定する必要があります。

#include <HardwareSerial.h>

HardwareSerial MySerial0(0);

void setup() {
  MySerial0.begin(115200, SERIAL_8N1, -1, -1);
  MySerial0.setTimeout(5); //←これを設定しないとデフォルト(1000ms)になるようです。
}

実際にFirmwareを更新する様子を撮ってみました。

目次