Moddable SDKを使ってみる その1(MCP23017、Moddable SDK 5.12.0)
はじめに
今回はModdable SDKのMCP23017のサンプルを試してみました。
Moddable SDK 5.12.0でMCP23017のアップデートがあり、Node-RED MCUの執筆者メンバーの方がMCP23017について調べていたところ、私の記事が出てきたようです。
▼以下の記事で使ったことがあります。
Moddable SDKのサンプルが問題なく実行できればノード化も可能なので、まずは試してみました。それに伴い、Moddable SDKやESP-IDFのバージョンアップも行っています。
▼以前の記事はこちら
環境を構築する
Moddable SDKのアップデート
▼以下のページを参考に、環境を構築していきます。
▼PCは10万円ぐらいで購入したゲーミングノートPCを利用しています。Windows 11の環境です。
Node-RED MCUでもModdable SDKは使っているので、私の環境では予めインストールされているものもあります。
▼最後に環境を構築したのは以下の記事の時点です。
最初にVisual Studio Installerで必要なものがインストールされているか確認しました。
▼C++によるデスクトップ開発の欄で、Windows 10 SDK(10.0.0.19041.0)が選択されていることを確認しました。

▼環境変数として、MODDABLEを設定しています。

Moddable SDKを更新するために、ディレクトリを移動して更新しました。
cd C:\pjt\moddable
git pull▼Path変数にもパスがあることを確認しました。

ビルドを行うために、x86 Native Tools Command Prompt for VS 2022で実行します。
▼Visual Studio 2022の中にあります。

以下のコマンドを実行して、ビルドを実行してみました。
cd %MODDABLE%\build\makefiles\win
build
xsbug▼xsbugが起動しました。

サンプルを実行しました。
cd %MODDABLE%\examples\helloworld
mcconfig -d -m -p win▼問題なく起動し、スタートボタンを押すとHello, worldと表示されました。

ESP-IDFのアップデート
▼以下のページを参考に進めます。
以前まではインストーラでインストールしていたのですが、git cloneでインストールする手順が紹介されていました。ユーザーディレクトリでv5.5.1のブランチを指定してクローンします。
git clone -b v5.5.1 --recursive https://github.com/espressif/esp-idf.git環境変数を変更しました。
▼元々はv5.3.1用のものをインストールしていました。

▼今回クローンしたディレクトリに変更しました。

ディレクトリに移動して、インストール用のbatファイルを実行しました。
cd esp-idf
install.bat▼問題なくインストールされました。

LEDを制御する
実行する前に、最初に配線作業をします。
▼MCP23017は秋月電子で購入しました。データシートもあります。
https://akizukidenshi.com/catalog/g/g109486
▼Amazonでも売っているようですが、秋月電子に比べたら高いですね。
マイコンはXIAO ESP32C3を用います。
▼I2C通信のSDAは6番ピン、SCLは7番ピンです。
アドレス用のピンはすべてGNDに接続しています。
▼以下のように配線しました。

プログラムを書き込んで動作を確認します。
▼ESP32への書き込みについては以下に書かれています。
▼デバイス名の一覧は以下にあります。XIAO ESP32C3の場合はesp32/xiao_esp32c3です。
https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp32.md#platforms
▼Moddable SDKのMCP23017のサンプルは以下にあります。
▼ドキュメントも参考になりました。
サンプルをもとに、少し書き換えたコードを作成しました。I2C通信用のピンは指定する必要があり、MCP23017の入力ピンでプルアップ抵抗を利用する場合も指定する必要があったためです。
作成したコードは以下です。0~7番のピンでLEDを流れるように制御し、8番のピンを押している間は流れが停止します。
import Timer from "timer";
import Digital from "pins/digital";
import { MCP23017 } from "MCP230XX";
export default function() {
const expander = new MCP23017({
address: 0x20,
inputs: 0b0000000100000000,
sda: 6,
scl: 7,
pullups: 0b0000000100000000,
});
const button = expander[8]; // GPB0(ボタン入力)
let ports = { a: 0x88, b: 0x00 };
let indicator = 0;
let delay = 120;
let last = Date.now();
expander.write(0x0000);
button.mode(Digital.Input);
Timer.repeat(() => {
let state = expander.read();
let buttonPressed = ((state >> 8) & 0x01) === 0;
if (!buttonPressed) {
ports.a = ((ports.a << 1) | (ports.a >> 7)) & 0xFF;
}
let now = Date.now();
if (now >= last + delay) {
last = now;
if (buttonPressed) {
indicator ^= 1;
}
}
ports.b = (indicator << 8);
expander.write(ports.b | ports.a);
}, 50);
}今回はCOM12に接続したXIAO ESP32C3に書き込みます。
cd %MODDABLE%\examples\drivers\mcp23017
set UPLOAD_PORT=COM12
mcconfig -d -m -p esp32/xiao_esp32c3書き込み後、動作を確認しました。
▼問題なく動作しました。レスポンスも速いです。
最後に
Moddable SDKでの動作は確認できたので、後日Node-RED MCUでも利用できるようにしました。また別の記事で紹介しようと思います。
MCP23017でピンを増やせるのは便利ですが、コードは複雑になるので、Node-RED MCUで利用できると開発が楽になりそうですね。
▼Node-RED MCUについては以下のページで紹介しています。




