🦠
XIAO ESP32C3で始めるnanoFramework ~I2C~
Seeed Studio XIAO ESP32C3で.NET nanoFrameworkを動かす記事というか雑記。
今回は、I2C。Grove-ADXL345の加速度を取得して表示します。
ハードウェア
Grove-ADXL345をXIAO ESP32C3に繋ぎます。
結線にはGrove-4pin Male Jumper to Grove 4pin Conversion Cableを使いました。
- XIAO ESP32C3 D4(SDA) - Grove-ADXL345 白色(SDA)
- XIAO ESP32C3 D5(SCL) - Grove-ADXL345 黄色(SCL)
- XIAO ESP32C3 GND - Grove-ADXL345 黒色(GND)
- XIAO ESP32C3 3V3 - Grove-ADXL345 赤色(VCC)
NuGetパッケージ
I2CするためのnanoFramework.System.Device.I2cを追加します。依存しているnanoFramework.Runtime.Eventsも追加されます。
また、ESP32C3のピン機能の設定が必須なので、nanoFramework.Hardware.Esp32も追加します。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="nanoFramework.CoreLibrary" version="1.14.2" targetFramework="netnano1.0" />
<package id="nanoFramework.Hardware.Esp32" version="1.6.3" targetFramework="netnano1.0" />
<package id="nanoFramework.Runtime.Events" version="1.11.6" targetFramework="netnano1.0" />
<package id="nanoFramework.System.Device.I2c" version="1.1.11" targetFramework="netnano1.0" />
</packages>
C#コード
ADXL345に測定開始を指示して、1秒周期に加速度X,Y,Zを取得、出力ウィンドウに表示します。
I2cConnectionSettings()で指定するバスIDに何を指定すればいいのか分かりませんでしたが、ここから推測して1にします。
I2cDevice.Create()前にConfiguration.SetPinFunction()でピンの機能を設定します。
using nanoFramework.Hardware.Esp32;
using System;
using System.Device.I2c;
using System.Diagnostics;
using System.Threading;
Configuration.SetPinFunction(6, DeviceFunction.I2C1_DATA); // SDA ... GPIO6
Configuration.SetPinFunction(7, DeviceFunction.I2C1_CLOCK); // SCL ... GPIO7
using var device = I2cDevice.Create(new I2cConnectionSettings(1, 0x53, I2cBusSpeed.FastMode));
device.Write(new byte[] { 0x2d, 0x08 }); // Start measurement
while (true)
{
var data = new byte[6];
device.WriteRead(new byte[] { 0x32 }, data); // Read DATAs
var x = BitConverter.ToInt16(data, 0) * 2.0 / 512;
var y = BitConverter.ToInt16(data, 2) * 2.0 / 512;
var z = BitConverter.ToInt16(data, 4) * 2.0 / 512;
Debug.WriteLine($"{x} {y} {z}");
Thread.Sleep(1000);
}
device.Write()の波形
測定開始のdevice.Write()の波形を確認しました。
良好。
device.WriteRead()の波形
加速度X,Y,Z取得のdevice.WriteRead()の波形も確認しました。
きちんとリスタートコンディションで動作しています。
Discussion