Nordic Semiconductorの最新セルラーIoTボード「nRF9151-DK」と、4.2インチ電子ペーパー(Waveshare 400x300, V2)を組み合わせたスマート交通プロジェクト。
今回は、基板上の4つの物理ボタンを押すだけで「地下鉄直近便」「24時間全時刻表」「最寄りバス停」「リアルタイム運行情報」が瞬時に切り替わる、完全自律型の「インタラクティブ・スマート交通サイネージ」が完成しました!
さらに、パケット通信を行わずにLTE基地局から日本標準時(JST)を自動取得する「NITZ同期(通信量0バイト)」や、自作の日本語ビットマップフォントエンジン(470文字超収録)、新旧配線の衝突を防ぐ「ユニバーサル・デュアル駆動」など、実用性を極限まで高めた技術ノウハウを詳しく解説します。
【nRF9151-DK】4.2インチ電子ペーパーで自律スマート交通サイネージ完成!4大モードをボタンでワンタッチ切替
Nordic Semiconductorの最新セルラーIoTボード「nRF9151-DK」と、4.2インチ電子ペーパー(Waveshare 400x300, V2)を組み合わせたスマート交通プロジェクト。

今回は、基板上の4つの物理ボタンを押すだけで「地下鉄直近便」「24時間全時刻表」「最寄りバス停」「リアルタイム運行情報」が瞬時に切り替わる、完全自律型の「インタラクティブ・スマート交通サイネージ」が完成しました!

さらに、パケット通信を行わずにLTE基地局から日本標準時(JST)を自動取得する「NITZ同期(通信量0バイト)」や、自作の日本語ビットマップフォントエンジン(470文字超収録)、新旧配線の衝突を防ぐ「ユニバーサル・デュアル駆動」など、実用性を極限まで高めた技術ノウハウを詳しく解説します。
プロジェクト・動画のリンク先
YouTubeでも実機の4大モード切替や動作の様子を詳しく解説しています
本編解説動画
実機ショート実演動画
自律スマート交通サイネージの4大モード仕様
基板上の4つの押しボタン(SW1〜SW4)を押すだけで、電子ペーパーの400x300高密度画面が即座に切り替わります。
ボタン割り当てと表示画面一覧表
| 操作ボタン | 物理ピン | 画面タイトル | 表示内容・機能 |
|---|---|---|---|
| Button 1 (SW1) | P0.08 (D8) | 名古屋 スマート交通 (ODPT) | 地下鉄最寄り駅 【先発】発車時刻(あと◯分)・【次発】〜【4発】直近運行カード |
| Button 2 (SW2) | P0.09 (D9) | 地下鉄 最寄り駅 [1日全時刻表] | 平日ダイヤ 05時〜23時 時×分 2列グリッド時刻表(時間バッジ表示) |
| Button 3 (SW3) | P0.18 | 名古屋SRT 路面公共交通 (ODPT) | 最寄りSRTバス停留所 直近発車便カード(【先発】〜【4発】・あと◯分) |
| Button 4 (SW4) | P0.19 | 名古屋SRT 運行情報モニタ (ODPT) | 最寄りSRTのリアルタイム運行状況モニタ(「正常運行中」「全車両順調」) |
電源投入時は前回の画面をそのまま維持する「画面保持ブート(待機電力0mW)」を採用しており、ボタンが押された時だけ画面を更新します。
LTE基地局標準時刻(NITZ)同期と動的ダイヤ連動
本システムの大きな特長が、セルラーパケット通信を一切消費しない「NITZ(Network Identity and Time Zone)同期」の実装です。

