スマートフォンやWi-Fiルーターを一切介さず、マイコン単体で現在地を測位し、公共交通の時刻表を取得するシステムを作ってみました。
Nordic Semiconductorの最新セルラーIoT開発キット「nRF9151-DK」を使用しています。
今回は、LTE-M通信と内蔵GNSS(みちびき・GPS)を組み合わせ、公共交通オープンデータセンター(ODPT)から名古屋市内のバス停情報や直近の発車時刻表を直接取得する自律型スマートデバイスのプロトタイプ構築記録を紹介します。
モデムへのTLS Root CA証明書書き込みによるセキュアな暗号化通信や、GTFS時刻表データからの最寄り便抽出アルゴリズムなど、実践的なセルラーIoT開発のノウハウを詳しく解説します。
【nRF9151-DK】スマホ不要!LTE-MとGNSS(みちびき)で公共交通オープンデータ(ODPT)を直接取得するマイコン開発
スマートフォンやWi-Fiルーターを一切介さず、マイコン単体で現在地を測位し、公共交通の時刻表を取得するシステムを作ってみました。
Nordic Semiconductorの最新セルラーIoT開発キット「nRF9151-DK」を使用しています。

今回は、LTE-M通信と内蔵GNSS(みちびき・GPS)を組み合わせ、公共交通オープンデータセンター(ODPT)から名古屋市内のバス停情報や直近の発車時刻表を直接取得する自律型スマートデバイスのプロトタイプ構築記録を紹介します。
モデムへのTLS Root CA証明書書き込みによるセキュアな暗号化通信や、GTFS時刻表データからの最寄り便抽出アルゴリズムなど、実践的なセルラーIoT開発のノウハウを詳しく解説します。

プロジェクト・動画のリンク先
YouTubeでも実機の動作や測位の様子を動画で詳しく解説しています
自律型スマート時刻表デバイスのシステム構想
外出先で「次のバスや電車がいつ来るか」を確認する際、通常はスマートフォンを取り出してアプリを開く必要があります。
しかし、マイコン自体が現在地を衛星から測位し、自前でセルラー通信を行えば、スマホ不要で常に最新の時刻表を表示する「スマート交通看板」や「携帯型キーホルダーデバイス」が実現できます。
システムアーキテクチャ
本システムは、以下のパイプラインで完全自律動作します。
|
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 26 27 28 29 30 |
┌────────────────────────────────────────────────────────┐ │ nRF9151-DK │ │ │ │ 【位置測位 (GNSS / みちびき・GPS)】 │ │ 現在地の座標をピンポイント特定 (名古屋市内) │ │ ↓ │ │ 【LTE-M セルラー通信 (HTTPS)】 │ │ SoftBank LTE-M 網 (IoT SIM) 経由で │ │ ODPT API サーバーへ直接セキュア接続 │ └────────┬───────────────────────────────────────────────┘ │ 暗号化 TLS 1.2 通信 ▼ ┌────────────────────────────────────────────────────────┐ │ 公共交通オープンデータセンター (ODPT API サーバー) │ │ │ │ ・現在地周辺のバス停・駅情報 │ │ ・直近の発車時刻表データ │ └────────┬───────────────────────────────────────────────┘ │ JSON レスポンス受信 ▼ ┌────────────────────────────────────────────────────────┐ │ 【データ解析 & 最寄り便抽出】 │ │ 現在時刻以降の直近便を自動フィルタリング │ │ ↓ (将来ステップ: SPI接続) │ │ 【電子ペーパー (E-Paper)】 │ │ 「次のバス: 〇〇分発 〇〇行き」を低消費電力描画 │ │ ↓ │ │ 【超低消費電力スリープ (PSM)】 │ │ 通信完了後は数µAのディープスリープへ移行 │ └────────────────────────────────────────────────────────┘ |

