IoTもくもく会

家族や仲間で集まって、micro:bit、obniz、ラズベリーパイ、Arduinoなどの電子工作向けマイコンボードを「黙々と」いじってみる会

作品紹介

まずは何はともあれ、Lチカです。
ここからすべてが始まります。
ラズベリーパイから電源を取得しています。

半導体を利用した外部電源(モバイルバッテリー)供給による Lチカです。
これで電源供給の制限を突破でき、様々な工作が可能となります。

初参加のTさん家族による作品です。
obniz、無線LAN、PC連動でサーボモーターを制御に成功!

ラズパイZero、ブレッドボート、モータ(田宮 4速クランクギヤーボックスセット)、スイッチを連動 してみました。
コンデンサーを用い、ブラシモーターのノイズを除去していないと、モバイルバッテリーなどの精密機器は壊れてしまいます。

上記の田宮 4速クランクギヤーボックスセットを使ったシステムでレゴブロック観覧車の電動化に成功して、子供たちは大喜びに大人たちは満足な会でした。

Sさん家の息子さん専用プログラミング環境をご紹介します。
Raspberry Pi 4上にプログラミング環境(Makecode)を利用してMicro:bitを制御…息子さんがうらやましい。
しかも、ロボットのフォロもありますな。IT教育が熱心ですね。

広告

Live Streaming

以前からrtsp(Real Time Streaming Protocol)を利用したライブストリーミングを実施していました。
今までは、自宅のWindowsPCでVLC Playerを用い受信していました。
HTML5や5G通信が本格的に始まったこともあり、インターネットを通したストリーミング配信コンテンツの実装を試みました。

太陽光による自家発電

システム構成

Networkカメラからrtsp通信により動画データを受け取り、HLS(HTTP Live Steaming)形式の動画へ変換します。その理由は従来のmp4形式で配信データを録画すると、時間経過にともない膨大なデータ量へ膨らみます。HLSを用いると録画データを数秒ごとに分けたセグメントデータを数個保有、ローテーションすることで、データの消費を控えることが出来るのです。

その録画データをHTML上の再生プレイヤーを用い描画することで、PCのOSやスマートフォン、タブレット、ブラウザの違いを気にすることなく、Live Streaming配信を実現しています。

Network Camera

Raspberry Pi へカメラを装着、rtspプロトコルを喋らせました。

右から「HARD OFF」で500円で買ったUSBカメラ「BUFFALO BSWHD05SBK」、真ん中が「Rasberry Pi Zero」、左がモバイルバッテリーです。

Rasberry Pi Zero のrtsp Server化は下記の章へ記載しています。

rtspプロトコル設定値

IP-Address192.168.1.200
User:Passworduser:password
RTSP認証有効
Accesslive.sdp
RTSP Port554
video-RTP Port 5558
Audio- RTP Port 5556

ffmpeg

rtspプロトコルをHLSプロトコルへ変換します。

ffmpegコマンドによる変換例

ffmpeg -i "rtsp://user:password@192.168.1.200:554/live.sdp" -hls_time 3 -hls_wrap 10 "/stream/solor1.m3u8"

画像がセグメントへ分割され、ファイルがローテーションしてくれています。

# cd /stream
# ls -l
-rw-r--r-- 1 root root    226  1月  2 11:51 solor1.m3u8
-rw-r--r-- 1 root root 420368  1月  2 11:51 solor10.ts
-rw-r--r-- 1 root root 429956  1月  2 11:51 solor11.ts
-rw-r--r-- 1 root root 433716  1月  2 11:51 solor12.ts
-rw-r--r-- 1 root root 423752  1月  2 11:51 solor13.ts
-rw-r--r-- 1 root root 403448  1月  2 11:51 solor14.ts
-rw-r--r-- 1 root root 447440  1月  2 11:50 solor15.ts
-rw-r--r-- 1 root root 464924  1月  2 11:50 solor16.ts
-rw-r--r-- 1 root root 478460  1月  2 11:50 solor17.ts
-rw-r--r-- 1 root root 514932  1月  2 11:50 solor18.ts
-rw-r--r-- 1 root root 432776  1月  2 11:50 solor19.ts

Web Server + WordPress

現在、ストリーミング配信用動画形式はブラウザ間で標準化されていないので、JavaScriptを使用した動画プレイヤーを実装することにより、HTTPS(Port443)で視聴させることが出来ます。

