opnizを使ってみた

IoT界隈で話題になっている [opniz](https://github.com/miso-develop/opniz) を使ってみました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/676f03ab-8ce8-c025-9603-4921b8a8050d.png)

opnizを使うとM5Stack系デバイスを遠隔に開発できるとのことで、前から気になってました。今まではArduinoで開発してたのですが、コードを書き換えるたびにデバイスを繋いで転送してたのですが、opnizならばエディタでコードを編集したらすぐに反映されるので便利です

# ハンズオン

今回はこちらにある記事に従ってopnizを動かしてみました。
https://qiita.com/miso_develop/items/e5eba99cfe8593c7ff64

## 作業の流れ

大雑把にこれだけのコマンドで完結するので、すごくシンプルに出来ていると思いました。npmでインストール出来るのは良いですね

```
mkdir opniz-handson && cd opniz-handson
npm install opniz-cli
```

M5デバイスへ書き込みと設定。シリアルやWi-Fiの設定をします。

```
npx opniz upload
```

PCからサーバープログラムの実行

```
npm install opniz
curl -fsSLk https://raw.githubusercontent.com/miso-develop/opniz-sdk-nodejs/main/examples/display.js > index.js
node index.js
```

## 詰まった所

たったこれだけの作業でしたが、やってみると躓く点がありました

### 1. CORES3に非対応

積んでいるM5Stackがこれだったのですが一覧になく、core2にしてみたら書き込めずにエラーで進めませんでした。

![IMG_6414.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/55312c89-103d-e255-ba8d-92583be1b064.jpeg)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/58d5b144-b2c3-9162-297b-c4e9d34c56fd.png)

軽く調べてみたのですが、どうやらArduino-cliが対応してないっぽいです。今回はBasicを使うことにしました

### 2. 2.4GHzのWi-Fiを選ぶ

PCで5GHzのWi-Fiを使っていると、 `npx opniz upload` を実行した時に5GHzのWi-Fiが選択された状態になります。M5Stackは2.4GHzしか対応してないので、繋がらない状態でした

### 3. Windowsではtimeoutした

ウチの環境の問題かもしれませんが、Windows PCではtimeoutになって `Hello World!` が表示できませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/b4e59d6f-e702-b926-1a0c-407d7dd27d23.png)

macで試したら実行できました

![IMG_6437.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/5bf16fda-e40a-ff26-5c94-c5d07cc2a43d.jpeg)

# 展望

opnizはまだアルファ版のようですが、npmでインストールできる手軽さは良いと思いました。とりあえずはGPIOを制御できるまで使いこなしてみようと思います

# 2024/01/02 追記

## サンプルコードを少し変更してみる

### ボタンが押された時の挙動

`index.js` に1行を追加するだけでM5Stackのボタンが押された時にログが出るようになりました

```
opniz.Btn.onClicked = (button, count) => console.log(`onClicked: ${JSON.stringify({ button, count })}`)
```
9行目に追加しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/ad9cf25c-7c5a-f653-9d2f-a2ddf177a6c3.png)

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/03a789a0-a3cb-1af7-cb4e-5e7d42415f0b.png)

ボタンを押した時に「onClicked: 」と表示されました。M5Stackの挙動からJSの処理が動かせるので、Webhookを叩いて色んな事ができそうです

### 加速度センサー (IMU)の取得

index.jsのforループの中に以下の2行を追加しました

```
			console.log("Acceleration: ", await opniz.Imu.getAccel()) // 加速度を取得
			console.log("Gyro: ", await opniz.Imu.getGyro()) // 角速度を取得
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/54c4ea83-fb28-5771-d8d2-7cd72cc141fc.png)

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/7d67bc33-8851-bb1f-14a5-5707f873cd8a.png)

同じM5Stackでも購入時期により搭載されているモジュールが変わったりなどで、Arduinoでは扱いが面倒なイメージだったのですが、OpnizではあっけなくIMUのデータを取得できました。M5Unifiedの恩恵なのかもしれませんがありがたいです。

これもNodeJSの中で動いてますので、センサーの値をファイルに保存するのも手軽にできそうな印象です。

## Windows PCでのtimeout解決

WindowsセキュリティによりOpnizサーバーの接続がブロックされてました。以下の手順で解決しています。

1. Windowsの「設定」から[プライバシーとセキュリティ]の画面の[ファイアウォールとネットワーク保護]をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/62b0b0ea-5c1b-dca4-4007-f7d4f7b07637.png)
2. [ファイアウォールによるアプリケーションの許可] をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/c89e81a4-5b4a-d5cd-0d2b-9b4a9f96f3d8.png)
3. [設定の変更]クリックをして、「許可されたアプリおよび機能」の中から [Node.js JavaScript Runtime] にチェックを入れて [OK] をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2267750/22a3ebfd-caff-2eea-8252-bdcd06cf4554.png)

再度、`node index.js` を実行すると、M5StackのLCDに「Hello World」を表示することが出来ました。「プライベート」と「パブリック」で2つのチェックがありますが、「ファイアウォールとネットワーク保護」で「アクティブ」と表示されている項目が使用中のネットワークで適用されています。私の環境ではパブリックで動いていましたので、「パブリック」にチェックを入れました。