🦠

XIAO ESP32C3で始めるnanoFramework ~UART~

2023/05/09に公開

Seeed Studio XIAO ESP32C3で.NET nanoFrameworkを動かす記事というか雑記。

今回は、UART。PC繋いでエコーバックします。

ハードウェア

PCのUSBにTTL-232R-3V3を接続して、XIAO ESP32C3を繋ぎます。
次の通り結線。

  • XIAO ESP32C3 D6(TX) - TTL-232R-3V3 黄色(RXD)
  • XIAO ESP32C3 D7(RX) - TTL-232R-3V3 橙色(TXD)
  • XIAO ESP32C3 GND - TTL-232R-3V3 黒色(GND)

NuGetパッケージ

UARTするためのnanoFramework.System.IO.Portsを追加します。依存しているnanoFramework.Runtime.EventsとnanoFramework.System.IO.Streams、nanoFramework.System.Textも追加されます。
また、ESP32C3のピン機能の設定が必須なので、nanoFramework.Hardware.Esp32も追加します。

追加した後のpackages.configは次のようになります。

<?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.IO.Ports" version="1.1.60" targetFramework="netnano1.0" />
  <package id="nanoFramework.System.IO.Streams" version="1.1.38" targetFramework="netnano1.0" />
  <package id="nanoFramework.System.Text" version="1.2.37" targetFramework="netnano1.0" />
</packages>

C#コード

UARTからデリミタ(LF)までの文字を受信して、UARTへ送信します。
SerialPortクラスを使えばいいので難しくはありませんが、ポート名が"COM2"(これはSerialPort.GetPortNames()で調べることができる)なのと、ピンの機能をCOM2_RX、COM2_TXに設定が必要でした。

using nanoFramework.Hardware.Esp32;
using System.Diagnostics;
using System.IO.Ports;

var ports = SerialPort.GetPortNames();
Debug.WriteLine("Avaiable ports:");
foreach (var portName in ports)
{
    Debug.WriteLine($" {portName}");
}

Configuration.SetPinFunction(20, DeviceFunction.COM2_RX);   // RX ... GPIO20
Configuration.SetPinFunction(21, DeviceFunction.COM2_TX);   // TX ... GPIO21

using var port = new SerialPort("COM2");
port.BaudRate = 115200;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Handshake = Handshake.None;

port.Open();
port.WriteLine("Start echo back.");

while (true)
{
    var str = port.ReadLine();
    port.WriteLine($"[{str}]");
}

TIPS1: デリミタ

SerialPortクラスのデフォルトはLFでした。
TeraTermを使うときは、送受信の改行コードをLFにする。

TIPS2: 除外COM

Visual StudioのDevice ExplorerはCOM接続を監視していて、新たなCOMが接続されるとnanoFrameworkかどうかを調べるために送受信します。nanoFrameworkではないCOMをDevice ExplorerのSettingsにあるCOM port exclusion listに追加しておくと、余分な送受信がされず、無駄な待ちが無くなります。

Discussion