Raspberry Pi pico Wとpico display 2.0を使ってNode-RED Dashboardを動かしてみた。

# はじめに

Moddable Developers Japanの<a href="https://discord.gg/qkcBdS7TKn">Discord</a>で、Raspberry Pi pico Wとpico display 2.0を使ってNode-RED Dashboardが動かないという質問を受けました。

![スクリーンショット 2023-06-25 11.28.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2270a98a-cfe6-ea30-2f12-3dd8ba81b06f.png)

Pico Display Pack 2.0はこちら。

https://shop.pimoroni.com/products/pico-display-pack-2-0

# 事前準備と動作確認

Raspberry Pi pico / pico Wの開発環境(Pico SDK)の構築ができている前提とします。

https://qiita.com/kitazaki/items/f9801d95a8e28237ee59

Raspberry Pi pico Wは既に持っていたので、さっそくpico display 2.0を購入して、サンプルプログラムを動かしてみました。

```bash
$ git clone -b main https://github.com/pimoroni/pimoroni-pico.git --recursive
$ cd pimoroni-pico
$ mkdir build
$ cd build
$  cmake ..
$ cd examples/pico_display_2
$ make
```

問題なくビルドが完了すると、uf2ファイルが作成されます。
「BOOTSEL」ボタンを押しながらRaspberry Pi pico Wを起動(電源をON)し、uf2ファイルをRaspberry Pi pico Wにコピーします。

```bash:(macOSの例)
$ cp pico_display2_demo.uf2 /Volumes/RPI-RP2/
```

![FzTVr8hagAAYaVn.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/556f748f-fe61-19e9-f51c-04db1faf1969.jpeg)

# Moddable SDKで動作確認

Moddable SDKの開発環境の構築ができている前提とします。
piu/ballsとpiu/imagesのサンプルプログラムの動作は問題ありませんでした。

```bash
$ cd $MODDABLE/examples/piu/balls
$ mcconfig -d -m -p pico/pico_display_2
```

![IMG_1309.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/129a9075-65ce-cb60-3de4-fbcc62b8ce6b.jpeg)

```bash
$ cd $MODDABLE/examples/piu/images
$ mcconfig -d -m -p pico/pico_display_2
```

![IMG_1310.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/54248132-054e-a17c-8efb-585eeb3dfc8c.jpeg)

# Node-RED MCUで動作確認

node-red-mcu-pluginを使用して、Node-REDフローエディタで簡単なDashboardフローを作成しました。

![248439242-12587ff6-4ac7-4db6-ad59-dd70b14dbbef.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f73a8a83-2c02-17cb-6bb5-b41a6da27cc5.png)

サンプルフロー(flows.json)はこちら。

https://github.com/kitazaki/node-red-mcu_pico_display_sample/blob/main/flows.json

ビルドしてファイルを書き込んで起動したところ、デバッガ(xs-bug)がすぐに停止(stack)しました。

![248439222-999c82c7-0350-4350-815d-7fcd0305b53b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/0b1da501-aed3-c6d0-b258-dc815e9de0e9.png)

## 解決に向けた議論(Discussion)

Githubのnode-red-mcuのレポジトリで、Discussionを作成し、議論を開始しました。

https://github.com/phoddie/node-red-mcu/discussions/119

Peterさんから返信があり、creation paramsの値の変更で動作したとの解決案が示されました。

```json
{
	"static": 65536,
	"chunk": {
		"initial": 1024,
		"incremental": 1024
	},
	"heap": {
		"initial": 64,
		"incremental": 64
	},
	"keys": {
		"available": 8
	}
}
```

creation paramsの設定方法についてはこちら。

https://qiita.com/kitazaki/items/101e182d1b535bdf06b2

## 動作確認

creation paramsを設定してビルド、ファイルを書き込んで起動したところ、正常に動作することを確認しました。

![IMG_1316.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/24331cd7-4d9a-ff4c-fd72-0ce5b38f92b9.jpeg)

![xs-bug_OK.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/af22f395-3830-c60b-bff8-8e49d58f1903.jpeg)

node-red-mcuのmanifest_host.jsonに設定する場合はこちら。

![manifest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2e4defd0-3537-3e72-0ea5-132bba46fa3d.png)

```json
"pico": {
	"creation": {
		"static": 65536,
		"chunk": {
			"initial": 1024,
			"incremental": 1024
		},
		"heap": {
			"initial": 64,
			"incremental": 64
		},
		"keys": {
			"available": 8
		}
	}
}
```

# さいごに

Raspberry Pi picoが起動時にstackが停止(silent crash)する原因までは突き止められていませんが、
取り急ぎ簡単なDashboardフローを動かすには問題を回避できました。