プラグイン : Bradmax Player Ver 1.1.16

Raspberry Pi Zero の RTSP Server化

モバイルバッテリーとカメラを付け、標準装備の無線LANを使用して配線不要のネットワークカメラを作ってみました。

監視カメラやアクションカメラとしても使えそうな感じですが、500円で購入した中古のUSBカメラの性能が、趣味レベルと現実を見せてくれます。
200万画素!と大々的にパッケージに書かれています…(汗)

USB カメラの認識

以下の「lsusb」コマンドでOSが認識している状態を確認します。
「Salix Technology社」か…当時では中堅クラスでしたね。
上手くいかない場合は、他のPCへUSBカメラを接続し機器が破損していないことを確認したり、Raspberry Pi Zeroへ刺しているusbポートが間違っていないか、microUSB変換ケーブルがクロスだったりとか(この場合、Zeroは落ちます。)、右往左往してください。
最近のLinuxは大概、認識します。
世界中のLinux開発者へ感謝です。もう私は一線を退きました。

$ lsusb
Bus 001 Device 002: ID 115b:1311 Salix Technology Co., Ltd.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

v4l2(Video For Linux 2)コマンドでカメラ機器の配置、「/dev/video0」デバイスファイルが自動的に作成されていることを確認します。
カメラから受け取るデータを仮想ファイル(/dev/video0)へ記憶して、このファイルを中継、読み込むことで各アプリケーション(ここではrtsp-server)が機器の違いを意識することなく、同じように動作します。

$ v4l2-ctl --list-devices
BSWHD05SBK     (usb-20980000.usb-1):
        /dev/video0

コンパイルに必要なモジュール実装

パッケージ管理ソフトの「apt」を最新化しておかないと、各モジュールの整合性が合わなくなるので以下を実施しておきます。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt-get install cmake
$ sudo apt-get install liblivemedia-dev

コンパイル作業ディレクトリ作成

慣習的なものですが、一時作業領域を作成して移動しておきます。

$ mkdir /home/pi/tmp
$ cd /home/pi/tmp

コンパイルとインストール

GitHubからソースコードをクローン(ダウンロード)して、そのコードをコンパイル、インストールします。
最近は「tar+gunzip」コマンドも不要な時代なんですね。

$ git clone https://github.com/mpromonet/h264_v4l2_rtspserver.git
$ cd ./h264_v4l2_rtspserver
$ sudo cmake .
$ sudo make install

コンパイルとインストールが正常終了すると、以下の行が出力されます。「v4l2rtspserver.service」ファイルがあるので、「systemctl」コマンドを使用してシステムへサービス登録ができます。

-- Installing: /lib/systemd/system/v4l2rtspserver.service
-- Installing: /usr/local/bin/v4l2rtspserver
-- Installing: /usr/local/share/v4l2rtspserver/index.html
-- Installing: /usr/local/share/v4l2rtspserver/hls.js/dist/hls.light.min.js

サービス自動起動の登録

Raspberry Pi Zeroが起動した際、rtspサーバが起動するように登録します。イヤだという時は不要です。
このコマンドだけでは、再起動しない限りrtspサーバは起動しません。
次項へ記載した手動コマンドで起動してください。

$ sudo systemctl enable v4l2rtspserver

手動によるサービスの起動、停止

usbカメラの再接続を行った場合、サーバやPCではないのでデバイスのアドレス不整合でうまく起動しません。
Zeroを再起動(sudo reboot)してしまいましょう。
価格に感謝しながら、そういうものだと思いましょう。

$ sudo systemctl start v4l2rtspserver
$ sudo systemctl stop v4l2rtspserver

後片付け

GitHubからクローン(ダウンロード) したソースコードを削除します。※記憶域(TFカード)に余裕があれば、不要かもです。

$ cd ..
$ sudo /bin/rm -rf ./h264_v4l2_rtspserver

VLC メディアプレイヤーによる視聴

「メディア」 → 「ネットワークストリームを開く」 を選択して以下を入力します。(RaspberryのIPは、192.168.1.101です。設定を適宜変更してください。)
画面下部の「再生」ボタンを押下します。

rtsp://192.168.1.101:8554/unicast

再生風景例です。出来ましたか??
室内なので画像がイマイチで残念ですが、楽しい作業でした。

500円のカメラもこんなに機能してくれてます。
お得感が満載で達成感が(笑)