JavaScript ＋ オンライン開発環境で「Raspberry Pi Pico W」の開発（「Kaluma」を利用）

## はじめに
この記事は、Raspberry Pi Pico W・Raspberry Pi Pico を使った開発を JavaScript で行える「[Kaluma](https://kalumajs.org/)」を試してみたという記事です。

![Kaluma](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/491c2211-c4fa-015e-5dc4-df2b51d6608a.png)

さらに、それに関して「Kaluma で提供されているオンラインの開発環境」を使ってやってみる話になります。試す内容は、以下の動画のような電子工作での「Hello World」的な内容にあたる Lチカです（※ Raspberry Pi Pico W のボード上にのっている LED を光らせるというもの）。

<iframe width="560" height="315" src="https://www.youtube.com/embed/Ls_VyGn0v4U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## Raspberry Pi Pico や Raspberry Pi Pico W の開発
今回扱う Raspberry Pi Pico W や、同系統のデバイスの Raspberry Pi Pico を使った開発方法について、よく出てくる方向性の 1つに Python系の内容があります。
具体的には、例えば以下の 2つがあり、どちらも[マイクロコントローラ](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9)用の Python といったような位置付けのものです。

- [MicroPython - Python for microcontrollers](https://micropython.org/)
- [CircuitPython](https://circuitpython.org/)

その他、Python系以外での開発方法は、Arduino IDE を使った方法も出てくると思います。

今回は、それらのどれにもあてはまらない「JavaScript」を用いた開発になります。

## Kaluma を用いた開発
### Kaluma について
Kaluma は、公式で「A tiny JavaScript runtime for RP2040 (Raspberry Pi Pico)」と書かれているように、Raspberry Pi Pico W・Raspberry Pi Pico といったデバイスの開発を JavaScript　を使って行えるものです。

### Kaluma を知ったきっかけと Raspberry Pi Pico を使ったお試し
自分が Kaluma を知ったのは、以下の「[Raspberry Pi PicoをJavaScriptで制御できるWeb開発環境「Kaluma」を使ってみた！](https://paiza.hatenablog.com/entry/2022/02/02/150000)」という記事で紹介されていたのを見たのがきっかけです。

https://paiza.hatenablog.com/entry/2022/02/02/150000

そして、それを知った当時（昨年の2月ごろ）は、[Raspberry Pi Pico を使ったお試しをして](https://twitter.com/youtoy/status/1489950782581780481)、その後に[イベントでの LT登壇で発表をしていたりしました](https://speakerdeck.com/you/iotlt-vol-dot-84)。

### 今回試した内容の概要： Raspberry Pi Pico W での Lチカ
今回試す内容について、開発をする環境は、上記の Raspberry Pi Pico を試した時と同じオンラインの開発環境です。しかし、用いるデバイスが Raspberry Pi Pico W になるのが、上記と異なる点です。

試す内容は簡単な Lチカですが、Raspberry Pi Pico と Raspberry Pi Pico W では、ボード上に搭載されている LED の回路周りで違いがあり、その点を注意して開発する必要があります。

#### 補足：今回は用いなかった開発方法
Kaluma を用いた開発は、今回用いるオンラインの環境もありますが、Node.js の環境を用意して使う以下の CLI もあります。こちらは今回は用いないので、詳細は割愛します。

●kaluma-project/kaluma-cli
　https://github.com/kaluma-project/kaluma-cli

#### 今回のお試しの手順の概要
今回の内容を試していく手順は、以下のとおりです。

1. Raspberry Pi Pico W に Kaluma用のファームウェアを書きこむ
1. Kaluma のオンラインの開発環境を開き、プログラムを書く
1. Raspberry Pi Pico W を PC に接続し、その後に Kaluma のオンラインの開発環境との接続を行う
1. Raspberry Pi Pico W にプログラムを書きこむ

基本的には、[自分がKaluma を知ったきっかけになった記事](https://paiza.hatenablog.com/entry/2022/02/02/150000)や、[自分が過去に Raspberry Pi Pico を使って行ったお試し](https://speakerdeck.com/you/iotlt-vol-dot-84)の流れと同じです。

ただし、当時とは画面の見た目やプログラムの内容が異なるので、そのあたりをこの後に紹介していきます。

### 今回試した内容の詳細
それでは、上で書いた手順について、説明を書いていきます。

#### Raspberry Pi Pico W に Kaluma用のファームウェアを書きこむ
最初に、Raspberry Pi Pico W に Kaluma用のファームウェアを書きこみます。ファームウェアの入手場所は、[Kaluma公式のダウンロードページ](https://kalumajs.org/download/)です。
![Kaluma公式のダウンロードページ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e23fcb4b-752e-5437-00fc-a2c025fa081c.png)

Raspberry Pi Pico W用のファームウェアは、記事執筆時点ではベータ版のみが提供されているようです。2つあるバージョンのうち「1.1.0-beta.2」のほうを使ってみます。

ダウンロードしたファームウェアの書き込み方法は、[上で紹介した記事（paiza開発日誌の記事](https://paiza.hatenablog.com/entry/2022/02/02/150000)）で書かれた手順をご参照ください。
（ざっくり書くと、Raspberry Pi Pico W上の「BOOTSEL」ボタンを押したまま USB接続すると、「RPI-RP2」という名前のストレージとして認識された状態になるため、そのストレージにダウンロードしたファームウェアのファイルをコピーする、という流れです）

#### Kaluma のオンラインの開発環境を開きプログラムを書く
次に、Kaluma のオンラインの開発環境を開きプログラムを書きます。

[オンラインの開発環境](kalumajs.org/ide/)は以下のとおりで、左半分の画面にプログラムを書きこみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/cfd0371d-9684-4843-b404-34a92ee237bd.png)

プログラムの内容は、以下のとおりです。プログラムの内容は、[Kaluma公式の Raspberry Pi Pico W のページの「On-board LED」の部分]（https://kalumajs.org/docs/boards/pico-w）に書かれているものです。

```javascript
const { PicoCYW43 } = require('pico_cyw43');
const pico_cyw43 = new PicoCYW43();

// Blink on-board LED
setInterval(() => {
  if (pico_cyw43.getGpio(0)) {
    pico_cyw43.putGpio(0, false); // turn-off LED
  } else {
    pico_cyw43.putGpio(0, true); // turn-on LED
  }
}, 1000);
```

この際、Raspberry Pi Pico用のサンプルを用いないように注意してください。

```javascript
const led = 25;
pinMode(led, OUTPUT);
setInterval(() => {
  digitalToggle(led);
}, 1000);
```

Raspberry Pi Pico W と Raspberry Pi Pico では、ボード上の LED の構成が異なる部分があるため、Raspberry Pi Pico用のプログラムを用いてしまうと LED が光りません。

この話の詳細が気になる方は、以下の記事で説明していますので、ご参照ください。
●Raspberry Pi Pico W ＋ ビジュアルプログラミングでの Lチカで軽くハマった話：「BIPES」を使った開発 - Qiita
　https://qiita.com/youtoy/items/6a1026aa38333959687e
（ざっくりと書いておくと、「Raspberry Pi Pico」・「Raspberry Pi Pico W」のそれぞれの GPIO は「LED(GP25)」・「LED(WL_GPIO0)」で、Raspberry Pi Pico W の GP25 に該当するピンは、無線チップ用に使われているっぽいです）

#### Raspberry Pi Pico W の接続
Raspberry Pi Pico W を USBケーブルを用いて PC に接続し、その後に Kaluma のオンラインの開発環境上で接続の操作を行います。

開発環境の画面右上にある「Connect」ボタン（以下の赤矢印で示した部分）を押し、その後に出てくるメニュー上で名前が「Pico」で始まるものを選び、その後に「接続」ボタンを押します。
![接続の画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a598b4f2-9f8a-78b5-ff7d-f2c5f6829aa4.png)

#### Raspberry Pi Pico W にプログラムを書きこむ
その後、開発環境の画面右上にある「Flash」ボタン（以下の赤矢印で示した部分）を押します。そうすると、Raspberry Pi Pico W にプログラムが書きこまれます。
![書き込みの操作](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e03c31a1-e976-4b0d-2849-0765a76ff241.png)

書き込みが無事に完了すると、、開発環境の画面右側の表示が、以下のようになります。
![書き込み完了後の画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/233b2dd7-bdbf-bb4a-4aba-53d34d582ec7.png)

ここまでの手順を進めると、冒頭に掲載した動画のように Raspberry Pi Pico W上の LED が点滅する状態になると思います。

## おわりに
今回、Kaluma のオンライン開発環境を使い、Raspberry Pi Pico W を使った開発を行いました。その際、その開発の言語に JavaScript を用いました。
そして、複雑な準備などなしに Lチカを試すことができました。

今回は、LED を光らせる簡単な内容を試しましたが、以下の Kaluma のドキュメントに書かれている他の API も試していければと思っています。

●Docs | Kaluma
　https://kalumajs.org/docs/api/wifi