🦠

XIAO ESP32C3で始めるnanoFramework ~PWM~

2023/05/21に公開

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