初めに
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に繋ぎます。
コードについて
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);