HOME | Raspberry Pi | ビジネス書籍紹介 | 2026-01-04 (Sun) Today's Access : 226 Total : 1260924. Since 10 Sep. 2019

ESP32 PROGRAM SELECTOR
2024.05.08

YouTube でも紹介しています。画像をクリックすると再生できます。

1つのマイコンボードを複数の用途で使う場合、その都度プログラムを書き換えるのは面倒です。 そこでビルドしたバイナリーファイルをmicroSDカードに保存しておき、そこから選んで実行できるようにプログラム・セレクターを作ってみました。

今回は、プログラム・セレクタの実装にSparkfun ESP32 Thing Plusを使いましたが,ESP32系であればDevkitCなどでも構いません。

●Sparkfun ESP32 Thing Plus

Espressif Systems社のESP32-WROOM-32Dモジュールを搭載し、強力なWi-FiとBluetooth MCUを備えた開発プラットフォームThing Plusの新しいバージョンです。Featherボード互換で、Qwiicシステムの利用によりハンダ付けやシールドなしで接続が可能です。
静電容量式タッチセンサ、ホール(磁気)センサ、SDカードインターフェース、イーサネット、高速SPI、UART、I2S、 I2Cなど、豊富な周辺機器を統合し、16 MBのフラッシュメモリ、520 KBの内蔵SRAM、802.11 b/g/n Wi-Fi、デュアルモードBluetooth機能、およびLiPoバッテリー用JST型コネクタを特徴としています。
・Dimensions: 2.30 x 0.90 Inches
・Xtensa® dual-core 32-bit LX6 microprocessor
・Up to 240MHz clock frequency
・16MB of flash storage
・520kB internal SRAM
・Integrated 802.11 BGN WiFi transceiver
・Integrated dual-mode Bluetooth (classic and BLE)
・2.3 to 3.6V operating range
・21 GPIO
・8-electrode capacitive touch support
・Hardware accelerated encryption (AES, SHA2, ECC, RSA-4096)
・2.5 µA deep sleep current

●Pinout



↑クリックで拡大、再クリックで元に戻ります。

まずはプログラム・セレクタから選択するプログラムを2つ作って単体テストします。 プログラムのビルドには、Platformioを使用しています。
Arduino開発環境構築 PlatformIO


●1.OLED表示プログラム
0.49インチOLEDです。

ER-OLEDM0.49-1W-I2C
ER-OLEDM0.49-1W-I2C is the graphic OLED display module,attached with breakout board,made of 64x32 individual white OLED pixels,diagonal is only 0.49 inch.The controller ic SSD1306, communicates via I2C serial interface,3.3V power supply,extremely wide viewing angle and extremely operating temperature.



●2.信号機点灯プログラム

Working Voltage: 3.3-5v

When learning the microcontroller, you may usually use three separate LEDs, namely red, green and yellow light, to simulate the traffic light blinking via external connection.
KS0310 Keyestudio Traffic Light Module



プログラムの単体でストが完了したら、プログラム・セレクタ対応にちょっとだけ書き換えます。

#include "SDUpdater.h"
SDUPDATER sdupdater;

