LoginSignup
3
3

More than 1 year has passed since last update.

.NET nanoFrameworkでマイコンプログラミング(Co2センサー SCD40)

Posted at

.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バイトを計算すれば各測定値を得ることができます。

ソースコードはこちらにあります。

3
3
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
3
3