通信パケット消費ゼロで秒単位のJST自動同期
SoftBank LTE-M基地局からブロードキャストされている3GPP規格の標準時刻情報(%XTIME)を受信し、モデム内蔵の時計(RTC)を日本標準時(JST)へ秒単位で自動補正します。
通常のデータ通信パケットを一切消費しないため、通信量は文字通り0バイトです。
万一、基地局からの報知が届かない場合でも、超軽量な1パケットNTP(約90バイト)へ安全にフォールバックする二重の安全策を講じています。
現在時刻から「あと◯分で発車」を動的に自動算出
固定された時刻表を表示するのではなく、NITZ同期した現在の「時・分」を基準に、内蔵された1日分の運行ダイヤを高速スキャンします。
現在時刻の直後に出発する便を瞬時に特定し、「【先発】 08:57発(あと 4分)」「【次発】 10:07発」といった動的なカウントダウン表示を完全オフラインで算出・描画します。
終電後の時間帯には、自動的に「翌朝の始発ダイヤ」へと案内が切り替わります。
ノンブロッキングな独立バックグラウンドスレッド
NITZ同期処理は独立したバックグラウンドスレッド(nitz_thread)で起動3秒後に非同期実行されます。
そのため、起動直後の画面保持やボタン操作を一切待たせることなく、電源投入から瞬時に快適なボタンレスポンスを提供します。
高精細な自作 日本語ビットマップフォントエンジン
400x300ピクセルの電子ペーパー上で視認性の高い日本語表示を行うため、軽量なビットマップフォントエンジンを自作しました。
独自開発の日本語グリフ内蔵(Flash消費1.5%未満)
ひらがな、カタカナ、全角記号(【】・●など)、そして駅名やバス停名・運行情報ステータスに必要な全漢字を含む470文字以上のグリフを独自収録しました。
マイコンの内蔵フラッシュメモリ消費量はわずか1.5%未満に抑えられており、リソース制約の厳しいマイコンでも余裕で共存可能です。
UTF-8マルチバイトデコーダと高速二分探索
UTF-8文字列(1〜3バイト)をリアルタイムにデコードし、Unicodeコードポイント順にソートされたインデックステーブルから二分探索で瞬時にビットマップデータを展開します。
通常サイズ(16x16ピクセル)と、見出し用の美しい倍角サイズ(32x32ピクセル)をクッキリと描画できます。
開発時に直面した技術難関と解決アプローチ
物理ボタンによるインタラクティブな画面更新と電子ペーパーの安定動作を両立させる過程で、いくつかの深刻なハードウェアトラブルが発生しました。
白黒反転と第2RAM(0x26)初期化の罠
画面更新時に白黒が反転してしまったり、前画面の残像(ゴースト)が重なって表示される現象に直面しました。
コントローラの仕様を精査したところ、SSD1683には第1RAM(コマンド 0x24: 黒データ)だけでなく、第2RAM(コマンド 0x26: 赤または前フレーム差分データ)が存在することが判明しました。
描画前に第2RAMも適切に 0xFF(白)で初期化しないと、コントローラ内部で前画面との差分合成が行われて反転やゴーストが発生してしまうのです。
両方のRAMをクリーンに初期化するシーケンスを確立したことで、毎回スキッとした純白の背景と漆黒の黒文字が得られるようになりました。
ボタン押下で強制フリーズ!電気的ショートの発見
最も深刻だったのが、「ボタンを押した瞬間にマイコンが突然リセット・フリーズする」という怪奇現象でした。
回路図とボードパターンを徹底的に追跡したところ、nRF9151-DKの基板内部で、物理ボタンButton 1/2(P0.08/P0.09)がArduinoヘッダのD8/D9ピンと物理的に直結されていることが発覚しました。
電子ペーパーのRST/DC信号としてD8/D9を出力駆動(High/Low)している状態でオンボードボタンを押すと、電源ラインとGNDが直結ショートして過電流保護が働き、マイコンが強制停止していたのです。
新旧配線両対応!「ユニバーサル・デュアル駆動」の完成
このショート問題を根本解決するため、電子ペーパーのRST/DCピンを空いているD6/D5ピンへ移設しました。
しかし、以前の配線のままでも動くよう、ソフトウェア側で「ユニバーサル・デュアル駆動」を実装しました。
ファームウェアが RST (D6 & D8)、DC (D5 & D9) を同時にパルス駆動し、描画完了後は即座に出力を停止してプルアップ付きのボタン入力モードへ開放します。
この工夫により、新旧どちらのピンヘッダ配線であっても配線替え不要で、完全ショートフリーで100%安全に動作する強靭な互換性を達成しました!
プルアップ反転の罠と25ms直接ハードウェアポーリング
割り込みハンドラを用いたボタン検知では、画面描画後のGPIO再設定時に割り込みベクタが解除されてボタンが効かなくなるリスクがありました。
そこで、メインループからハードウェアレジスタ(GPIO IN)を直接読み取る25ms周期の直接ポーリング方式へ刷新しました。
立ち下がりエッジ判定とチャタリング除去を確実に行うことで、ボタンの取りこぼしが完全ゼロの快適な操作性を実現しました。
まとめ
Nordicの最新セルラーIoTボード「nRF9151-DK」と4.2インチ電子ペーパーを融合させ、ボタン1つで4大交通モードが瞬時に切り替わる完全自律型スマートサイネージが完成しました。
* ワンタッチ4大モード: 直近便カード、24時間全時刻表、バス停カード、遅延モニタを物理ボタンで即座に切り替え。
* 通信量ゼロのNITZ同期: LTE基地局標準時刻から「あと◯分で発車」を完全オフラインで動的算出。
* 自作日本語フォントエンジン: 470文字超の漢字・かなを内蔵し、Flash消費わずか1.5%で高精細レンダリング。
* ユニバーサル・デュアル駆動: 基板内部の直結ショートを克服し、新旧配線両対応の衝突フリー駆動を確立。
* 待機電力ゼロ: 電子ペーパーの画面保持特性により、待機時の消費電力は0mW。
実際の滑らかなボタン切り替えや美しい画面表示の様子は、冒頭のYouTube動画でもノーカットで紹介していますので、ぜひご覧ください!


コメント