Raspberry Pi Pico WでNode-RED MCU Editionを動かしてみた。

# はじめに

Raspberry Pi Pico Wの技適(RマークとTマーク)が通ったので、Node-RED MCU Editionで動作確認しました。

![IMG_0123.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ac627c03-40f9-4628-6b0d-be465c41097d.jpeg)

# 環境構築

## xs-devツールを使用する場合

Moddable SDKとPico SDKの両方の環境構築が完了するので便利です。

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

Pico SDKの環境を構築する場合は以下の手順です。

```bash
$ xs-dev setup --device pico
```

環境変数を有効にするため、ターミナルを閉じて新しく開きます。

サンプルプログラム(helloworld)を実行します。
Raspberry Pi Pico Wへの書き込みは、BOOTSELボタンを押しながらUSBを接続するか、BOOTSELボタンを押しながらRESETボタン(外付けタクトスイッチ)を押す必要があります。

```bash
$ xs-dev run --example helloworld --device pico
```

## 手動で環境構築する場合

### Moddable SDK

環境構築手順に変更はありません。

https://qiita.com/kitazaki/items/15cba2f4622bf3682083

以降のPico SDKの環境構築が完了したあと、サンプルプログラム(helloworld)を実行します。

```bash
$ cd $MODDABLE/examples/helloworld
$ mcconfig -d -m -p pico/pico_w
```

### Pico SDK

GitHubの「Getting Started with Raspberry Pi Pico」が情報源になります。

https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/pico.md

事前にbrewコマンドで必要なコンポーネントをインストールします。

brewコマンドのインストール

```bash
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.
com/Homebrew/install/HEAD/install.sh)"
```

必要なコンポーネントのインストール

```bash
$ brew update
$ brew install cmake
$ brew tap ArmMbed/homebrew-formulae
$ brew install arm-none-eabi-gcc
```

Pico SDKとpicotoolsとpico-examples(サンプルプログラム)をインストールします。

Pico SDKのインストール

```bash
$ cd ~
$ mkdir pico && cd pico
$ git clone -b 1.5.0 https://github.com/raspberrypi/pico-sdk
$ cd pico-sdk
$ git submodule update --init
$ mkdir build
$ cd build
$ cmake ..
$ make
$ cd pioasm
$ cmake ../../tools/pioasm
$ make
$ cd ../elf2uf2
$ cmake ../../tools/elf2uf2
$ make
```

環境変数を設定します。

bashの場合

```bash
~/.bashrc
```

zshの場合

```bash
~/.zshrc
```

設定する内容

```bash
export PICO_GCC_ROOT=$(brew --prefix)
export PICO_SDK_DIR=$HOME/pico/pico-sdk
```

環境変数を有効にするため、ターミナルを閉じて新しく開きます。

picotoolsのインストール

```bash
$ cd ~/pico
$ git clone https://github.com/raspberrypi/picotool.git
$ cd picotool
$ mkdir build
$ cd build
$ cmake ..
$ make
```

pico-examplesのインストール

```bash
$ cd ~/pico
$ git clone -b master https://github.com/raspberrypi/pico-examples.git
```

サンプルプログラムのBlink(Lチカ)を実行します。

```bash
$ cd pico-examples
$ mkdir build
$ cd build
$ cmake ..
```

Raspberry Pi Pico Wの基板上のLEDはWi-Fiチップに接続されているため、blinkを実行する場合、外付けのLEDが必要です。
ここでは、LEDのアノードをGPIOの18に、カソードをGNDに接続し、ソースコードのLED_PINの定義を18に変更します。

```bash
$ vi ../blink/blink.c
```

```blink.c
/**
 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "pico/stdlib.h"

int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
/*
    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
*/
    const uint LED_PIN = 18;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(250);
        gpio_put(LED_PIN, 0);
        sleep_ms(250);
    }
#endif
}
```

```bash
$ cd blink
$ make
$ cp blink.uf2 /Volumes/RPI-RP2
```

![IMG_0099.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/d9126304-ec55-58f5-d7a1-74b586498547.jpeg)

基板上のLEDを点滅させる場合は、picow_blinkを使用します。

```bash
$ cd ~/pico/pico-examples/build
$ cmake -DPICO_BOARD=pico_w ..
$ cd pico_w/wifi/blink
$ make
$ cp picow_blink.uf2 /Volumes/RPI-RP2
```

![IMG_0098.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/9daa7772-3608-c7e1-a506-a148ce887661.jpeg)

# Node-RED MCU Edition

node-red-mcu-pluginを使用してNode-RED MCUの動作確認を行います。

## injectノードとdebugノードを使用する

![スクリーンショット 2023-04-08 19.02.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/58d00fe3-89f5-5c1c-f606-d22eeafe0d16.png)

![xsbug_0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a1078310-9b98-bb03-a147-057f8fed30da.jpeg)

## HTTP requestノードを使用する

![http.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c83c23e5-80ab-a754-ae03-d9d1a033be02.jpeg)

![xsbug.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4f6e92e3-0c1f-2503-4154-f8d61815f3d7.jpeg)

## クラウドのNode-RED DashboardからLチカする

構成

![スクリーンショット 2023-04-10 23.39.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c100c7ce-85c9-548f-8e83-39dad01b5415.png)

クラウド側のフロー

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/6fe76339-d710-2f0e-3b5b-1ed34c63d415.png" width="50%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/07e00ad8-d842-1f7c-d6a4-57d28da3d2fb.png" width="50%">

デバイス側のフロー

![スクリーンショット 2023-04-10 23.31.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/92db7430-5848-fa0c-71a2-c762e1f52232.png)

![IMG_0101.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/7ea9aa5a-08b0-e8bc-f05e-fe0885dcbc2b.jpeg)