XIAO ESP32C3で始めるnanoFramework ~UART~
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