🦠

XIAO ESP32C3で始めるnanoFramework ~I2C~

2023/05/11に公開

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