🦠
XIAO ESP32C3で始めるnanoFramework ~PWM~
Seeed Studio XIAO ESP32C3で.NET nanoFrameworkを動かす記事というか雑記。
今回は、PWM。LEDをふわっと点滅します。
ハードウェア
次の通り結線。(Lチカのときと一緒です。)
- XIAO ESP32C3 D3(GPIO5) - LEDのアノード
- LEDのカソード - 1K抵抗
- 10K抵抗 - XIAO ESP32C3 GND
NuGetパッケージ
PWMするためのhttps://www.nuget.org/packages/nanoFramework.System.Device.Pwmを追加します。
また、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.Pwm" version="1.1.6" targetFramework="netnano1.0" />
</packages>
C#コード
Configuration.SetPinFunction()でピンの機能を設定してから、PwmChannel.CreateFromPin()でPWMピンを作成します。
pwm.DutyCycleにデューティ比(0.0~1.0)を設定すると、PWM出力が変化します。
ここでは、1秒かけてLEDをふわっと点けて、次に1秒かけてLEDをふわっと消しています。
using nanoFramework.Hardware.Esp32;
using System.Device.Pwm;
using System.Threading;
Configuration.SetPinFunction(5, DeviceFunction.PWM1); // GPIO5
var pwm = PwmChannel.CreateFromPin(5, 40000, 0);
pwm.Start();
while (true)
{
for (double duty = 0; duty <= 1.0; duty += 0.01)
{
pwm.DutyCycle = duty;
Thread.Sleep(10);
}
for (double duty = 0; duty <= 1.0; duty += 0.01)
{
pwm.DutyCycle = 1.0 - duty;
Thread.Sleep(10);
}
}
波形
C#コードで指定したとおり、40KHzのPWM波形です。
デューティ比が小さいと、間引きされたような不思議な波形になっていました。
Discussion