Moddable SDKを使ってみる その1(MCP23017、Moddable SDK 5.12.0)

はじめに

 今回はModdable SDKのMCP23017のサンプルを試してみました。

 Moddable SDK 5.12.0でMCP23017のアップデートがあり、Node-RED MCUの執筆者メンバーの方がMCP23017について調べていたところ、私の記事が出てきたようです。

▼以下の記事で使ったことがあります。

I/O Expanderを使ってみる その2(MCP23017)

はじめに  以前MCP23S08というI/O Expanderを使いましたが、今回はMCP23017です。  MCP23017はI2C通信で16ピンまで増やせます。しかもアドレスを指定するピンが3つある…

 Moddable SDKのサンプルが問題なく実行できればノード化も可能なので、まずは試してみました。それに伴い、Moddable SDKやESP-IDFのバージョンアップも行っています。

▼以前の記事はこちら

Moddable Twoを使ってみる(Moddable SDK、Node-RED MCU、ESP32)

はじめに  今回はModdable Twoを使ってみました。Moddableが開発したボードで、ESP32とディスプレイが搭載されています。  Node-RED MCUで使っていましたが、Moddable S…

Node-RED MCU用のノードを作成してみる その3(Serialノード)

はじめに  今回はNode-RED MCU用のSerialノードを作成してみました。デバッガツールとは元々シリアル通信を行っているのですが、他のポートでのシリアル通信を行うことが…

環境を構築する

Moddable SDKのアップデート

▼以下のページを参考に、環境を構築していきます。

https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/Moddable%20SDK%20-%20Getting%20Started.md#win-instructions

▼PCは10万円ぐらいで購入したゲーミングノートPCを利用しています。Windows 11の環境です。

ちょっと買い物:新しいノートPCとSSDの増設(ASUS TUF Gaming A15)

はじめに  今回はこれまで使っていたPCが壊れたので買い替えましたという話です。  以前はよく分からないGPUが載っていたノートPCを使っていたのですが、最近はUnreal E…

 Node-RED MCUでもModdable SDKは使っているので、私の環境では予めインストールされているものもあります。

▼最後に環境を構築したのは以下の記事の時点です。

Node-RED MCUの環境を構築する(Moddable SDK 5.4.1、ESP-IDF v5.3.1対応版、Windows 11)

はじめに  今回はNode-RED MCUの環境を構築してみました。  PCを買い替えたので、久々にインストールしました。カメラへの対応も進んでいるようなので、試したいなと思…

 最初に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のアップデート

▼以下のページを参考に進めます。

https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp32.md#win-instructions

 以前まではインストーラでインストールしていたのですが、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への書き込みについては以下に書かれています。

https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp32.md#win-instructions

▼デバイス名の一覧は以下にあります。XIAO ESP32C3の場合はesp32/xiao_esp32c3です。

https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp32.md#platforms

▼Moddable SDKのMCP23017のサンプルは以下にあります。

https://github.com/Moddable-OpenSource/moddable/tree/ec3d8103a891127fa0448ddd6dd83c6bdacd57bc/examples/drivers/mcp23017

▼ドキュメントも参考になりました。

https://github.com/Moddable-OpenSource/moddable/blob/ec3d8103a891127fa0448ddd6dd83c6bdacd57bc/documentation/drivers/MCP230XX/MCP230XX.md

 サンプルをもとに、少し書き換えたコードを作成しました。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については以下のページで紹介しています。

書籍紹介:『はじめてのNode-RED』/『はじめてのNode-RED MCU Edition』

Node-REDとは  一言でいうと、Node-REDはプログラミングが簡単にできるツールです。ビジュアルプログラミングの一種で、視覚的にわかりやすくなっています。 ▼百聞は一見…

Node-RED関連

ここではNode-RED関連の情報を集めています。 書籍 関連記事 関連記事XIAO ESP32C3を使ってみる その7(RTC、ネットワークの時刻取得) 2025年2月12日 Node-RED MC…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です