.NET nanoFrameworkでSCD40センサーを使うためのサンプルプログラムです。
ハードウェア
・M5Core2
・UNIT Co2
ソフトウェア
・VisualStudio 2022
・M5Core2用FW 1.8.1.15
追加NuGetパッケージ
・nanoFramework.M5Core2
プログラム解説
using System.Device.I2c;
using System.Buffers.Binary;
using nanoFramework.M5Stack;
using Console = nanoFramework.M5Stack.Console;
追加したusingディレクティブです。
//SCD40
device = M5Core2.GetGrove(0x62)
M5Core2パッケージを追加しておくと簡単にI2Cが利用できます。
//デバイスのスタート
device.Write(start);
Thread.Sleep(1000);
//データ取得開始
device.Write(read);
Thread.Sleep(50);
SCD40はスタートコマンド(0x21,0xb1)を送信して、次にリードコマンド(0xec,0x05)を送信することで計測値を取得できるようになります。
Timer timer = new Timer(getData, null, 0, 30000); //30秒タイマー
タイマーを使って30秒ごとに測定値を取得します。
SpanByte buffer = new byte[9];
device.Read(buffer);
var co2 = BinaryPrimitives.ReadInt16BigEndian(buffer.Slice(0, 3));
var tmp = -45 + 175 * (float)(BinaryPrimitives.ReadUInt16BigEndian(buffer.Slice(3, 3))) / 65536;
var hum = 100 * (float)(BinaryPrimitives.ReadUInt16BigEndian(buffer.Slice(6, 3))) / 65536;
測定値は先頭から9バイトに格納されているので、バッファーを9バイトを用意します。
9バイトの内訳は「Co2 Data 2byte + CRC 1byte」、「Tempreture Data 2byte + CRC 1byte」、「Humidity Data 2byte + CRC 1byte」となっています。
後は3バイト毎に切り分けをして先頭2バイトを計算すれば各測定値を得ることができます。
ソースコードはこちらにあります。