void setup()
{
  sdupdater.rollback();
  ・・・・・・・

setup()関数の先頭に、独自に作成したSDUpdaterクラスのrollback()関数を追記します。

ソースコードのビルドには、PlatformIOを使用しています。
Arduino開発環境構築 PlatformIO

各々ビルドしたバイナリファイルをリネームします。
.pio/build/esp32thing_plus/firmware.bin
→ ErOled049.bin
→ TrafficLight.bin

microSDカードのディレクトリーパス /firmware/ESP32ThingPlus ディレクトリにバイナリーファイルを保存します。

●ESP32 プログラム・セレクタ
まずはプログラム・セレクタの使い方から先に説明します。ソースコードは後述します。 パソコンからTeraTermを起動して。マイコンとTELNET接続します。

プログラム・セレクタは、microSDカード内のバイナリーファイル一覧を表示し、選択を促します。


プログラム番号を入力すると、microSDカードからバイナリファイルを読み込んで実行します。
マイコンをリセットして、TELNET再接続するとプログラム・セレクタ画面に戻ります。

if ( digitalRead(BTN_PIN)==LOW ) {
  sdupdater.restart();
}
マイコンのリセットを使わずに、独自に再起動ボタンを使う場合はこんな感じにします。

●仕組み解説
プログラム・セレクタの実装には、ESP32のOTA機能を使っています。
OTA機能に関しては以前の解説「OTA (ESP32 Over The Air)」をご覧ください。

OTA (ESP32 Over The Air)

Sparkfun ESP32 Thing Plus のパーティション・テーブルを確認しておきます。

$ cat ~/.platformio/platforms/espressif32/boards/esp32thing_plus.json | more

{
 "build": {
  "arduino":{
   "ldscript": "esp32_out.ld",
   "partitions": "default_16MB.csv"
  },

$ cat ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/default_16MB.csv
# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x640000,
app1,     app,  ota_1,   0x650000,0x640000,
spiffs,   data, spiffs,  0xc90000,0x360000,
coredump, data, coredump,0xFF0000,0x10000,

ラズベリーパイでプログラム・セレクタ(SDUpdater)をビルドしてマイコンボードにアップロードします。 プログラム・セレクタの実装にはOTA機能を用いていますが、このアップロード自体はラズベリーパイとマイコンボードをUSB接続して通常の書き込みを行います。 そうすると、プログラムはota_0のフラッシュ領域に書き込まれ、アプリの状態を管理するOTAデータ・パーティション内のブートアドレスはota_0の先頭アドレスで更新されます。
ハードリセットが行われると、ブートアドレスに指定されたアドレスに格納されているプログラム(SDUpdater)が起動します。


プログラム・セレクタは、microSDカードに含まれるfirmware一覧表示を行い、選択されたfirmwareをota_1領域に書き込みます。 書き込みが完了すると、ブートアドレスはota_1の先頭アドレスに書き換わります。その後、ESP32をリスタートさせます。


選択されたプログラムでは起動直後に、ブートアドレスをプログラム・セレクタが格納されているota_0アドレスに書き換えます。 その後、目的の処理、ここではOLEDに文字を表示しています。 ここでマイコンボードのリセットボタンを押すと、ブートアドレスに指定されたota_0、つまりプログラム・セレクタが起動します。


今度は、信号機点灯プログラム(TrafficLight)を選択します。ota_1内のプログラムが上書きされ、ブートアドレスは先ほどと同様にota_1先頭アドレスに変更されます。

信号機が点灯し、ブートアドレスは再度ota_0に更新されます。

●ソースコード
PROGRAM SELECTOR(SDUpdater)
ソースコードは適当です。不具合があるかもしれません。用途に応じて最適化を行ってください。

●Mobile Telnet
パソコンを立ち上げ、TeraTermを起動してプログラム一覧を表示させるのが面倒なときは、「Mobile Telnet」のようなスマホ・アプリを使うのが簡単です。

●参考文献
Over The Air Updates (OTA)
M5Stackでツリービュー形式の多機能ランチャーを作ってみた
bigw00d/esp32_ili9341_2.8_tft_touch_display
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2019.12.13 モバイルバッテリーによる瞬間停電対策
2020.01.01 1280x800 HDMI MONITOR
2020.01.12 micro:bitをコマンドラインで使う
2020.02.04 サーマルプリンタを使う
2020.04.10 電卓を制御して数字を表示する
2020.08.03 Seeeduino XIAO
2020.08.09 LGT8F328P - Arduino clone
2020.09.18 電流計測モジュール INA219
2021.02.16 癒しの電子回路
2021.03.06 疑似コンソール
2021.08.08 電子ペーパー
2021.09.04 AVRマイコン・ATTiny85
2021.09.25 pH測定
2021.11.13 NTP時刻取得と活用
2021.11.27 GPS情報取得
2021.12.11 GR-KURUMI
2021.12.25 ATMEGA328P 3.3V/8MHz
2022.01.11 AS-289R2 プリンタシールド
2022.01.25 TM1637 & ATtiny85
2022.02.22 Raspberry Pi Zero 小道具
2022.03.01 ATTinyCore
2022.03.18 Adafruit QT Py + XIAO Expansion board
2022.07.31 サーマルプリンター番外編:通信筒
2023.01.01 FTP Server & SPI Flash SD
2023.02.01 LPC810(ARM Cortex-M0+)
2023.02.15 IchigoJam互換機
2023.03.01 Telnet
2023.04.26 USBメモリをUART接続で利用する
2023.05.14 焦電型赤外線モーションセンサー
2023.07.01 文字化けしないキーボード
2023.08.01 Bluetoothサーマルプリンター
2023.08.12 LattePanda 2G/32GB
2023.09.04 SI-3012KS
2023.12.01 疑似コンソール(C言語編)
2023.12.16 昭和レトロ・温度湿度時刻計
2023.12.25 二酸化炭素濃度監視
2024.01.23 なんちゃってmicro:bit
2024.02.07 オリジナル micro:bit
2024.02.23 ESP32 OTA
2024.03.08 TELNETサーマルプリンター
2024.05.08 ESP32 PROGRAM SELECTOR
2024.05.23 統合開発環境とQwiic
2025.01.24 赤外線リモコン
2025.03.25 QRCode SCANNER
2025.04.08 Keyestudio 328 WiFi Plus
2025.08.23 NanoPi NEO3
2025.09.24 I2C接続microSDモジュール
2025.10.08 UNO 3.3V@8MHz

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.