Zero + Bullseye + Node-RED + CHIRIMEN環境のセットアップ覚書

# はじめに
CHIRIMENにZero/Zero2用のBullseyeイメージがアップされてたので早速使ってみたのですが、Node-REDがうまくはいらなかったので、Bullseye 32bit lite上にNode-RED + CHIRIMEN環境を作ります。

# 基本環境
・Raspberry Pi Zero W
・Bullseye 32bit lite
のmicro sdを作って、Wi-FiとかUSB OTG SSHとかで操作します。

# Node-REDをインストール
```
sudo apt-get update -y
sudo apt-get upgrade -y
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
```
以上でサクッとNode-REDが入りました

~~今後は自動起動するようにしておきます。~~　環境次第かと思いますが、以下のコマンドだと、メモリ不足のせいか起動しないことも。

```shell
sudo systemctl enable nodered.service
```
公式推奨の省メモリ起動をcrontabで自動起動させます。
まずはスクリプトを作っておいて
```
nano node-red-start.sh
```
スクリプト中身
```
node-red-pi --max-old-space-size=256
```

crontabにコマンド追加
```
crontab -e
```
初めて起動するときはエディタに何を使うか聞いてくるのでお好みで。
よくわからない人はnanoを選んでおくとよいかな。
設定ファイルの一番最後に一行追加して保存
```
@reboot /home/airpocket/Workspace/node-red-start.sh
```
airpocketのところは自分のuser名を。


# Web-I2C-API と Web-GPIO-APIをインストール

作業用フォルダとしてWorkspaceを作ってインストールします。

```shell
mkdir Workspace
cd Workspace
npm init -y
npm install node-web-gpio node-web-i2c
```
CHIRIMEN関係のライブラリは$HOMEに置くことにしました。

```shell
cd $HOME
wget https://github.com/chirimen-oh/chirimen/archive/refs/heads/master.zip
unzip master.zip
mv chirimen-master/ chirimen/
```

# OpenCV をインストール
RasPiをセットアップしたらとりあえずOpenCVを入れておくのがお作法です。
Bullseye lite版にはpipが入ってなかったので、pipをインストールするところからです。

```shell
sudo apt install python3-pip
```

[以前の記事通り](https://qiita.com/airpocket/items/da8beabc5efc23b94054)進めて、numpyのバージョンアップをしたらOKでした。
```shell
sudo apt-get -y install python3-dev python3-pip libgl1-mesa-dev libopenjp2-7-dev libavcodec-extra58 libavformat58 libswscale5 libgtk-3-dev liblapack3 libatlas-base-dev
pip install opencv-python opencv-contrib-python
sudo apt-get -y install libgl1-mesa-dev
sudo pip install numpy --upgrade
```


# Raspberry Camera V1設定
今回の用途ではRaspberry Camera V1相当のSpy Cameraを使います。イメージセンサはOV5647が載っているためこのカメラ使用の設定も行います。

```shell
sudo raspi-config
```
でメニューを立上げ、「3 Interface Options」⇒「I1 Legacy Camera Enable/disable legacy camera support」⇒「yes」⇒「ok」とし、rebootして設定を有効にします。

/boot/config.txtの最後に次の１行を追加します。

```
dtoverlay=ov5647
```

v4l2を使って、カメラのステータスが読めます。
```shell
v4l2_ctl -L
```

libcamera-stillで画像を取得してみます。
```
libcamera-still -n -o test.jpg
```

# 動作テスト
では、Node-REDでlibcamera-stillを使って静止画を撮ってみます。
使用するのは「inject」ノードと「exec」ノードです。
二つのノードを接続して設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/c804d0be-d4bb-9f91-c439-6e234ca8a335.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/b8318577-2107-9466-7c3d-9aa5073994a2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/54543e9d-ba68-22b8-f3dd-649a3a24940e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/e6fec04d-486d-eedc-f410-0fe049c57078.png)
設定ができたら、デプロイして実行してみましょう。
Workspacesフォルダに画像ファイルが出力されていれば成功です。

# i2cの有効化
sudo raspi-config
3 Interface Optins => P5 I2C => yes

## i2ctoolsのインストール
sudo apt install i2ctools
これでi2cdetect -y 1が使える

# まとめ
Raspberry Pi Zero にCHIRIMEN +αの環境構築をしました。
Node-REDでの画像取得には「node-red-contrib-camerapi」というノードがありますが、Bullseyeではカメラの取り扱いが変わった為使用できません。execノードから直接libcamera-stillコマンドを使って撮影するのが簡単でした。