Nordic Semiconductorの最新セルラーIoTボード「nRF9151-DK」と、4.2インチ電子ペーパー(Waveshare 400x300, V2)を組み合わせてみました。
スマートフォンやPCを一切介さず、マイコン単独でLTE-M回線から公共交通オープンデータ(ODPT API)を自律取得し、超低消費電力でバス運行ダイヤを表示し続ける「屋外ポータブル型スマート交通時刻表デバイス」のプロトタイプが完成しました。
電源を切っても画面が永久に残る電子ペーパーの特性を活かし、直射日光下でも抜群の視認性を誇るデバイスです。
開発中に直面した「Arduino空きピン(D12)の罠」や、1.8Vから3.3VへのPMIC昇圧、SSD1683コントローラのコマンド改修、自作ビットバンギングSPI、そしてUSB抜き差し不要の常時待機デバッグモードなど、泥臭い技術課題と解決ノウハウを詳しく解説します。
【nRF9151-DK】電源を切っても消えない!LTE-Mと4.2インチ電子ペーパーで作る超省電力スマート交通時刻表
Nordic Semiconductorの最新セルラーIoTボード「nRF9151-DK」と、4.2インチ電子ペーパー(Waveshare 400x300, V2)を組み合わせてみました。
スマートフォンやPCを一切介さず、マイコン単独でLTE-M回線から公共交通オープンデータ(ODPT API)を自律取得し、超低消費電力でバス運行ダイヤを表示し続ける「屋外ポータブル型スマート交通時刻表デバイス」のプロトタイプが完成しました。

電源を切っても画面が永久に残る電子ペーパーの特性を活かし、直射日光下でも抜群の視認性を誇るデバイスです。
開発中に直面した「Arduino空きピン(D12)の罠」や、1.8Vから3.3VへのPMIC昇圧、SSD1683コントローラのコマンド改修、自作ビットバンギングSPI、そしてUSB抜き差し不要の常時待機デバッグモードなど、泥臭い技術課題と解決ノウハウを詳しく解説します。
プロジェクト・動画のリンク先
YouTubeでも実機の動作や画面更新の様子を詳しく解説しています
システム全体アーキテクチャとハードウェア構成
外出先で「次のバスがいつ来るか」を知りたい時、通常はスマートフォンを取り出してアプリを起動する必要があります。
しかし、マイコン自体がLTE-M通信と位置測位を行い、電子ペーパーに表示すれば、スマホのバッテリーを消費することなく、常時最新の時刻表を確認できます。
システムアーキテクチャ
本システムは、以下のパイプラインで完全自律動作します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
┌────────────────────────────────────────────────────────────────────────┐ │ nRF9151-DK (Cortex-M33) │ │ │ │ 【GNSS 高精度測位】 │ │ 現在地座標を特定 (名古屋市内 / 精度2.6m) │ │ ↓ │ │ 【SoftBank LTE-M セルラー通信 (Onomondo IoT SIM)】 │ │ api-challenge.odpt.org:443 へセキュア TLS (HTTPS) 接続 │ │ ↓ │ │ 【ODPT API 公共交通データ自律取得】 │ │ 名古屋市交通局等の運行ダイヤ・発車時刻 JSONを受信 (2,276 bytes) │ │ ↓ │ │ 【UI レンダリング & 高速ビットバンギング SPI 転送】 │ │ 400x300 フレームバッファを描画し、電子ペーパーへダイレクト転送 │ └────────────────────────────────────┬───────────────────────────────────┘ │ SPI (P0.07〜P0.13, 3.3V) ▼ ┌────────────────────────────────────────────────────────────────────────┐ │ Waveshare 4.2インチ 電子ペーパーモジュール (V2) │ │ │ │ ・画面解像度: 400 × 300 ピクセル (白黒2値) │ │ ・表示内容: 最寄り停留所 (名古屋城方面)、直近便、運行ダイヤ一覧 │ │ ・超低消費電力: 画面表示保持電力 0W (電源を切っても画面が永久に残る) │ └────────────────────────────────────────────────────────────────────────┘ |
ハードウェア仕様一覧
| コンポーネント | 仕様・デバイス名 | 役割・ポイント |
|---|---|---|
| メインMCUボード | Nordic Semiconductor nRF9151-DK | ARM Cortex-M33 + LTE-M/NB-IoT/GNSS統合SiP |
| ディスプレイ | Waveshare 4.2インチ 電子ペーパー (V2) | 400x300、SSD1683ドライバ、表示保持電力0W |
| セルラー回線 | Onomondo IoT SIM (SoftBank LTE-M) | 国内キャリアへ自動接続、TLS 1.2 ハードウェアオフロード |
| オープンデータ | 公共交通オープンデータセンター (ODPT API) | 名古屋市内の交通機関運行データを直接取得 |
| 電源 | 市販モバイルバッテリー または USB給電 (5V) | 単独動作可能、更新時のみ電力を消費 |