使用ハードウェアと通信環境
今回のプロトタイプで使用した機材と環境は以下の通りです。
| 項目 | 仕様・使用機器 | 役割・ポイント |
|---|---|---|
| 開発ボード | Nordic Semiconductor nRF9151-DK | ARM Cortex-M33 + LTE-M/NB-IoT/GNSS統合SiP |
| セルラー回線 | Onomondo IoT SIM (SoftBank LTE-M網) | 国内キャリア回線へ自動アタッチするグローバルSIM |
| 衛星測位 (GNSS) | 内蔵モデム GNSS(GPS + 準天頂衛星「みちびき」) | オンボードのパッチアンテナで高精度な屋外測位 |
| アンテナ構成 | LTEアンテナ + GNSSアクティブパッチアンテナ | キット同梱のアンテナを基板上に直接接続 |
| RTOS / SDK | nRF Connect SDK v3.2.4 (Zephyr RTOS) | セルラー通信・TLSオフロードを標準サポート |
| オープンデータ | 公共交通オープンデータセンター (ODPT API v4) | 名古屋市内の交通機関オープンデータを利用 |
屋外GNSS測位と「みちびき」による高精度位置特定
最初のステップとして、nRF9151の内蔵GNSSモジュールを用いて現在地の座標を特定します。

スマホ測位とマイコン単独GNSSの違い
一般的なスマートフォンは、周囲のWi-Fi電波やセルラー基地局情報、アシストGPS(A-GPS)を複合的に組み合わせて屋内外問わず瞬時に位置を出しています。
一方、マイコン単独のピュアなGNSSでは、宇宙を周回する人工衛星からの微弱な電波(C/N0比)を直接受信して積算する必要があります。
屋内の窓際では衛星の捕捉が難しいため、空が広く見渡せる屋外環境で測位テストを行いました。
日本の準天頂衛星「みちびき(QZSS)」を捕捉
屋外でアンテナを上空に向けてスキャンを開始したところ、米国のGPS衛星群に加え、日本の天頂付近に位置する準天頂衛星「みちびき(QZSS 194号機 / 197号機)」を含む合計12基以上の衛星電波を同時にロックできました。
電波強度も30〜35 dB-Hzを超える良好な受信状態となり、開始から短時間で3次元測位(Fix)に成功しました。
水平精度(誤差)はわずか2.6メートルという極めて高い精度を達成し、名古屋市内の現在地をピンポイントで特定できています。

