はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

M5Stack Core 2で基本に帰ってLチカしてみよう

初めに

PORT.A.I2Cは、I2Cシリアル通信をサポートしているので接続しているモジュールのアドレスが分かると、あとはデザインシートをよみとってセンサー値の取得ができます。
運が良ければ、モジュールに対応したライブラリが公開されているので、そうするとかなり楽になります。
hatsune.hatenablog.jp

それでは、PORT.A.I2C以外のインターフェースを使う場合はどうでしょうか。
今回は、GPIOを使って、その先にLEDをつなげて、C#でLEDをチカチカさせるプログラムを作ってみたいと思います。
やはり、組込み系にはLチカ(LEDをチカチカさせること)が、Hello Worldですよね。

M5Stck Core 2側の事前準備

Install the nanoFramework firmware

M5Stackに使われているESP32にはnanoFrameworkは標準インストールされていないので、nanoFrameworkをインストールします。

接続ポート番号の確認

USBでM5Stack Core 2をPCに接続したら、デバイスマネージャーで「CP210x」が接続されているポート番号を確認します。今回の環境では「COM4」が該当しました。

Flasherアプリケーションのインストール(インストール済の場合は不要)

OSの[スタート]メニューから「Developer PowerShell for VS2022」を起動します。

dotnet tool install --global nanoff

nanoFrameworkfファームウェアをインストール(インストール済の場合は不要)

今回使用するM5Stackは、M5Stack Core 2になります。
このM5Stack Core 2をターゲットにして「COM4」経由でnanoFrameworkをアップロードします。

nanoff --target M5Core2 --update --serialport COM4

Device Explorerでの接続確認

nanoFrameworkファームウェアをインストールしたあとにVisual Studioを起動してDevice Explorerをみると、「M5Core2 @ COM4」と表示されるようになります。

nanoFrameworkファームウェアは、インストールしたあとにnanoFramework以外の別イメージをM5Stack Core 2に転送(Burn)してしまうと消えてしまうので、Device Explorerに表示がないような場合は、再度、インストールをしてからVisual Studioを起動すれば表示されるようになります。

Visual Studioの準備

Visual Studioを機能拡張する

Visual Studioには.NET nanoFramework Extensionをインストールして機能拡張しておきます。
この機能拡張によりnanoFrameworkアプリのテンプレートが追加されます。
このテンプレートで作成したプロジェクトには、NuGetから自動的に「nanoFramework.CoreLibrary」ライブラリが追加されています。

「nanoFramework.M5Core2」ライブラリを追加する

今回は、M5Stack Core 2を使うので、「nanoFramework.M5Core2」ライブラリを手動でNuGetから追加します。

ここまでが、M5Stack Core 2を使うアプリ開発を行う上での共通の事前準備となります。

Lチカプログラム

接続インターフェースについて

M5Stack Core 2の裏の「CORE 2」を書かれている白いふたを外して、M-Busを露出させます。

M-Busについて
  • G0:I2S LRCK PDM CLK
  • G1:TXD0
  • G2:I2S DOUT
  • G3:RXD0
  • G13:RXD2
  • G14:TXD2
  • G18:SCK
  • G19:GPIO
  • G21:intSDA
  • G22:intSCL
  • G23:MOSI
  • G25:DAC
  • G26:DAC
  • G27:GPIO
  • G32:PA_SDA (PORT.A.I2Cと同じ)
  • G33:PA_SCL (PORT.A.I2Cと同じ)
  • G34:PDM DAT
  • G35:ADC
  • G36:ADC
  • G38:MISO
  • GND
  • 3.3V
  • 5V
  • RST
  • BAT

今回はG19のGPIOを使います。

GPIOについて

GPIOは「General-purpose input/output」といってデジタル(ONとOFFの二値)値の入出力ができるインターフェースです。
ONにすることで5Vが出力され、OFFにすると0Vが出力されます。

回路

M5Stack Core 2からのGPIO出力をそのままLEDに繋ぐと電圧が高すぎるため150Ωくらいの抵抗を繋いで次のような回路を作ります。

赤ケーブルをM-Busのピン19、そして青ケーブルをGNDに繋ぎます。

コードについて

gist.github.com

GPIOコントローラー

GPIOを使うときは、まずはGPIOコントローラーを生成します。

var gpio = nanoFramework.M5Stack.M5Core2.GpioController;

LEDの接続をオープン

LEDを光らせるためには、GPIOに対して出力をすることになるので、ピン19を指定して出力モードでオープンします。

var led = gpio.OpenPin(19, PinMode.Output);

ONとOFFを交互に実行する

少し下手なコードですが2秒ごとにONとOFFを無限ループするようにしています。
GPIOでONにするコードは次のようになります。

led.Write(PinValue.High);

GPIOでOFFにするコードは次のようになります。

led.Write(PinValue.Low);

実行

youtu.be