ESP32-WROVER-EでRSSサイトにアクセスし、記事のタイトルと概要をディスプレイに表示するプログラムです。
ラズパイPico版では大きなRSSデータを読み込むとメモリ不足でエラーになる場合がありました(Picoのメインメモリは264KB)。ESP32-WROVER-Eは疑似SRAM(PSRAM)が搭載されており、それを使うことでこの問題が解決できるのかどうかを確かめました(ESP32-WROVER-Eのメインメモリは520KB、PSRAMは8MB)。
- プログラム内で指定したRSSサイトにアクセスし、タイトルと記事の概要を順次表示します(過去2日分に限定)
- タクトスイッチを押すとフォントサイズが切り替わります(3段階)
※ラズパイPico版と比べると、表示する記事を過去2日分に限定する機能が追加されています。
- ESP32-DevKitC-VE ESP32-WROVER-E開発ボード … 1,750円(税込)
- 有機ELディスプレイ SSD1306 … 580円(税込)
- タクトスイッチ … 30円(税込)
- ブレッドボード(6穴版) … 460円(税込)
- 配線用のワイヤー
合計:2,820円(税込)
![](https://private-user-images.githubusercontent.com/139528700/257040385-c3663804-314a-40d8-8c31-e616bfc7ad4b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ1NTgwNTYsIm5iZiI6MTcyNDU1Nzc1NiwicGF0aCI6Ii8xMzk1Mjg3MDAvMjU3MDQwMzg1LWMzNjYzODA0LTMxNGEtNDBkOC04YzMxLWU2MTZiZmM3YWQ0Yi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNVQwMzQ5MTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hMTg1ODJjNjU5Mzk0MDNjZTBkNjQ2OWM5MTM3ZTRiNGZiOWMzNzljNTY0ZjU2OTU5NTU5N2NiMmE0NTU2NDM1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.SxMQo0myajpQci-aCw7KbtQvJ23ey-ArUfABRaMI6BA)
screencast.mp4
- Thonny 4.0.2
- Windows 10 / 11
- ESP32-DevKitC-VE ESP32-WROVER-E開発ボード
- MicroPython v1.20.0 (ESP32 with SPIRAM)
PCとESP32-WROVER-Eを接続して、以下のファイルをPicoにコピーしてください。Thonnyを使うと簡単です。
main.py [メインプログラム]
date.py [日付処理用モジュール]
ntp.py [NTPモジュール]
ssd1306.py [ssd1306用ドライバ]
ssd1306_mfont.py [ssd1306用ドライバ拡張]
mfont [フォントライブラリ(外部ライブラリ)]
│ mfont.py [フォントドライバモジュール]
│ tma_jp_utl.py [フォントモジュール用サブルーチン]
│ __init__.py [フォントドライバモジュール用]
└─ fonts [フォントファイル]
u_12x12.fnt [東雲フォント(12ドット)]
u_14x14.fnt [東雲フォント(14ドット)]
u_16x16.fnt [東雲フォント(16ドット)]
※mfontフォルダ以下はTamakichiさん作成のライブラリです。
以下のリンクから別途ダウンロードしてください。
https://github.com/Tamakichi/pico_MicroPython_Multiifont
fontsフォルダのフォントは、オリジナルのフォルダの中から12、14、16ドットフォントを抜粋してインストールします。
main.pyの先頭部分にある以下の設定をお使いの環境に合わせて書き換えてください。アクセスポイントを複数記載してある場合は、上から順次接続を試みます。
# WiFiアクセスポイント
WIFI_ACCESS_POINTS = [
{"ssid": "ssid_A", "password": "pass_A"},
{"ssid": "ssid_B", "password": "pass_B"},
]
main.pyの先頭部分にある以下の設定を、閲覧したいRSSサイトに合わせて編集してください。
# RSSサイト
RSS_SITES = [
{"name": "NHK主要ニュース", "url": "https://www.nhk.or.jp/rss/news/cat0.xml"},
{"name": "CNET Japan", "url": "https://feeds.japan.cnet.com/rss/cnet/all.rdf"},
{"name": "GIGAZINE", "url": "https://gigazine.net/news/rss_2.0/"},
{"name": "ITMedia 科学", "url": "https://rss.itmedia.co.jp/rss/2.0/news_technology.xml"},
{"name": "ITMedia セキュリティ", "url": "https://rss.itmedia.co.jp/rss/2.0/news_security.xml"},
{"name": "ITMedia 国内", "url": "https://rss.itmedia.co.jp/rss/2.0/news_domestic.xml"},
]
電源を入れると自動的に実行されます。
このプログラムは以下の外部ライブラリを使用しています。これらの外部ライブラリのライセンスに関してはそれぞれのプロジェクトをご参照ください。
- ssd1306.py
micropython-ssd1306 - mfontフォルダ
pico_MicroPython_Multiifont
RSSサイトから配信されるXMLが適度に改行されていないと、正常に動作しません。この制限はこの独自のパースロジックに由来するものです。例えばCNNが配信しているRSSデータは、このプログラムでは正常にパース出来ません。これはCNNのデータに問題があるわけではなく、単にこのプログラムの制限事項です。
ラズパイPicoと比べるとESP32-WROVER-Eは開発を始めるのが面倒だったので、備忘録代わりに留意点を記載しておきます。
次に述べるesptoolをインストールするために、まずはPythonをインストールする必要があります。ここではPythonの公式サイトからダウンロードしたバージョン3.11.4を使用しました。
PCとESP32をUSBケーブルで接続した後、Windowsのコマンドプロンプトを起動し、次のように入力し、esptoolをインストールします。
> pip install esptool
インストール後、次のコマンドを実行するとESP32のチップの情報が表示されます。
> esptool flash_id
もしESP32とうまく通信できない場合は、PCに適切なUSBドライバがインストールされていない可能性があります。その場合は、次の項目を参照しUSBドライバをインストールしてください。
デバイスマネージャーで確認すると以下のようなデバイスが見つかると思います。
Silicon Labs CP210x USB to UART Bridge
Silicon Labsの公式ページから、利用している環境のドライバをダウンロードし(ここではWindows用のCP210x Universal Windows Driverをダウンロードしました)、解凍してできた silabser.infファイルを右クリックして「インストール」すれば完了です。
インストール後、再度下記コマンドを実行すればチップの情報が表示されるはずです。
> esptool flash_id
MicroPythonの公式ページから使用するファームウェアをダウンロードします。ここでは疑似SRAMを使いたいので、「ESP32 with SPIRAM」というファームウェアをダウンロードします。
まず、フラッシュメモリをクリアするために以下のコマンドを実行します。--portの後のCOMポートはPCとESP32を接続しているCOMポートを記載してください。接続しているCOMポートは上記「esptool flash_id」コマンドで確認できます。
> esptool --chip esp32 --port COM7 erase_flash
以下のコマンドでファームウェアをESP32に書き込みます。先ほどと同様に--portオプションには使用しているCOMポートを、一番最後のファイル名にはダウンロードしたMicroPythonのファームウェアファイル名を指定してください。
> esptool --chip esp32 --port COM7 --baud 460800 write_flash -z 0x1000 esp32spiram-20230426-v1.20.0.bin
ファームウェアの書き込みが終わったら、Thonnyなどの開発環境を起動してESP32と接続し、REPLで以下のコマンドを実行してメモリ量を確認します。正常に疑似SRAMを認識できていれば、4MB程度の空き容量が表示されるはずです。
>>> import gc
>>> gc.mem_free()
4088800
ESP32-WROVER-EのデータシートにはPSRAMは8MBと記載されていますが、上記の通りここで利用できるのは4MB程度となっています。この差がどこから生まれるのかは不思議ですが、4MBもあればRSSを解析する分には問題ないです。
- ファーストリリース
- ラズパイPico版からの分岐