現在地座標から最寄り停留所と発車時刻を抽出
高精度な現在地が特定できたため、公共交通オープンデータ(GTFSデータ)と照合して最寄りの交通機関を探します。
静的GTFS時刻表の走査アルゴリズム
名古屋市内を運行する交通機関(バス等)の静的GTFSデータから、停留所の緯度経度一覧を走査します。
現在地から各停留所までの直線距離を計算し、最も近い停留所を自動的にランク付けして抽出します。
例えば、名古屋市内の現在地から走査した結果、最も近い主要停留所として「名古屋城停留所」などが即座にピックアップされました。
現在時刻以降の直近ダイヤの自動フィルタリング
停留所が特定されたら、運行ダイヤ(stop_times.txt / trips.txt)から当日の運行カレンダーを照合します。
現在時刻の直後に出発する便を自動フィルタリングし、次に出発するバスの発車時刻(例: 08時57分発、10時07分発など)と行先系統を瞬時に割り出すロジックを確立しました。
nRF9151単体でのODPT API直接HTTPS通信
現在地と停留所の特定ロジックが完成したところで、いよいよマイコン単体からインターネット上のODPTサーバー(api-challenge.odpt.org)へ直接アクセスします。
Wi-FiやPCを一切使わず、SoftBank LTE-M網を通じてダイレクトにセキュア通信を行います。
モデムへのTLS Root CA証明書書き込み
ODPT APIはHTTPS(ポート443)による暗号化接続が必須です。
nRF9151では、CPU側で暗号化処理を行うのではなく、内蔵モデムのセキュア領域にRoot CA証明書を事前に書き込み、ハードウェアでTLSハンドシェイクを処理する「TLSハードウェアオフロード」を採用しました。
Nordicの modem_key_mgmt APIを用いて、ODPTサーバーの認証局証明書(Root CA)をモデム内のセキュリティタグ(Sec Tag)へ登録します。
|
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 26 27 |
/* モデムへのRoot CA証明書登録処理 */ static int cert_provision(void) { int err; bool exists; /* 既存の証明書が存在する場合は一旦削除 */ err = modem_key_mgmt_exists(TLS_SEC_TAG, MODEM_KEY_MGMT_CRED_TYPE_CA_CHAIN, &exists); if (exists) { modem_key_mgmt_delete(TLS_SEC_TAG, MODEM_KEY_MGMT_CRED_TYPE_CA_CHAIN); } /* 内蔵モデムのセキュアストレージへRoot CAを書き込み */ err = modem_key_mgmt_write(TLS_SEC_TAG, MODEM_KEY_MGMT_CRED_TYPE_CA_CHAIN, cert, sizeof(cert)); if (err) { printk("Failed to write Root CA: %d ", err); return err; } printk("Root CA provisioned successfully. "); return 0; } |
セキュアソケットによるHTTP GETリクエスト
LTE-M網へアタッチ後、DNS名前解決でサーバーのIPアドレスを取得し、TLSソケット(IPPROTO_TLS_1_2)をオープンします。
公共交通オープンデータセンターで取得したアクセストークンをヘッダーに含め、HTTP GETリクエストを送信します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* HTTPSリクエストヘッダーの構築例 */ #define HTTPS_PORT "443" #define TOKEN "YOUR_ODPT_ACCESS_TOKEN" #define HTTP_REQ "GET /api/v4/odpt:Railway?odpt:operator=odpt.Operator:JR-Central&acl:consumerKey=" TOKEN " HTTP/1.1 " "Host: " CONFIG_HTTPS_HOSTNAME " " "User-Agent: nRF9151-DK " "Accept: application/json " "Connection: close " |
通信実証の成功とシリアルログ
nRF9151-DK上でプログラムを実行したところ、PCを一切介さず、ボード自律動作でSoftBank LTE-M網を経由してODPTサーバーからJSONデータの受信に成功しました。
ボード側の実行ログ(シリアル出力)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
========================================= nRF9151-DK ODPT API HTTPS Client Start ========================================= LTE Network Registered! (Roaming: SoftBank LTE-M) Cellular connection established! Looking up IP for api-challenge.odpt.org... Connecting to api-challenge.odpt.org:443 via HTTPS (TLS)... Connected! Sending ODPT HTTP GET Request... Request sent (256 bytes). Receiving ODPT response: -------------------------------------------------- HTTP/1.1 200 OK Date: Fri, 23 Oct 2026 05:20:00 GMT Content-Type: application/json;charset=UTF-8 Connection: close [JSON Payload Data...] -------------------------------------------------- ODPT Data Reception Completed! Total bytes: 2276 ========================================= |
LTE-Mの省電力回線を経由し、2,276バイトの最新交通データをエラーなく完璧に受信できました。
マイコン単体で世界標準のWeb APIからデータを取得できる強力な基盤が整いました。
今後の展望(電子ペーパー表示と超低消費電力運用)
現在はシリアルコンソールでデータを確認していますが、次のステップとして電子ペーパー(E-Paper)ディスプレイの接続を進めています。
* SPI接続の電子ペーパー搭載:
Waveshare等の省電力E-PaperモジュールをnRF9151-DKのArduinoピンヘッダへ接続し、「次のバス:〇〇分発」を画面に常時表示します。
* PSM(Power Saving Mode)による超長寿命化:
通信と画面更新が完了したら、モデムとマイコンをわずか数µAのディープスリープ(PSM)に移行させます。
ボタンを押した時や一定時間ごとに起床して情報更新を行うことで、小型バッテリーでも数ヶ月以上稼働する自律型時刻表が完成します。
まとめ
Nordicの最新セルラーIoTボード「nRF9151-DK」を用い、スマホを使わずにGNSS(みちびき)で現在地を測位し、LTE-M網から公共交通オープンデータ(ODPT)を直接取得する自律型スマート時刻表システムの検証に成功しました。
* スマホ不要の自律動作: マイコン単体でセルラー通信(LTE-M)と衛星測位(GPS+みちびき)を完結。
* 高精度な現在地特定: 名古屋市内において誤差2.6mのピンポイントFixを達成。
* GTFS連携アルゴリズム: 現在地から最寄り停留所と直近発車ダイヤを自動抽出。
* 強固なセキュリティ: モデムのTLSハードウェアオフロードにより、HTTPS暗号化通信を低負荷で実現。
実際の動作の様子やアンテナの解説は、冒頭でも紹介したYouTube動画にて動画付きで分かりやすく解説していますので、ぜひご覧ください!
今後も電子ペーパーとの連携など、実用的なスマート交通看板の製作を進めていきます。


コメント