電子ペーパーとnRF9151-DKのピン結線仕様
電子ペーパーモジュールを、nRF9151-DKのArduino Unoピンヘッダへ配線します。
ピン結線一覧表
| 配線色 | 信号名 | nRF9151-DK ピン | コネクタ | 役割・説明 |
|---|---|---|---|---|
| 赤 | VCC | VDD (3.3V) | P5 (4ピン) | 3.3V 電源供給 |
| 黒 | GND | GND | P5 (6ピン) | グランド接地 |
| 青 | DIN | P0.11 | P3 (D11) | SPI MOSI(データ送信) |
| 黄 | CLK | P0.13 | P3 (D13) | SPI SCK(クロック) |
| 橙 | CS | P0.10 | P3 (D10) | チップセレクト(Active-Low) |
| 緑 | DC | P0.09 | P3 (D9) | コマンド / データ切替 |
| 白 | RST | P0.08 | P3 (D8) | リセット(Active-Low) |
| 紫 | BUSY | P0.07 | P2 (D7) | ビジー状態検出ピン |

注意!Arduino空きピン(D12)の罠
配線を行う際、最大の落とし穴となったのがP3コネクタの P0.12 (D12ピン) が空きピン(未接続)になっている点です。
端から順番に詰めてピンを挿してしまうと、D12を挟んで全ての信号が1ピンずつズレてしまい、通信が一切通りません。
必ず P0.12 を飛ばして配線を行う必要があります。
開発時に直面した4大技術難関と解決アプローチ
電子ペーパーの制御とセルラー通信を融合させる過程で、いくつもの深いハードウェア・ソフトウェアの壁に直面しました。
電圧の壁(1.8V vs 3.3V)とBoard Configurator昇圧
配線が完璧にもかかわらず、初期状態では電子ペーパーがピクリとも反応しませんでした。
ロジックアナライザで信号を調査したところ、nRF9151-DKのGPIO電圧(VDD_GPIO)がデフォルトで1.8Vに出力されていました。
Waveshare電子ペーパーのHighレベル入力閾値は2.3V以上であるため、1.8V信号ではLowとみなされてしまっていたのです。
そこで、nRF Connect for Desktopツールの「Board Configurator」を起動し、オンボードPMIC(nPM1300)のVDD_GPIO設定を3.3Vへ昇圧しました。
これにより、電子ペーパーが要求する3.3Vロジックレベルを完全に満たすことができました。
最新V2コントローラ(SSD1683)のコマンド体系改修
電圧を解決しても、画面描画を行うと黒が薄くかすれたり、砂嵐のような乱れが発生しました。
手元のモジュールを精査したところ、従来型のV1モジュールではなく、最新世代の「4.2inch V2(コントローラ: SSD1683)」であることが判明しました。
旧V1のコマンド体系(0x10 / 0x13 / 0x12)から、V2専用のコマンドシーケンス(0x24 RAM書き込み、0x22 + 0xF7 + 0x20 画面リフレッシュ)へとドライバを全面刷新しました。
さらにV2専用の波形LUT初期化シーケンスを適用したことで、クッキリとした漆黒の黒定着が得られるようになりました。
高信頼な自作ビットバンギングSPIエンジンの開発
ZephyrのNon-Secure環境下において、ハードウェアSPIM DMAドライバがリフレッシュ中にタイムアウトを起こす現象が見られました。
電子ペーパーはリフレッシュ動作中にBUSYピンが数秒間アサートされる特殊なペリフェラルです。
そこで、GPIOを直接高速パルス制御する高信頼な自作ビットバンギングSPIエンジンをC言語で実装しました。
ハードウェアDMAの複雑な制約や割り込み競合を完全に排除し、400x300フレームバッファ(15,000バイト)をノーエラーで100%確実に転送できるようになりました。
電源OFF-ONの謎と常時待機デバッグモードの確立
開発中に最も開発効率を落としていたのが、「一度画面を更新すると、マイコンをリセットしても二度と画面が書き換わらず、USBケーブルを抜き差しして電源を再投入しなければならない」という謎の現象でした。
調査の結果、画面更新シーケンスの最後に電子ペーパーを「ディープスリープ(Deep Sleep: コマンド 0x10)」に落としていたことが原因でした。
ディープスリープに入った電子ペーパーは内部クロックや入力バッファが完全にシャットダウンされるため、マイコン側だけをリセットしても電子ペーパーが眠ったままSPI信号を完全に無視していたのです。
そこで、以下の2つの対策を実施しました。
* 常時待機デバッグモードの実装:
ファームウェアのデバッグ中はディープスリープコマンドをバイパスし、電子ペーパーの受信待機状態を維持。
* 100ms強力リセットパルスの導入:
起動時にハードウェアリセットピン(RST)へ100msの長いLowパルスを印加し、電子ペーパーの内部ロジックを確実に初期化。
この改修により、USBの抜き差しを一切行うことなく、マイコンのリセットやファームウェアの再書き込みだけで、電源ONのまま画面が何度でも自動更新される理想的なデバッグ環境が完成しました!
スマート時刻表UIデザイン(400x300 高密度レイアウト)
電子ペーパーの400x300ピクセルという広大な表示領域を活かし、情報密度の高いスマート時刻表UIをデザインしました。


