完成した Ver 11.2 のプログラムに基づき、納品物としての**「納入仕様書」および、内部構造を解説する「技術資料(ブロック遷移・フロー)」**を作成いたしました。
1. 納入仕様書 (Delivery Specification)
適用: ESP32 RSS Reader Project 版数: Ver 11.2 (Final Release) 日付: 2025/12/11
1.1 概要
本システムは、ESP32マイコンとOLEDディスプレイを用い、インターネット経由でニュース(RSS)を取得・表示する情報端末である。HTTPS通信に対応し、3つのニュースソースを巡回表示する機能に加え、時計・カレンダー機能を有する。また、スマートフォン経由でWi-FiおよびRSS接続先の設定が可能である。
1.2 ハードウェア仕様
1.3 ソフトウェア機能仕様
2. 技術資料 (Technical Reference)
本システムの内部ロジック、状態遷移、およびデータフローについて解説する。
2.1 システムブロック図 (System Architecture)
本ソフトウェアは、機能を**「メインアプリ(RSS表示)」と「システム設定モジュール」**に完全に分離したモジュール構造を採用している。
graph TD
subgraph "Hardware Layer"
HW_BTN[Button (GPIO 0)]
HW_OLED[OLED Display]
HW_WIFI[Wi-Fi Module]
HW_FLASH[NVS Memory]
end
subgraph "Software Logic (Ver 11.2)"
BOOT[Boot Loader / Setup]
subgraph "Mode Selector (起動分岐)"
CHECK_BTN{ボタン押下?}
CHECK_DATA{設定データ有?}
CHECK_CONN{接続成功?}
end
subgraph "Module A: System Configurator"
AP_MODE[AP Mode Start]
WEB_SVR[Web Server / Portal]
WAIT_USR[User Input Wait]
SAVE[Save to NVS]
end
subgraph "Module B: Main Application"
INIT_NET[Connect WiFi / NTP]
RSS_FETCH[Fetch RSS (HTTPS)]
RSS_PARSE[Parse XML]
DISP_CTRL[Display Controller]
end
end
%% Flow Connections
HW_BTN --> BOOT
BOOT --> CHECK_BTN
CHECK_BTN -- YES --> AP_MODE
CHECK_BTN -- NO --> CHECK_DATA
CHECK_DATA -- Empty --> AP_MODE
CHECK_DATA -- Exist --> CHECK_CONN
CHECK_CONN -- Fail(x10) --> AP_MODE
CHECK_CONN -- Success --> INIT_NET
AP_MODE --> WEB_SVR --> WAIT_USR --> SAVE --> HW_FLASH
INIT_NET --> RSS_FETCH --> RSS_PARSE --> DISP_CTRL --> HW_OLED
2.2 状態遷移図 (State Transition Diagram)
システムは大きく分けて「起動シーケンス」「設定モード」「通常稼働モード」の3つのフェーズで遷移する。
① 全体遷移フロー
-
Power ON / Reset
-
起動待機 (5秒): プログレスバー表示。ボタン押下を監視。
-
分岐判定:
-
ボタンON または 設定なし → 設定モードへ (一方通行)
-
ボタンOFF かつ 設定あり → 通常モードへ
-
② 設定モード詳細 (System Configurator)
このモードに入ると、電源リセット以外での脱出は不可能(無限ループ待機)。
-
State 1: 初期化
-
WDT停止、Wi-Fi設定の強制切断(Disconnect)、APモード起動。
-
-
State 2: 待機 (Portal)
-
State 3: 保存 (Save)
-
ユーザーがブラウザで「Save」を押下。
-
データをFlash(Preferences)に書き込み。
-
システム再起動 (Reboot)。
-
③ 通常稼働モード詳細 (Main App Display State)
loop() 関数内で管理されるステートマシン。
-
State A: START_TOPIC
-
記事タイトルとソース名を描画バッファにセット。3秒停止。
-
Next -> V_SCROLLING
-
-
State B: V_SCROLLING
-
1ラインずつ上方向へスクロール。
-
最終行まで表示したら停止。
-
Next -> END_TOPIC
-
-
State C: END_TOPIC
-
読み終わった状態で2秒停止。
-
Next -> H_SCROLLING
-
-
State D: H_SCROLLING
-
画面全体を左へスライドアウト(ワイプ効果)。
-
次の記事があれば State A へ。
-
全記事終了なら State E へ。
-
-
State E: CLOCK_MODE
-
アナログ時計/デジタル時計/カレンダーを描画。
-
20秒経過後、次のRSSサイトへ接続・取得。
-
取得成功なら State A へ戻る。
-

2.3 ソフトウェアフローチャート (処理の流れ)
起動~分岐ロジック (setup関数内)
-
OLED初期化: 何よりも先に画面を表示可能にする。
-
設定ロード: 前回のRSS URL等をメモリから読み込む。
-
ユーザー入力待機: 画面にバーを表示し、5秒間ボタン入力を監視。
-
if (Button == LOW)->executeConfigMode()を呼び出し、終了(戻らない)。
-
-
データチェック: RSS設定が空なら
executeConfigMode()へ。 -
Wi-Fi接続試行:
-
10回リトライしても繋がらなければ
executeConfigMode()へ。 -
繋がれば
executeNormalMode()へ。
-
RSS取得・解析ロジック (fetchRSS関数)
-
接続:
WiFiClientSecureでHTTPS接続開始。 -
WDTケア: 通信待ち中も
esp_task_wdt_reset()を実行し、再起動を防ぐ。 -
XML解析:
-
<item>または<entry>タグを探索。 -
<title>タグの中身を抽出。 -
全角/半角文字コードを判別し、画面幅(128px)に合わせて自動改行処理を行う(
splitToFitWidth関数)。
-
-
リスト化: 表示用構造体
allTopicsに格納。
2.4 補足:トラブルシューティング (FAQ)
-
Q: 設定画面でスマホが繋がらない。
-
A: スマホの「モバイルデータ通信」をOFFにしてから
ESP32-RSS-Setupに接続してください。
-
-
Q: 画面が「システム起動中」から動かない。
-
A: 初回起動時やメモリクリア後は、内部でAPモードの起動準備をしています。約10秒ほどで「設定待機中」に切り替わります。
-
-
Q: 特定のサイトが表示されない。