M5Stack CoreMP135にenebularエージェント実行環境を入れてみた

M5Stack CoreMP135（以降は、CoreMP135と書きます）がスイッチサイエンスで販売され、日本でも入手しやすくなったので、試してみました。

https://www.switch-science.com/products/9650

CoreMP135は、他のM5Stackシリーズと異なりDebian（Linux）が動作する分類的には、マイコンではなくコンピュータに分類されるデバイスです。
CPUは、Arm Cortex-A7コアですが、マルチコアではないので、たくさんのアプリケーションを動かすというよりは、数個のアプリケーションを動作させてシンプルな機能を実現するのに良いと思います。Raspberry PiでいうとRaspberry Pi Zeroに近いです。（Cortex-A7で、ARMV7-AなのでCPUアーキテクチャはRaspberry Pi Zeroより新しいですが。）
Wi-Fiは付いていませんがギガビットのLANが2chあり、CANやRS-485ポートがあるので産業向けとなります。
M5Stachシリーズなので、Grove互換のPortAやPortC、M5BUSも搭載されています。

マルチタッチ付きの2インチ 320x240液晶とスピーカー、USBがあるので、とりあえず動かすのは手軽にできそうです。

【追記】スイッチサイエンスの商品ページでは、RAMが512MBとなっているがM5Stack公式では、4GBって書いてある？

https://docs.m5stack.com/en/core/M5CoreMP135


M5Stack公式の開発ツールや設定は、他にも説明があると思うので、今回は、[enebular](https://www.enebular.com/ja/)のエージェント実行環境をインストールして、Node-REDでの開発環境を整えます。素のNode-REDでも良いですが、enebularであれば簡単にクラウド側との相互通信もできますし、DBも用意されているので、便利です。

## Debian OSのイメージ作成
エージェント実行環境は、Debianしか対応していないため、SDカードにDebianのイメージをインストールします。

SDカードへのインストール手順は以下のページに書いてあります。

https://docs.m5stack.com/ja/guide/linux/coremp135/image

イメージファイルは、`M5_CoreMP135_debian12_20240507`を選びました。

## 電源を投入
電源は、USB Type-Cか、DCジャックにACアダプターからの給電が使用できますが、Debianのイメージでは、素の状態で、CoreMP135の画面で操作ができないです。そのため、USB Type-CでPCに接続し、ターミナルから操作する様にして、電源はDCジャックから給電しました。
もろもろインターネット経由でインストールするため、インターネットルータの有線LANにも繋いでいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/48a8831c-79a4-2589-5af8-207d80d800d8.png)


電源を投入し、しばらくしたあとに起動音が鳴り、PCからは、仮想シリアルデバイスとして見えるようになりました。TeraTermで起動メッセージが確認できます。
ログインユーザーとパスワードの初期状態は、両方とも`root`です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/98a1795a-794d-4553-6cc4-efdcde946b99.png)

ログインするとDebianのコマンドが使用できる状態になります。

## パーティションの拡張
イメージャで作られたパーティションが1GB分しか確保されていなかったため、パーティションを拡張します。
`fdisk`コマンドでもできると思いますが、`parted`をインストールしました。

コマンドは以下の流れです。イメージャで作ったものであれば、パーティション名も同じだと思います。
```
# apt install parted
# parted -l
(parted) parted /dev/mmcblk0
(parted) resizepart 5 100%
(parted) quit
# resize2fs /dev/mmcblk0p5
# reboot
```

最後に一応リブートし、`df -h`で、`/dev/root `の`Size`が`30G`となっていればOKです。

```
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        30G  1.4G   27G   5% /
devtmpfs        157M     0  157M   0% /dev
tmpfs           221M     0  221M   0% /dev/shm
tmpfs            89M  712K   88M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            45M     0   45M   0% /run/user/0
```

## エージェント実行環境をインストールするための準備
ほぼ、素のDebian Linux状態なので、以下のコマンドでエージェント実行環境に必要なものをインストールします。

```
apt install gcc
apt install sudo
apt install wget
apt install python3
```

## エージェント実行環境をインストール

enebularにサインインし、適当なプロジェクトを作って、エージェント実行環境を作成します。
（enebularのサインアップ方法やプロジェクトの作り方は、[公式のチュートリアル](https://docs.enebular.com/ja/getstarted/introduction)を参照ください）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/3729bab8-d4fd-b177-b791-97ce1229c25c.png)

設定画面からインストールコマンドをコピーします。(とりあえずインストールユーザーはrootに変更しています。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/dfeeeb47-544c-15d5-6792-fcb5124b6c63.png)

インストールコマンドをCoreMP135のターミナルに貼り付けて実行しますが、直接、CoreMP135上のNode-REDフローをいじれるように`--dev-mode`のオプションを付けます。

インストールコマンド例
```
$ wget -qO- https://enebular.com/agent-install | sudo -E bash -s -- --user=root --install-key={この部分は毎回異なる} --dev-mode
```

完了したら次のように表示されます。

```
================================================================================
 enebular-agent has been successfully installed ?
   - Version: 2.18.1
   - Location: /home/root/enebular-runtime-agent
   - User: root
   - Service name: enebular-agent-root

 enebular-agent is running as a system service.
 To check the status of agent, run the following command on the target device:
   sudo journalctl -ex -u enebular-agent-root.service
================================================================================
```

しばらく立ってからenebularの画面を更新し、エージェント実行環境の概要ページのエージェントステータスでバリ３（古い）のアイコンが出ていれば、正常に動作しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/5ccf8313-0818-0995-4816-7eabf1f509a9.png)

## enebular editorからエージェント実行環境のNode-REDにリモート接続する
エージェント実行環境が動作していれば、遠隔でフローをデプロイしたり、ログを見たり、SSH接続ができるようになります。
また、デスクトップアプリのenebular editorをPCにインストールすれば、エージェント実行環境上で動作しているフローを直接、編集できるようにもなります。
（enebular editorの取得、インストール方法は[ドキュメント](https://docs.enebular.com/ja/EnebularEditor/)を参照ください）

enebular editorのダッシュボードで、新規もしくは既存のフローで、以下のボタンをクリックして対象のエージェント実行環境を選べば接続できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/095835fe-fdfb-63f9-196f-8ddc72060638.png)

暫く経つとNode-REDのフローエディタが起動します。

## 適当なフローを動かしてみる
とりあえず、Node-REDのファーストステップ的なフローは動きました。（画面はPCから見ていますが、フローが動作しているのはCoreMP135上です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/1c098b58-bb1e-f11f-678a-0c8da08958a5.png)

## とりあえずここまで
一旦、CoreMP135で、enebularを使ったNode-REDフローが動作することは確認できました。後日、センサーを繋いだり、enebularのデータストアとの接続などを試したいと思います。
今回は、暫定で環境を作りましたが、本来は初期ユーザーのパスワードの変更等が必要だと思います。