* 反転タイトルバー(最上部):
画面上部に黒背景・白抜きの反転タイトルバーを配置し、「SMART TRANSIT BOARD」のヘッダーをスタイリッシュに強調。
* 現在地とステータス表示:
GNSS測位による位置情報(名古屋市内)と、セルラー通信の接続状況(SoftBank LTE-M)を表示。
* 最寄り停留所の自動表示:
現在地から自動計算された最寄り停留所(「NAGOYA CASTLE / 名古屋城方面」)を大きく表示。
* 直近発車便のカウントダウン:
次にやってくる直近便の時刻(「NEXT: 08:57発」)を特大フォントで中央にレイアウト。
* 運行ダイヤ一覧テーブル:
以降に出発する後続の運行ダイヤ(10:07発、11:10発など)を一覧リストとして画面下部に配置。

自律動作の実証と電子ペーパーの真価
ファームウェアを実行したところ、マイコン単体での完全自律パイプラインが見事に完走しました。
ボード側の実行ログ(シリアル出力)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
================================================= nRF9151-DK E-Paper Smart Timetable Start ================================================= Setting up 4.2in E-Paper GPIOs (3.3V Mode)... Sending 100ms Deep Hardware Reset Pulse... Initializing Waveshare 4.2in V2 (SSD1683 Engine)... E-Paper Initialized Successfully! LTE Network Registered! (Roaming: SoftBank LTE-M) Connecting to api-challenge.odpt.org:443 via HTTPS (TLS)... Connected! Sending ODPT HTTP GET Request... Request sent (256 bytes). Receiving ODPT response: ODPT Data Reception Completed! Total bytes: 2276 Parsing Transit Schedule Data... Target Stop: NAGOYA CASTLE (20_01) Next Departure: 08:57 Upcoming: 10:07, 11:10 Rendering 400x300 Smart Timetable UI Framebuffer... Transferring Framebuffer to E-Paper (15,000 bytes)... Triggering Display Refresh (SSD1683 V2 Command 0x20)... Waiting for BUSY pin release... Display Refresh Completed Successfully! ================================================= |
電子ペーパーの画面が一瞬リフレッシュされ、名古屋市内の最新運行ダイヤが400x300の画面いっぱいに鮮明に浮かび上がりました。
消費電力ゼロW維持の圧倒的なメリット
そして、電子ペーパー最大の真価は「電源を切っても画面が永久に残る」という物理保持特性です。
表示が完了した後はUSBケーブルを抜いて電源を完全に落としても、画面上の時刻表は一切消えることなく、くっきりと表示され続けます。
液晶ディスプレイのように常時バックライトを点灯させる必要がないため、表示保持電力は文字通り0W(ゼロワット)です。
また、直射日光が照りつける屋外環境でも、紙の印刷物と全く同じように光を反射するため、スマートフォンの画面が暗くて見えなくなるような強い日差しの下でも圧倒的な視認性を発揮します。
ビルドと書き込み手順(West)
本プロジェクトは、nRF Connect SDK(Zephyr RTOS)環境を用いてビルドと書き込みを行います。
ファームウェアのビルド
PowerShell等でビルドスクリプトを実行、またはWestコマンドを実行します。
|
1 2 |
cd nrf9151_epaper_odpt west build -p always -b nrf9151dk/nrf9151/ns |
ボードへの書き込み
nRF Command Line Tools(nrfjprog)を用いて書き込みます。
|
1 |
nrfjprog --program build/merged.hex --sectorerase --reset --verify |
書き込み完了後、ボードが自律起動し、LTE-M接続からODPTデータ取得、電子ペーパーの更新までを全自動で実行します。
まとめ
Nordicの最新セルラーIoTボード「nRF9151-DK」と「Waveshare 4.2インチ電子ペーパー」を融合させ、完全自律型のスマート交通時刻表デバイスを構築しました。
* 完全自律パイプライン: スマホ不要でLTE-Mから公共交通オープンデータを直接取得し、電子ペーパーへ即時描画。
* 数々の技術課題を突破: 3.3VへのPMIC昇圧、SSD1683 V2コマンド改修、自作ビットバンギングSPI、D12空きピン対策を確立。
* 開発効率の劇的向上: 常時待機デバッグモードにより、USB抜き差し不要で電源ONのまま何度でも画面更新が可能に。
* 超低消費電力 & 高視認性: 電源OFFでも画面を永久保持(0W)。直射日光の屋外でも紙のように鮮明な視認性を実現。
実際の画面リフレッシュの様子や実機の動作は、冒頭でご紹介したYouTube動画でもノーカットで詳しく紹介していますので、ぜひご覧ください!
今後はGNSS位置情報による現在地追従や、超低消費電力スリープ(PSM)を組み合わせ、乾電池やソーラーパネルで何ヶ月も動き続ける本格的なスマートバス停看板へと発展させていく予定です。


コメント