ラズパイ3B+/ZERO応用その1
ラズパイ3B+とNode-REDによるIoT-WEBサーバの製作
(製作動機)
“Pythonによるスクレイピング”を読んで、WEB画面から簡単に文字や画像を入手できることを知りました。“data=requests.get(url)”これを使えばIoT-WEBサーバにデータを非同期でとりに行くことが可能です。
一般的なクラウドIoTサービスは、エッジ側は定期的にクラウドサーバにデータを送信し(投げっぱなし)サーバ側が受け取ったデータを蓄積し見える化やAI解析サービスを行うというものです。エッジ台数やサーバ使用量や解析サービス等で課金されます。エッジ側にWEBサーバがあれば各種センサデータや画像データを非同期で取りに行けることに気づきました。(気づくのが遅かったかもしれませんが)
(エッジ側でのWEBサーバ構築)
IBM開発のNode-REDを使用。ノード接続と少しのジャバスクリプトでWEBサーバが構築可能です。まずWindows環境で開発しラズパイに移植しました。ラズパイ3ではRAMが1GBで画像キャプチャーが少し重たいですが移植性は抜群でした。(SSD起動のラズパイ4 RAM4GBでも動作確認しました)センサ接続は当初ラズパイ本体に接続しようとしましたがBMP280やDHT11等のノード設定で手間取り、更にアナログ入力数が1系統のみのラズパイでは拡張性が無いことや本体への配線が煩雑となるため、結局Node-REDのシリアルノードを使用しArduinoと接続することにしました。Arduinoに各種デジタルセンサのライブラリを導入し、内臓の10bitAD変換器(Nanoで8ch、UNOで6ch)を活用し照度や振動センサやアナログの温度センサ等系7系統の入力を設定しました。(Node-RED表示では温度、湿度、気圧、照度の4系統)
(接続実験)
今回はWiFiルータ内での固定IPアドレス“192.168.0.101:1880”で接続しましたが、グローバルIPアドレスで外からの接続も可能と思われます。

ArduinoNano環境センサー配線図
デジタル:温度・湿度センサ(DHT11)と気圧センサ(BMP280)
アナログ:照度センサ、電圧入力3ch

温湿度センサーと気圧センサのピン接続

Arduinoセンサデータ通信プログラムコード

Node-Redによるプログラム(ホスト側)

Node-Redのダッシュボード画面
Node-REDプログラムはWindows-PCで作成しラズパイに移植する

センサデータは3秒毎に更新、設定はArduino側で行う。
画像データは1分毎に更新、設定はNode-Red側で行う。
ラズパイ3B+への動作環境移植

ラズパイ3B+/ZERO応用その2
IoT-WEBサーバとしての活用事例
ベランダ実験室に設置したIoT-WEBサーバ

今後のIoT-WEBサーバの活用方針

ラズパイ3B+/ZERO応用その3
ラズパイZEROによるWEBサーバ試験
ラズパイ3B+で開発したプログラムをラズパイZEROに移植

専用WiFiルータとの接続

リアルタイムモニタ
ラズパイZERO(IPアドレス=192.168.0.201 ←
>sudo nano etc/dhcpcd.confのwlan設定で201を設定:設定済)
ラズパイZEROは電源投入と同時にNode-redが起動するよう設定してある。
起動には2~5分程度の時間が必要
PC側は、http://に続いてラズパイZEROのWEBサーバーのIPアドレスを入
れると以下の画面が現れる

専用IoT専用WiFiルータとの接続

ZEROと3B+(2台のラズパイ)の接続

2台のラズパイのモニタリング実験

カメラモニターを含めた多対一のIoTシステムの実験を行うことができた。
ラズパイ3B+/ZERO応用その4
WEBサーバを介した画像の送受信方法の検討
ラズパイなどがエッジサーバとしてWEB画面にULした画像をクライアントが自由にDL
出来れば簡単なIoTシステムになると考えました。

WEBサーバーの画面から直接、画像や数値を取り出すことにより、汎用性の高い
IoTシステムが構築できると考えました。
サーバ側:画像を変化させるエミュレータ
WEBサーバ(ラズパイ3B+)動作させながら、12秒単位で画像を切り替える
クライアント側で更新される画像を読み取る試験を行いました。 課題が出てきました。

クライアント側:web画面から変化画像を取得

WEB画像送受信実験システム(ラズパイをWEBサーバとしてWEB画像を更新)

クライアントPC(Windows10)の動作画面

WEB画像を取り込みAI処理を実施するところまでは動作確認できたものの
次の画像をWEBサーバから読み込んでも画像が変わらない問題が発生!
定点観察プログラムを使ったWEB画像での追試

その後解決:秋山氏のアドバイスでX-copyにより更新した画像を取り出すことができたものの
html内を探索するような煩雑な操作を行うため、結局この問題はpysimpleGUIを使って解決しました。
ラズパイ4応用その1
SSD起動可能なラズパイ4の環境設定
https://lyncs.hateblo.jp/entry/2021/06/24/015838

