九州・福岡・東京ときどきIoT

21年間のはてなダイアリー&アメブロからの避難所

ESP32 RSS Reader Project納入仕様書 Ver 11.2

 

完成した 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 ハードウェア仕様

項目 仕様 備考
MCU ESP32-WROOM-32 Wi-Fi / Bluetooth内蔵
表示器 0.96インチ OLED (SSD1306) 解像度: 128x64 pixel, I2C接続
入力IF タクトスイッチ x 1 GPIO 0 (BOOTボタン兼用)
電源 USB 5V MicroUSB / Type-C

1.3 ソフトウェア機能仕様

機能ブロック 詳細
RSSリーダー

・指定された3つのURLからRSSフィード(XML)を取得


Yahoo!ニュース等のHTTPS(SSL)サイトに対応


・記事タイトルを自動で折り返しスクロール表示

時計機能

・NTPサーバー(pool.ntp.org)より時刻同期


RSS一巡ごとに「令和」元号を含むカレンダーと時刻を表示

設定機能

Wi-Fiアクセスポイントモード(AP)による設定画面提供


SSID, パスワード, RSS URL(x3)の変更が可能


・設定内容は不揮発性メモリ(NVS)に保存

安定化機能

・WDT(ウォッチドッグタイマー)によるフリーズ監視 (60秒)


・接続失敗時の自動リトライおよび設定モードへの自動遷移


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つのフェーズで遷移する。

① 全体遷移フロー

  1. Power ON / Reset

  2. 起動待機 (5秒): プログレスバー表示。ボタン押下を監視。

  3. 分岐判定:

    • ボタンON または 設定なし → 設定モードへ (一方通行)

    • ボタンOFF かつ 設定あり → 通常モードへ

② 設定モード詳細 (System Configurator)

このモードに入ると、電源リセット以外での脱出は不可能(無限ループ待機)。

  • State 1: 初期化

    • WDT停止、Wi-Fi設定の強制切断(Disconnect)、APモード起動。

  • State 2: 待機 (Portal)

    • Webサーバー起動。ユーザーがスマホ192.168.4.1 に接続するのを待機。

    • OLED表示: SSID / IPアドレス / "設定待機中"

  • 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関数内)

  1. OLED初期化: 何よりも先に画面を表示可能にする。

  2. 設定ロード: 前回のRSS URL等をメモリから読み込む。

  3. ユーザー入力待機: 画面にバーを表示し、5秒間ボタン入力を監視。

    • if (Button == LOW) -> executeConfigMode() を呼び出し、終了(戻らない)。

  4. データチェック: RSS設定が空なら executeConfigMode() へ。

  5. Wi-Fi接続試行:

    • 10回リトライしても繋がらなければ executeConfigMode() へ。

    • 繋がれば executeNormalMode() へ。

RSS取得・解析ロジック (fetchRSS関数)

  1. 接続: WiFiClientSecureHTTPS接続開始。

  2. WDTケア: 通信待ち中も esp_task_wdt_reset() を実行し、再起動を防ぐ。

  3. XML解析:

    • <item> または <entry> タグを探索。

    • <title> タグの中身を抽出。

    • 全角/半角文字コードを判別し、画面幅(128px)に合わせて自動改行処理を行う(splitToFitWidth関数)。

  4. リスト化: 表示用構造体 allTopics に格納。


2.4 補足:トラブルシューティング (FAQ)

  • Q: 設定画面でスマホが繋がらない。

    • A: スマホの「モバイルデータ通信」をOFFにしてから ESP32-RSS-Setup に接続してください。

  • Q: 画面が「システム起動中」から動かない。

    • A: 初回起動時やメモリクリア後は、内部でAPモードの起動準備をしています。約10秒ほどで「設定待機中」に切り替わります。

  • Q: 特定のサイトが表示されない。

    • A: サイト側のSSL証明書仕様変更や、XML構造が特殊な場合があります。PCのブラウザでRSS URLが開けるか確認してください。