
水田ファームウェア
これは、Paddy、Power Administry Daemonのファームウェアコンポーネントです。
Arduino C ++を使用し、状態マシンを中心に設計されています。サポートされているチップで直接点滅します。このプロジェクトに使用されるArduinoタイプは、IoT Nano 33です。
このコードの仕事は、Wi-Fiを介してPaddy MQTTブローカー、またはBluetooth Low Energyを介してPaddy Appを介してインターフェイスし、セットアップとエラー処理を行うことです。コードは、実行するハードウェアも制御する必要があります。
- ロードデバイスのオン/オフ
- 周期的な統計送信を伴う負荷デバイスの電力測定。
ステートマシン図

概要
この状態マシンのコードは、ファームウェアに一度インスタンス化され、プログラムのライフサイクル全体で再利用されるシングルトンコンポーネントで編成されています。これらのモジュールは次のとおりです。
- BLE:デーモンと中央のデバイス間の直接通信を処理します。
- 制御:当時受信したコマンドに応じて、ロードデバイスをオンまたはオフにします。
- MQTT:ブローカーとのすべての通信を処理し、デリゲートはメッセージ取得時に他のコンポーネントまたは州に作業します。
- 電力:電力測定電流トランスを制御および校正します。定期的な測定値を作成します。
- ストレージ:選択したArduino IoT Nano 33が実際のEEPROMを持っていないため、EEPROMチップをエミュレートします。必要な資格情報を保存します。
- Wi-Fi: Wi-Fi接続と信号強度測定を処理します。
各州に事前定義された義務があるため、フローの各ピースが何をするかを理解するのは簡単です。
- ブート状態:これは、マイクロコントローラーが起動するとすぐに入るという初期状態です。ここでは、ハードウェアチェックが実行されます。特に、Wi-FiモジュールとBluetooth Low Energyモジュールです。これらのチェックが成功し、デーモンが前述のコンポーネントを初期化できる場合、INIT状態に移動します。それ以外の場合は、壊れて移動し、そこで停止し、LEDを点滅させて、ユーザーにハードウェアエラーを示します。
- init状態: init状態は、デーモンが入る最初の中間状態です。その目的は、まず数回サイクリングして電源測定モジュールを較正し、デバイスの読み取り値をライン電流に慣れさせることにより、適切な機能のためにデバイスを準備することです。その後、デーモンにエミュレートされたEEPROMに保存されている資格情報が含まれているかどうかが確認されます。デーモンは、前者が真である場合、上記の資格情報で接続状態に移動します。そうでなければ、セットアップフェーズが入力されます。
- セットアップ状態:ブロッキング動作により、ユーザーアクションが完了するまでこの状態は進行しません。デーモンにはここには資格情報が含まれていないため、Wi-Fiまたはブローカーに接続する方法がわかりません。これは、この段階で、デーモンはデータ転送にWi-Fiを使用できず、直接的なアプローチが必要であることを意味します。 BLEは、このシナリオに最適です。特性を介して書くことと読み取りは、Paddyアプリから簡単に達成できます。したがって、デバイスのBLE機能は、これらの特性を放出するために使用されます。
- シリアル(読み取り専用):デバイスのシリアル番号を発する特性。
- SSID(書き込み専用): Wi-Fiネットワークのサービスセット識別子。
- パスワード(書き込み専用): Wi-Fiアクセスポイントのパスワード。
- Enterpriseユーザー名(書き込み専用): Wi-Fiがユーザーのユーザー名であるEAPやPEAPなどのエンタープライズ認証技術を必要とする場合。
- エンタープライズパスワード(書き込み専用): Wi-FiがユーザーのパスワードであるEAPやPEAPなどのエンタープライズ認証技術を必要とする場合。
- JWT(書き込み専用):デーモンがブローカーに接続するために使用されるJSON Webトークン。
- リセット(書き込み専用):この特性が書き込まれると、デーモンは資格情報をリセットします。
続行するには、JWTおよびクレデンシャルの特性を、Paddyアプリを介してユーザーのモバイルデバイスによって書き込む必要があります。簡単にするために、ファームウェアはSSID特性への書き込みのみを完了したとしてこの段階を検出することに注意する必要があります。そのため、SSIDを除く任意の順序で執筆が発生する可能性があります。SSIDは、予測可能な動作を達成するために持続するために書かれている必要があります。承認モードを識別するために、書かれた特性の異なる組み合わせは、Wi-Fi認証に関して3つの構成をもたらします: Insecure (SSIDのみ)、 Secure (SSID + Password)、 Enterprise (SSID + Enterprise Username + Enterprise Password)。
- 接続状態:この状態は、デーモンがバックエンドブローカーに接続している間にのみ実行されるため、比較的単純です。接続の成功では、州をオンラインのものに引き渡し、失敗を後退させます。
- オンライン状態:デーモンの「動作」状態、これは完全に機能するパッドを表します。ここでは、MQTTメッセージを受信して送信することにより、ブローカーと対話できます。デーモンには、この状態にある間、いくつかの義務があります。
- MQTTメッセージ、つまりオン、オフ、リセット、および回転トピックを聞いてください。これらのメッセージの1つが受信されると、適切なアクションを適切に実行します。
- ブローカーにキープアライブpingメッセージを送信します。これらのメッセージは純粋に統計的な目的であり、実際に接続を生かし続ける必要はありません。それらは、アプリからデーモンのステータスを追跡するためだけに使用されます。これらのメッセージのペイロードでは、Wi-Fi信号強度が中継されます。
- 定期的に電力使用量データをブローカーに中継します。
- デバイスがまだブローカーに接続されているかどうかを確認します。デバイスが接続されなくなった場合は、バックオフに移動します。
- バックオフ状態:この状態は、デーモンが接続を再試行する前のパディングとして機能しますが、ユーザーが直接BLE接続を介してデーモンをリセットするウィンドウでもあります。たとえば、デーモンが別のWi-Fi接続を備えた場所から移動する場合、すでに資格情報がありますが、それらは間違っています。そのため、デーモンがバックオフ状態に到達すると、ユーザーがBLEを介して直接リセットできる60秒のウィンドウが開きます。ただし、60秒のカウンターがなくなった場合、デーモンは接続状態に移動することにより、再びサーバーに接続して再び接続します。
回路図