ラズパイ3B+からの大きな変更点は
以下4点です。
SSD起動が可能になったこと
WiFiが5GHzにも対応
USBコネクタがタイプCになったこと
HDMI端子がミニになったこと(迷惑)
SSD対応でPCに近づいて保存データの信頼性が上がったといえます。
Node-Red等のWEBサーバやSamba等のファイル共有サーバをラズパ
イ4に導入しラズパイ4のPIOからのデータや下位マイコン(Arduino等)
のIoTデータをラズパイ4に蓄積する検討を行いました。

WEBサーバーとしてNode-RED、ファイル共有サーバーとしてSamba を設定します。

サーバー接続試験を以下のように行いました。
ラズパイ4とWindows-PCのLAN通信試験
Tp-link社製 無線LANルータをインターネットに接続せずに有線ルータとして使用しました。ルータのIPアドレスは、192.168.0.1(中国製はこれがデフォルト)Windows-PCのワイヤー接続の固定IPアドレスを192.168.0.100ラズパイの固定IPアドレスを192.168.0.201と設定しました。

ラズパイ4にはファイル共有のSambaサーバを設定し/home/bin/shareフォルダーを共有化しました。Windows-PC側でネットワーク検索\192.168.0.201\shareを指定するとフォルダーが開きました。共有フォルダーのショートカットをデスクトップに張り付けることも可能

ラズパイ4応用その2
ラズパイ4に各種ADCを接続する試験
インターフェースの異なる(サンプリング速度も異なる)3種類のADCをラズパイ4に接続し表示やデータ蓄積を行うプログラムを作成し動作確認を行いました。
3種類のADCとラズパイ4への接続方法

3種類のADCのデータ保存とラズパイ4の共有化フォルダー

ラズパイ4と各種ADCの接続

ArduinoMEGAを接続するためのラズパイ4設定*
①/boot/config.txtを編集し
末尾に dtoverlay/boot/config.txtを加える
②/boot/cmdline.txtを編集し
quiet splash Plymouth.ignore-serial-consoleの文書を消す
ADS1115をラズパイ4に接続する設定
①ラズパイ設定:I2Cをenable
②ドライバインストール
$sudo pip3 install
adafruit-circuitpython-ads1x15
MCP3008をラズパイ4に接続する設定
①ラズパイ設定:SPIをenable
②Node-RED用ノードインストール
node-red-node-pi-mcp3008
注)ArduinoMEGAは、$ls /dev/ttyAで”ttyACM0”が表示されていれば正常接続確認できます。(中華製ArduinoUNOやNanoは認識しない)
ADS1115との接続

MCP3008との接続
Node-REDのダッシュボード機能による
リアルタイム表示をWEBサーバとして出力
このデータ(1秒間隔)は保存しません。

IQC(プロセスQC)とMQC(装置QC)で後者の異常を長期レンジで
検出するため、10分毎のデータをMCP3008.txtに上書き保存します。

ArduinoMEGAのADCをUART経由で接続

(Arduino側のコード)
タイマー機能(MSTimer2)を使って
処理時間含めきっちり1msec間隔で
UART通信を行うもの
(ESP系やArm系ではタイマー機能
は無い)
ラズパイ側のインターフェースコード


ラズパイPico応用その1
ラズパイPicoの環境設定:インターフェース2021年8月号P188-190参考
(ファームウェア書き込み)
https://micro@python.org/download/rp2-pico から
rp2-pico-20210618-v1.16.uf2 をDLする
PCとUSB接続(BOOTボタンを押しながら)ドライブとして認識
Firmwareをフォルダーにコピペする コピー終了でドライブ認識が切れる

ラズパイPico応用その2
Pico内臓ADC(12bit,3ch)の試験

ADC(2ch)のデータ送受信試験


ラズパイPico応用その3
温湿度センサー(DHT11)接続試験

DHT11はArduinoでは一般的な1-wire温湿度センサーです。
ところがPicoのセンサーライブラリにはDHT12(高精度版)
はありますが廉価版のDHT11のライブラリは無くGitHubから
ドライブプログラム“dht.py”をDLする必要があります。
GitHub – ikornaselur/pico-libs: A collection on Raspberry Pi Pico MicroPython libraries built while playing around with modules
PicoとDHT11の接続

MicroPythonコードは“main.py”と“dht.py”の2つを書き込む必要があります。
今回の“main.py”は2秒間隔で温度湿度を出力するコードを試しました。

(Thonnyでの動作確認)

(感想)
DHT11は安価でポピュラーなセンサであるにも拘らず現状ではPico接続が面倒です。
ArduinoではDHT11のライブラリが提供されているのに比べ
Picoでは現時点でコンパイル済のライブラリが未提供であるため、pythonコードで提供られている「dht.py」を別途書き込まなければ使えません。
早くライブラリが整備されることを期待するしかないです。
ラズパイPico応用その4
サーボモータ(SG90)接続試験

サーボモータの駆動電圧は5VなのでVBUS(5V)に接続します。
制御線はGP0に接続します。
PicoとSG90の接続

動作確認は0°→90°→0°を1秒間隔で繰り返すものです。

(感想)
Machineライブラリは準備されており、サーボモータの制御はArduinoと同じレベルで簡単です。