7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stackで作る地震速報モニター

Last updated at Posted at 2025-12-14

はじめに

Symbolブロックチェーンに記録されている地震情報をM5Stackでリアルタイムに監視・表示・通知するシステムを作成しました。

スマートフォンアプリの通知を待つのではなく、自分用の専用デバイスで地震情報を瞬時にキャッチできる仕組みです。

動作イメージ

Videotogif (2).gif

ソースコード

使用機材

ハードウェア

ソフトウェア・サービス

仕組み:データフロー

┌─────────────────────┐
│ 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.iniconfig.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

実装ハイライト

画面レイアウト

1296.jpg

リアルタイム受信の実装

Videotogif (1).gif

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の拡張性を融合させることで、自分たちで防災システムを構築できる時代を実感できます。

ぜひフォークして、自分用にカスタマイズしてみてください。フィードバックやプルリクエストはいつでも歓迎です!


リソース

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?