MKR FOX1200ウェザーモニター
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> ![]() |
| |||
![]() |
| |||
![]() |
|
このプロジェクトについて
注:このチュートリアルは古くなっている可能性があります。どうぞ ここ 最新バージョンの場合。
このプロジェクトは、 MKR FOX 1200 を回す方法を示しています 一連のI2Cセンサーをシンプルなバッテリー駆動の気象観測所に組み込みます。
使用します:
- オンボード温度センサー(低精度、±1°C)
- 湿度レベルを取得するためのHTU21DI2Cセンサー
- 大気圧と正確な温度を取得するためのBoschBMP280
- 光度を取得するためのTSL2561光センサー
ハードウェアのセットアップ
このプロジェクトのハードウェア接続は非常に単純です。すべてのセンサーはI2Cインターフェースを使用し、3.3Vで動作します。
MKR FOX 1200からの4本のワイヤが必要です。GND、3.3V、ピン11のSDA、ピン12のSCLです。それぞれが特定のI2Cアドレスを持っているため、同じ4つの接続を3つのセンサーと並列に共有できます。関連するライブラリと関数が、それぞれを区別します。
プロジェクト全体は、直列に接続されて3Vを生成し、ボードのネジ接続端子台に配線された2本のAAまたはAAAアルカリ電池で駆動できます。
Sigfoxメッセージ
Sigfoxネットワークは1日あたり最大140のメッセージを送信できるため、読み取り値を最適化し、コンパクトなバイナリ形式でデータを送信します。
送信できるメッセージの最大サイズは12バイトであるため、データのパッキングは重要です。フロートは4バイトを占めるため、読み取り値をいくつかの小さな表現にパックする必要があります。
float形式は非常に広く(3.402823e + 38(!)までの数値を表すことができます)、データスペース全体は必要ありません。次に、(ステーションを展開する場所に基づいて)安全な制限を決定し、バックエンドで元の表現を復元できます。
クラウドサービスの構成
2つのクラウドサービスを使用します:
- Sigfoxバックエンド
- シングスピーク
FirstConfigurationの例で提供されているPACとIDを使用してSigfoxバックエンドにボードを登録します(前のプロジェクトですでに登録している場合はスキップできます)。
両方とも、相互に通信し、正しい形式でデータを解釈するように構成する必要があります。両方に登録して、いくつかのチャネルを作成します Thingspeakで。構成は下の画像で報告されています。
最初に構成するチャネルは、生データ( readChannelID
)を受信するチャネルになります。 )、2番目のデータは再スケーリングされたデータ( writeChannelID
)を収集します 。

Arduino CreateEditorを使用してスケッチをアップロードする時が来ました。デフォルトのスケッチでは、フィールドに展開する前に、すべてのインフラストラクチャを広範囲にテストできます。
宣言することを忘れないでください:
oneshot =false
すべてのバックエンドインフラストラクチャのセットアップが正しいと確信している場合。スケッチはシリアルポートを待機しているため、ここでは起動しません。代わりに、SigFoxバックエンドを開き、コールバックを構成します。
デバイスタイプをクリックします -> リスト ->ボードを右クリックし、編集をクリックします。
<図>
コールバックをクリックします 左側のメニュー:
<図>
次のようなウィンドウが表示されます:
新規をクリックします ウィンドウの右上にあるボタン:
<図>
カスタムコールバック:を選択します
<図>
<図>

関連する構成を以下に報告します。コールバックが次のように設定されていることを確認してください:
- タイプ:
DATA / UPLINK
- チャネル:
URL
- Httpメソッド:
GET
カスタムペイロードとして、次のように設定します:
status ::uint:8 temp1 ::int:16:little-endian temp2 ::int:16:little-endian press ::uint:16:little-endian hum ::uint:16:little -エンディアンlight ::uint:16:little-エンディアンlastMsg ::uint:8
これは、スケッチに詰め込んだ構造を表しています。各フィールドに変数を割り当てているので、HTTPコールバックでそれらを参照できます。
URLパターンとして、次のように設定します:
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData#light}&field6 ={customData#status}&field7 ={customData#lastMsg}
構成すると、ウィンドウは次のようになります。
<図>
APIキー api_key
を変更することを忘れないでください Thingspeakが Write API Key
として提供しているものを使用 Channel1
の場合 。

保存して終了。これで、シリアルポートを開いて、最初に送信されるメッセージを確認できます。やったー!
Rawからグラフィックスへ
構成したセットアップは、データをThingspeakバックエンドにルーティングしますが、それらは未加工の形式のままです。それらを再変換するには、このスニペットでThingspeak分析ツールを使用しましょう
%TODO- []をチャネルIDに置き換えて、データを読み取ります。readChannelID=[]; %TODO-以下の ''の間に読み取りAPIキーを入力します。readAPIKey='T6UK7XO6A4H2AGT7'; %TODO- []をチャネルIDに置き換えて、データを書き込みます。writeChannelID=[]; %TODO-以下の ''の間に書き込みAPIキーを入力します。writeAPIKey='XU4TGY261P6B5USN'; %%データの読み取り%% data =thingsSpeakRead(readChannelID、 'ReadKey'、readAPIKey、 'OutputFormat'、 'table');分析されたデータ=データ; %%データの分析%% INT16_t_MAX =32767; UINT16_t_MAX =65536; analysisData。( 'Temperature1')=data。( 'Temperature1')/ INT16_t_MAX * 120; analysisData。( 'Temperature2')=data。( 'Temperature2')/ INT16_t_MAX * 120; analysisData。( 'Pressure')=data。( 'Pressure')/ UINT16_t_MAX * 200000; analysisData。( 'Light')=data。( 'Light')/ UINT16_t_MAX * 100000; analysisData。( 'Humidity')=data。( 'Humidity')/ UINT16_t_MAX * 110; %%書き込みデータ%% thingsSpeakWrite(writeChannelID、analyzedData、 'WriteKey'、writeAPIKey); %%アクションのスケジュール:反応-> 10分ごと
チャネルID を置き換える 私たち自身で、最終的に生データを実際の値に戻すことができます。 React を使用して、分析アクションを10分ごとにスケジュールすることを忘れないでください または、実行されることはありません!
<図>
<図>

<図>

ついに素晴らしいグラフができました。
<図>
<図>

コード
WeatherMonitor
製造プロセス