はじめに
Symbolブロックチェーンに記録されている地震情報をM5Stackでリアルタイムに監視・表示・通知するシステムを作成しました。
スマートフォンアプリの通知を待つのではなく、自分用の専用デバイスで地震情報を瞬時にキャッチできる仕組みです。
動作イメージ
ソースコード
使用機材
ハードウェア
- M5Stack Core2 for AWS - ESP32搭載の統合開発プラットフォーム
- SDカード - WiFi/Symbol設定を保存するのに使用
ソフトウェア・サービス
- PlatformIO - ファームウェアビルド・デプロイメント
- Symbol Blockchain
- P2P Quake API - 地震データのフォーマット(一部)
仕組み:データフロー
┌─────────────────────┐
│ Symbol Blockchain │ (トランザクション呼び出し)
└──────┬──────────────┘
│ (WebSocket配信)
▼
┌──────────────────┐
│ M5Stack Core2 │ (リアルタイム受信・表示)
└──────────────────┘
│
├─► 画面表示 (震度別の色分け)
├─► ビープ音通知 (震度に応じた回数)
└─► 画面点滅 (震度に応じた色)
特徴:
- 分散性: Symbolブロックチェーンを通じた改ざん耐性のある配信
- リアルタイム性: WebSocketによる即座の通知
- 低コスト: 既存のOSSプロジェクトを活用
セットアップ手順
1. 環境準備
# PlatformIOのインストール
pip install platformio
# プロジェクトのクローン
git clone https://github.com/ishidad2/Earthquake-Monitor-Sample.git
cd Earthquake-Monitor-Sample
2. 設定ファイルの作成
SDカードに以下のwifi.iniとconfig.iniファイルを作成してM5Stackへ挿してください。
WiFi設定 (wifi.ini)
YourWiFiSSID
YourWiFiPassword
Config設定 (config.ini)
timezone=Asia/Tokyo
# Symbol blockchain configuration
network=testnet
node=https://sym-test-03.opening-line.jp:3001
address=TBVL...(地震情報の記載されているSymbolアドレス)
pubKey=...(署名公開鍵)
タイムゾーン例:
-
Asia/Tokyo(UTC+9) - 日本 -
America/New_York(UTC-5) - 米国東部 -
Europe/London(UTC+0) - イギリス
3. ビルド・アップロード
# ビルド
pio run -e m5stack-core-esp32
# M5Stack接続後、アップロード
pio run -e m5stack-core-esp32 -t upload
# シリアルモニター
pio device monitor -b 115200
実装ハイライト
画面レイアウト
リアルタイム受信の実装
websocket.cppでSymbol ブロックチェーンのWebSocket APIを監視:
// 新規トランザクション受信時のコールバック
onmessage: function(msg) {
// 1. 重複検出(最新10件のハッシュをチェック)
// 2. 署名者検証(設定された公開鍵から)
// 3. JSONパース(16進数デコード)
// 4. データバッファに追加
// 5. 通知キューに登録
}
通知機能
// 震度に応じた多段階通知
if (intensity >= 5.5) {
// 3回ビープ + 赤色点滅 (1.5秒)
} else if (intensity >= 3) {
// 2回ビープ + 黄色点滅
} else {
// 1回ビープ + 緑色点滅
}
タッチすることで通知をキャンセル可能です。
データ管理とバリデーション
受信データの検証フロー:
16進数メッセージ
↓
HEXデコード
↓
JSONパース
↓
必須フィールド確認
(datetime, maxIntensity, hypocenterName)
↓
型チェック(浮動小数点数、整数範囲)
↓
✓ EarthquakeData構造体に追加
実装のポイント
コード構成
| ファイル | 役割 |
|---|---|
main.cpp |
エントリーポイント、画面更新ループ |
network.cpp |
WiFi接続、NTP同期、REST API |
websocket.cpp |
Symbol WebSocket接続、メッセージ監視 |
earthquake.cpp |
JSONパース、データバリデーション |
display.cpp |
画面描画、UI管理 |
notification.cpp |
ビープ音、点滅制御 |
使用ライブラリ
m5stack/M5Unified@^0.2.11 # M5Stack統合ライブラリ
bblanchon/ArduinoJson@^7.0.0 # JSON処理
gilmaimon/ArduinoWebsockets@0.5.4 # WebSocket通信
おわりに
このプロジェクトは、IoTと地震防災を組み合わせた実践例です。Symbolブロックチェーンの可用性、P2P Quakeのコミュニティデータ、M5Stackの拡張性を融合させることで、自分たちで防災システムを構築できる時代を実感できます。
ぜひフォークして、自分用にカスタマイズしてみてください。フィードバックやプルリクエストはいつでも歓迎です!
リソース
- プロジェクトリポジトリ: https://github.com/ishidad2/Earthquake-Monitor-Sample
- P2P Quake: https://www.p2pquake.net/
- P2P Quake JSON API v2: https://www.p2pquake.net/develop/json_api_v2/
- Symbol Documentation: https://docs.symbol.dev/
- M5Stack Documentation: https://docs.m5stack.com/
- PlatformIO Documentation: https://docs.platformio.org/


