RPi-Cam-Web-Interfaceで監視カメラ製作(画面にアノテーション編)

前回Raspberry Pi Zero WにセットアップしたRPi-Cam-Web-Interfaceではデフォルトで画面上側に日付と時刻が表示されていますが、これに加えて文字を表示させることができます。残念ながら現在のところ2バイト文字は表示されませんが、用途によっては役に立ちそうです。

今回は外気を測定して得られた温度・湿度・気圧を表示させます。秋月電子通商から購入したbme280をRaspberry Pi zero W につないで計測する予定だったのですが、Zero W本体の発熱の影響を受けてしまい正確に気温を測ることができませんでした。ESP8266以上に熱を持つようです。センサーは雨などで水に濡れることもNGなので設置場所に相当の工夫が必要です。少々甘く考えていました。残念ですが今回はあきらめます。

代わりに以前作製したESP-WROOM-02使用、温度・湿度・気圧計のMQTTデータを使います。本当はこれをZero Wにリプレースしたかったのでした。

自宅Debian jessie サーバで稼働しているMQTTブローカ Mosquitteに気温,湿度,気圧が約5分間隔でパブリッシュされています。サブクライブするそれぞれのトピックは 気温:/home/garage/Temperature/state 湿度:/home/garage/Humidity/state 気圧:/home/garage/Pressure/stateです。

RPi-Cam-Web-Interfaceでは /dev/shm/mjpeg/user_annotate.txt の内容が画面に表示される仕組みになっています。mosquitte_clients を使ったshell scriptをcronで15分ごとに起動させてMQTTデータを取得しファイル書き込みを行います。

■ Zero Wに最新版のmosquitte_clientsをインストールします

$ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
$ sudo apt-key add mosquitto-repo.gpg.key

$ cd /etc/apt/sources.list.d/

$ sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list

$ sudo apt-get update
$ sudo apt-get install mosquitto-clients

■ shell script 作製

$ cd ~
$ mkdir scripts
$ cd !$
$ vim.tiny mqtt_get.sh
------------------------------ 以下の内容を作成 ------------------------------
#! /bin/bash

RESULT=`mosquitto_sub -h SERVER_ADDRESS -C 3 -t /home/garage/Temperature/state -t /home/garage/Humidity/state -t /home/garage/Pressure/state`

printf "T:%.1fC H:%.f%% %.fhPa" ${RESULT} > /dev/shm/mjpeg/user_annotate.txt

SERVER_ADDRESSはmosquittoが動いているサーバのアドレスです

■ 実行権を与えてcronに登録します

$ chmod u+x mqtt_get.sh
$ crontab -e
------------------------------ ファイルの最後に追記 ------------------------------
# Edit this file to introduce tasks to be run by cron.
・
・
・
# m h  dom mon dow   command

*/15 * * * * ~/script/mqtt_get.sh

■ RPi-Cam-Web-Interface側の設定

Camera Settings > Annotation (max 127 characters) > %aを記入して OK

文字のsize等も調整できます。

webから情報を取ってきて表示させるなど、応用ができそうです。

raspberry pi zero W にRPi-Cam-Web-Interfaceで監視カメラ製作


前々回セットアップしたraspberry pi zero Wにwebカメラを装着します。動かすソフトはraspberry piに特化したRPi Cam Web Interface (現在 version 6.3.3)を使います。

URL: http://elinux.org/RPi-Cam-Web-Interface

特徴です(webサイトより)

  • 高いフレームレートでの表示,センサーの全エリア使用可能
  • カメラの明るさややコントラスト等を調節可能
  • mp4形式でフルHDビデオ画像をSDカードに保存
  • 静止画およびコマ撮り静止画をSDカードに保存
  • SDカードに保存した動画や静止画をプレビュー可能、サムネイルを指定してダウンロード,zip形式で一括ダウンロード可能
  • 動体検知して録画をする機能、スクリプトを実行する機能
  • 録画動作のスケージュール機能
  • 古くなった録画ファイルの自動削除等々

とても高機能です。カメラからの動画をブラウザ等でモニタできて、それと同時にSDカードに記録できます。動体検知して静止画やコマ撮り静止画、動画いずれかを書込み可能です。同時にスクリプトも実行可能なので、以前失敗したメール送信なども再びチャレンジできそうですね。

また、時間に応じてカメラの設定、録画方式等を変えるなどのスケージュール機能も備えています。経度、緯度を指定して日の出、日没を算出するユニークな機能も備えています。

このソフトはRasiperry Piカメラのみに対応していてUSBカメラには対応していないみたいです。

■ インストール作業
Raspian Jessie Liteをインストールした後に、上記サイトのBasic Installationに書かれているとおりに作業して問題なくインストールできました。ただ、サイトの最後の方にコマ撮り録画をスムーズにするためにgstreamerをインストールした方が良いと書いてあります。sudo apt-get install gstreamer1.0 コマンドでインストールできますが、しばし時間がかかります。

新規インストールするならばFullパッケージのインストールをお勧めすると書かれていたので、Lite ではなくRASPBIAN JESSIE WITH PIXELをインストールする方法を改めて試してみました。前回の記事に書いたように、wpa_supplicant.confを作成し、sshを自動起動させるようにすると、すべてSSH経由で作業できます。

etcher

etcher


[インストールしたOS]
2017-03-02-raspbian-jessie.img
RASPBIAN JESSIE WITH PIXEL 
Image with PIXEL desktop based on Debian Jessie
Version:March 2017
Release date:2017-03-02
Kernel version:4.4
Release notes:Link

■ OS をEtcherなどでSDカードに書き込み後、セットして電源を入れます 

・パスワードを変更します
$ passwd

・不要なパッケージを削除します
$ sudo apt-get remove --purge wolfram-engine scratch minecraft-pi sonic-pi dillo gpicview penguinspuzzle oracle-java8-jdk openjdk-7-jre oracle-java7-jdk openjdk-8-jre
$ sudo apt-get clean
$ sudo apt-get autoremove

・パッケージを最新にします
$ sudo apt-get update
$ sudo apt-get dist-upgrade

raspi-configを起動します
$ sudo raspi-config

・タイムゾーン設定
4 Localisation Options> I2 Change Timezone > Asia > Tokyo

・テキストログインへ変更&自動ログインを禁止
3 Boot Options > B1 Desktop / CLI > B1 Console

・カメラサポートを有効にします
5 Interfacein Options > P1 Camera > Yes

・github リポジトリをクローンしてRPi_Cam_Web_Interfaceをインストールします

$ git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
$ cd RPi_Cam_Web_Interface
$ chmod u+x *.sh
$ ./install.sh

途中、オプション選択画面になります。Webサーバは3種類の中からお好みで選択できますが、なるべく軽い方が良いかと思い,初めて使うlighttpdにしました。インストール後別のwebサーバにする時はクリーンインストールからやり直すことを勧めています。
また、Webの管理画面にBasic認証をかけるときはUser Passwordを入力します。
(※2018/01/21追記※ コメント欄で教えて頂いたのですが、現時点では認証動作を設定しても機能しないみたいです。)
webcam インストール

AutoStartを選ぶと電源投入後自動起動します。またRPi_Cam_Web_Interfaceフォルダの中のstart.sh stop.shでプログラムのスタート・ストップ可能です。update.shでプログラムのアップデート,remove.shでプログラムの削除となります。

■ カメラを接続します
わたしが購入したのはHD 1080P Camera Module Board 5.0MP Wide Angle Fish Eye For Raspberry Pi A/Bこちらです。(後で気付きましたが赤外線カメラでした)

5MP(2592×1944pixel)画素で 1080p/30fps 720p/60fps 640×480/90 のVideoを配信できます。さらに魚眼レンズ付きといううたい文句でした。どんな映像がとれるのか楽しみです。付属のカメラケーブルではzeroに取り付けられないので、あらかじめPiromoni社からZero用のカメラケーブルを仕入れておきました。ところが…

一瞬目がくらみました


やってしまいました!!カメラケーブル取り付けの時にプラスチック製の留め具を破損してしました。賢明な皆様はこのようなドジはしないと思いますが、お気をつけください。留め具は1mm~2mmぐらいしか動く範囲がありません。取り扱いはソフトにお願いいたします。

ケースは余裕をもたせTAKACHIのプラスチックケース SW-100にしました。電源ですがmicro-usbとGPIOの+5V,Gndどちらに接続しても同じらしいです。今回はGPIOの方にに給電しますが、くれぐれも結線間違いしないようにせねばなりません。+-を逆にしたり他のGPIOピンに電圧をかけたりすると壊れてしまいます。また、未確認ですが電源は3.3Vの電圧でも動作可能らしいです。
ケースに取り付け
さて、カメラとZero Wを結線して電源を入れます。ブラウザでアクセスするアドレスはhttp://ipAddress:port/subfolderとサイトに書かれています。macとwindows10ではipアドレスだけではなくホスト名.localでもアクセスできます。デフォルトの80番でインストールしたならば:portも不要です。

ただ、上記の記述に反し、意外にも今回私のインストール作業では http://raspberrypi.local/ (サブディレクトリなし)が管理画面になっていました。webサーバにlighttpdを選んだ時だけみたいです。インストーラーのバグでしょう。webサーバにapach,nginxを選んでデフォルトでインストールしたときは、マニュアル通りhttp://raspberrypi.local/html/が管理画面になります。

また、http://raspberrypi.local/min.php へアクセスするとコントロールボタン等は表示されず、カメラ画像だけが表示されまます。

ちなみにchrome v59.0 ,IE11,opera v44.0,firefox v51.0ではホスト名でアクセスできるのですが、なぜかMS Edge 38.14393 ではIPアドレスでしかアクセスできませんでした。

アクセスした画面にエラー表示が出るときは,カメラケーブルの接続が悪いか又はraspi-configでカメラを有効にしていない可能性があります。再起動で回避できることもあります。

RPi-Cam-Web-Interface管理画面です

■ 使い方
設定できるパラメータがたくさんあって、私は全部の内容を理解できていません。わかるところを簡単にご説明します。設定した値は System > reset Setting で元に戻すことができるので色々トライされることをお勧めします。(注 : schedule settingsはリセットされません)

[record video start/stop] 現在のカメラ画像の動画録画をスタート・ストップ
[record image] 現在のカメラ画像の静止画をキャプチャー
[tamelapse start/stop]  現在のカメラ画像のコマ撮りをスタート・ストップ
[motion detection start/stop] 動体検知録画をスタート・ストップ(Camera Settingで Motion detect modeをInternalにする必要があります)

※ 4/3 追記 設定項目は多数ありますが、とりあえず Camera Setting > Motion detect mode : Internal 次にmotion detection start だけで動体検知-動画(Video)録画することが可能です。ただ、このままだとSDフラッシュカードがいずれ満杯になってしまいますので、古くなったファイルの削除(後述)だけは、設定しておいた方が良いでしょう。

[Camera Setting]
Camera Setting

Resolutions: Video及び静止画,解像度等を設定します
Timelapse-Interval (0.1…3200): コマ撮りの間隔(秒)
Video Split : 動画を分割します(秒)
Annotation (max 127 characters): アノテーション デフォルトで日時が表示されています
Buffer (1000… ms), default 0: 動体検知して録画されるまでにタイムラグがあるので画像のバッファリングを予めおこないます(ms)
Sharpness: シャープネス
Contrast : コントラスト
Brightness : 照度
Saturation : 彩度
ISO : ISO感度
Exposure Mode : 露光モード
White Balance : ホワイトバランス
Image Effect : 画像にイフェクトをかけることができます 
Rotation : 90度単位で画像を回転させます
Sensor Region : 画像センサーの使う範囲を指定
MP4 Boxing mode : h264動画をmp4に変換するモード
Motion detect mode : 動体検出モード

MP4 Boxing mode は動画ファイルのmp4変換作業の選択で、backgroundにするとブラウザで動画を再生することができますが、CPU処理を消費してしまい反応が遅くなります。offにするとブラウザでは見ることができずダウンロードしてからVLCメディアプレーヤーなどで再生することになります。その場合でもサムネイルは作成されます。

Motion detect mode : Internalにすると Motion Settingsのボタンが出現して動体検出の設定ができるようになります。

アノテーションはデフォルトで日時が表示されますが、スクリプトを組んで他の情報も表示させることが出来るみたいです。

[Motion Settings]
Motion Settings

動体検知のセッティングです。風で木の枝が動いたことなどで録画スイッチが入ってしまうとか、細かく考えると動体検知の調整は少々めんどうです。ただ、デフォルトのままでも動体検知しますので詳細にセットしたい時だけ値を変更するのが良いと思います。

Noise level : ノイズと動きを区別するために画像をフィルタします
Threshold : 画像変化の検知基準をpixl数でセットします
Clipping factor : Thresholdで変化のあったフレームを何個で有効とするかの値
MasK Image: 不検知部分のファイルを作成して、動体検知の範囲を絞ります。ファイル形式はPGMで画像と同じ幅,高さでなければいけません。
Changes Frames to start : スタートとなる動体検知のフレーム数
Still Frames to stop : ストップとなる動体不検知のフレーム数

自分の理解ではスレッショルドを超えたフレーム数が(Changes Frames to start)×(Clipping factor)個になった時にスタートとなるのではないかと思います。誤っていたらすみません。

[System]

シャットダウンやリブート、[Camera Setting]と[Motion Settings]パラメータのリセットができます。Default Stream とMJPEG Streamの切り替えもありますが、何が違うのか私にはわかりません。

[Edit schedule settings]
Edit schedule settings
指定した時間にカメラの感度等などの設定や記録する方式を変更するなど、コマンドを実行することができます。Command referenceのボタンを押すと実行できるコマンドの説明が出てきます。デフォルトは24時間休みなく動体検知したときに動画を記録する設定になっています。管理画面トップのmotion detection start ボタンをクリックすると動体検知録画がはじまります。起動と同時に動体検知する場合はこの画面のPeriod Start欄に md 1を書き込みます。

MOtion Start Stopの欄ですが、コマ撮りをしたいときはca 1をtl1 ,ca 0 を tl 0 に変更します。同様に静止画1枚を撮りたいときときはca 1を
imに変更します。

Days Su-Sa 欄のチェックは日曜日から土曜日に対応して、曜日による動作指定です。チェックがない曜日はその右にかかれている動作を行いません。

● 録画した画像ファイルがSDカード容量を超えてしまうのを防ぐためにファイル削除機能があります。2通りの設定方法があります。
1. PurgeVideo_Hours PurgeLapse_Hours PurgeImage_Hours それぞれ動画、コマ撮り静止画、静止画が指定時間以上古いファイルを消去します。48を指定すると2日以上たったファイルは消去されます。
2. ファイルの最大の記録スペースを指定して、それを超えた時に古いファイルから消去する方法。
PurgeSpace_ModeExを下記のいずれかで選んで値を PurgeSpace_Levelに設定します。
Min Space % (書込み可能ファイル容量の最小値 パーセント)
Max Usage % (使用済ファイル容量の最大値 パーセント)
Min Space GB (書込み可能ファイル容量の最小値 ギガバイト)
Max Usage GB (使用済ファイル容量の最大値 ギガバイト)

このファイル削除作業はManagement_Interval に設定された秒数(デフォルトでは1時間)ごとに行います。
同時に実行させたいスクリプトがもしあれば、Management_Command を指定します。このスクリプトはインストールしたサブディレクトリ下にあるmacroディレクトリに保存されていて、実行可能でなければなりません。

● DayModeはAll Day(全日)の他に Sun Based (日の出、日の入りの時間を基準) Fixd Time(特定の時間指定)があります。

Sun Based DayMode

Sun Based DayMode

Sun Based DayMode は一日をDawn(明け方),Day(日中),Dusk(夕暮れ),Night(夜中)の4つに区切ります。日の出を基準にDawnStart_Minutes(負の値) DayStart_Minutes を設定して明け方の時間を定めます、日の入りを基準にDayEnd_Minutes DuskEnd_Minutes を設定して夕方の時間を定めると、4つの時間帯が定まります。

日の出、日の入りの時刻は自動的に計算されますが、そのために Latitude(緯度) Longtitude(経度) GMT時間との差を指定します。東京の例をとるとLatitude=35,Longtitude=139,GMTOffset=9 になると思います。

Period Start欄にその時間が来たら実行させたいコマンドを設定します。

Fixed Times DayMode

Fixed Times DayMode

Fixed Times は時間固定で指定です。

●またログファイルの操作もここで行うことが出来ます。

[Download Videos and Images]Download Videos and Images

録画したファイルのサムネイルが表示されます。プレビューをしたり、必要なファイルのダウンロードを行います。先ほど述べたようにMP4 Boxing modeがBbackgroundになっていないと、動画のプレビューはできません。

■ 感想
とても使いやすく、動体検知録画もできるので非常に便利です。以前作ったESP-WROOM-02+Arducamではパワーが足りませんでしたが、今回はとってもいい感じです。まだ、長時間使っていませんが、Zeroのスペックでデータの通信がwifiでも十分実用になりそうです。素晴らしいソフトを作ってくださった作者の方に感謝します。

■ またもや失敗談
夜、蛍光灯の下で撮影する時は問題なかったのですが、昼間日光の元で撮影すると全く色合いがおかしいことに気付きました。最初は理由がわからず、一生懸命色彩の調整を行い無駄な努力をしていましたが、このカメラはナイトビジョンだったのですね。他の方の記事を読んで、ようやく理解できました。自然光では色が変で、画像もぼけた感じになってしまいます。写る角度(範囲)は広いですが、選択間違いでした。とりあえず映像はわかりますので、しばらく使ってみたいと思います。

自然光では色が変です

部屋を暗くして赤外線LEDライトをあててみました

Raspberry Pi Zero W キーボード・ディスプレイ接続無しでOSセットアップ

Raspberry Pi Zero Wにキーボードとディスプレイを接続せずにWifi経由SSHでRaspbian OSセットアップします。

前回の記事にRaspberry Pi Zero Wのセットアップにキーボードとディスプレイ接続が必要だと書きましたが、接続しなくてもRaspbian Jessieをインストールできます。慣れた方ならこちらの方法が簡単です。こちらに書かれていましたのでご紹介します。

Wifi接続に必要なwpa_supplicant.confファイルを予め作成しておくことと、デフォルトで停止しているSSHサーバを起動させることが肝です。

■ wpa_supplicant.confの作成
EtcherなどでRaspbianディスクイメージを書き込んだSDカードですが、/bootディレクトリはFAT32なのでWindowsやMacからアクセスすることができます。
また、無線LAN接続に必要なwpa_supplicant.confをあらかじめここに作製しておけばRaspbianは起動時にこのファイルを/etc/wpa_supplicant/wpa_supplicant.confにコピーしてくれます。ファイル形式はUTF-8,改行コードLFなので、エディタはサクラエディタやTeraPadなどが良いと思います。

wpa_supplicant.conf

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="SSID"
        psk="PASSWORD"
        key_mgmt=WPA-PSK
        scan_ssid=1
        }

私の所の無線LAN暗号方式がWPA2-PSKで、またANY接続不許可の設定なので
key_mgmt=WPA-PSKとscan_ssid=1の2行が挿入されています。

■ SSHサーバの自動起動

上記と同じく/bootディレクトリに拡張子無しのsshをいう名前のファイルを作成します。これだけでSSHサーバが自動起動します。

作成ファイル

作成ファイル

■ SDカードをZero Wに差して電源を入れます。立ち上がりにしばらく時間がかりますが、その後にWifi経由でSSHログインできるようになります。
ホスト名:raspberrypi.local userID: pi password: raspberryです。
今回のようにipアドレスではなくホスト名(raspberrypi.local)でアクセスするためにはマルチキャストDNS名前解決が必要なのですが,Windows10以外のWindowsマシンでは, Bonjour for Windowsがインストールされている必要があると思います。

※2020/05/30追記 raspios buster(2020-05-27-raspios-buster-lite-armhf.zip)ではwindos10 (ver 2004)PCからraspberrypi.localではアクセスできませんでした。原因はlinux側のavahi-daemonにあるような気がしますが、よくわかりません。

Raspberry Pi Zero W をゲットしました

英国 PIMORONI社からRaspberry Pi Zero Wを購入しました。3月10日に注文して到着まで約2週間でした。https://shop.pimoroni.com/products/raspberry-pi-zero-w

Raspberry Pi Zero & Pi Zero W

Raspberry Pi Zero & Pi Zero W ちょっと見では区別がつきません

Raspberry Pi Zeroに下記2つの機能がプラスされています。
On-board Wireless LAN – 2.4 GHz 802.11 b/g/n (BCM43438)
On-board Bluetooth 4.1 + HS Low-energy (BLE) (BCM43438)

私が注文した時は本体が£8.00 GBP 送料£5.50 GBP 計 £13.50 GBP ,1ポンド約140円ですから日本円にして約1,900円で手に入れることができました。PayPalで決済できます。

ただ、いまPIMORONI社のサイトを見ると、なぜか本体の値段が£9.60 GBPに上がっています。物は同じだと思いますがなぜでしょうね。

Raspberry Pi Zero W  本体 ,本体+アダプタ,本体プラスアダプタ+ケースのセット

Raspberry Pi Zero W  本体 ,本体+アダプタのセット,本体+アダプタ+ケースのセット


スイッチサイエンス等のサイトでも販売されているのですが現在は品薄になっているようです。アマゾンも一応検索してみました。やはりZero Wは出品されていませんでした。Wなしの無印Zeroが出品されていたので、何の気なしに見てみると、驚くほど高値です。
海鮮料理店で時価という値札を見る時がありますが、それと似た感覚ですね。この世の中のすべての品物が、いずれそのようになってしまうのでしょうか?

Raspberry Pi を持っている方はご存知だと思いますが、動作させるためには本体の他に必要な物があります。

接続コネクタ

接続コネクタ


・micro-SD メモリ (私は8GByteを使っています。ちなみにRaspbian Jessie LITEをインストール直後は1GByte弱をシステムが使用します)
・mini-HDMI ディスプレイケーブル
・micro-B USBケーブル
・micro-B USBケーブル+5V電源

それからPC,ディスプレイ(HDMI入力),USBキーボード,無線LAN環境がセットアップのために必要です。一度セットアップしてしまえば、その後はSSHで接続することができますので ディスプレイとキーボードは外して運用が可能です。

アダプタの干渉

アダプタの干渉


注意すべき点はHDMIのコネクタが標準のものではなくmini-HDMIタイプであることと、USBも電源も双方micor-BタイプのUSBコネクタであることです。変換プラグを使うときは物理的な干渉も考慮する必要があります。
PIMORONI社で本体と同時にRaspberry Pi Zero Adaptor Kit を購入するもの良い方法だと思います。USB micro-B <=> USB TypeA変換アダプタ1個, mini-HDMI <=> 標準タイプHDMI変換アダプタ1個, ヘッダーピン(はんだ付けタイプ)が入っています。本体とセット(Zero W + Adaptors PIM256)で£14です。
上記の本体+アダプターにケースを付けたセット(Zero W + Adaptors + Pibow Zero W PIM257)が£19です。このケースは切り出された4枚のアクリル板を4層に重ねてネジで止めたものです。うまく説明できませんがケースの組立作業は簡単なパズルのようです。
※3/26追記 上記に反してしまいますが、ディスプレイとキーボードをつながずにOSセットアップも可能でしたこちらに記事を書きました

またカメラをつなぐ予定のある方はついでにCamera Cable – Raspberry Pi Zero editionを検討されるのが良いと思います。zeroのCSI camera connector はPi3のコネクターより幅が狭いです。

PIMORONIチェックアウト

PIMORONIチェックアウト


それともう一つ、カートに入れた商品のチェックアウトですが、途中必ずお勧め商品のページを通っていくようになっています。次のページに移るためのボタンが最下行なのでわかりずらかったです。(これも悩みました)

OSはRASPBIAN JESSIE LITEをインストールしました。インストールに使用したPCはWindows 10 ver1607 (OSビルド14393.53)です。備忘の為に作業内容を記入しておきます。

■ 今回インストールしたファイル
2017-03-02-raspbian-jessie-lite.img 
RASPBIAN JESSIE LITE
Minimal image based on Debian Jessie
Version:March 2017
Release date:2017-03-02
Kernel version:4.4

etcher

etcher


zipファイルを解凍しETCHER https://etcher.io/ にてmicro-SD Flashカードへ書き込みます。書込み・ファイルのベリファイ・終了後アンマウント,一連の動作が自動で行われます。とても簡単です。

Raspberry Pi Zero Wへ書き込んだmicro-SDを差し込み、キーボードとディスプレイをつなぎます。私のHDMIアダプタは精度が悪いのか、差し込み方の具合によって信号が送られないことがあります。しっかりと確認し電源を入れます。Wではない無印Zeroの時は無線ドングルの為にOSインストールの時はUSBハブが必要でしたが今回は不要なので、すっきりとしていますね。

初回起動時にパーテーションの拡大作業が自動で行われます。ログインプロンプトが出るので。userID: pi password: raspberry でログインします。

■ raspi-config を起動します

$ sudo raspi-config

raspi-config

raspi-config

・ホスト名設定
デフォルトはraspberrypiなのでホスト名を変更します。今回は仮にpizeo-wとします。
2 Hostname > 使える文字の説明 > ホスト名をpizero-w に変更

・タイムゾーン設定
4 Localisation Options> I2 Change Timezone > Asia > Tokyo

・日本語キーボードを選択します
4 Localisation Options >I3 Change Keyboadrd Layout > Generic 101-key PC > Other > Japanese > Japanese > The default for the keyboard layout > No compose key

・wi-fi country設定
4 Localisation Options >I4 Change Wi-fi Country > JP Japan > OK

・ローケル (今回はskip 日本語フォントがインストールされないと文字化けします。)

・SSHサーバ起動設定
5 Interfacinf Options > P2 SSH > YES

raspi-config をFinishで終了させます。次の画面でリブートが吉でしょう。
■ rootのパスワードの変更とユーザの新規作成

$ sudo passwd root

Enter new UNIX password:*******
Retype new UNIX password:*******
passwd: password updated successfully

・ユーザを追加 (ユーザー名は仮に tarouとします)

$ sudo adduser tarou
Adding user `tarou' ...
Adding new group `tarou' (1000) ...
Adding new user `tarou' (1000) with group `tarou' ...
Creating home directory `/home/tarou' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for tarou
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

スーパーユーザを設定します(最終行に tarou ALL=(ALL:ALL)ALL を追記)

# sudo visudo
.
.
. 
tarou ALL=(ALL:ALL)ALL  

一旦ログアウトした後tarouでログインします

$ exit

$ sudo -s
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for tarou:
root@pizero-w:/home/tarou#

スパーユーザーになれることを確認後 pi ユーザー削除

# userdel pi

■無線LAN設定 

・vim.tiny か nanoを使い/etc/wpa_supplicant/wpa_supplicant.conf を編集

# vim.tiny /etc/wpa_supplicant/wpa_supplicant.conf
 country=JP
 ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
 update_config=1
 network={
        ssid="*****"    
        psk="******"    
        key_mgmt=WPA-PSK 
        scan_ssid=1    
       }

上記*****にはSSIDとパスフレーズをそれぞれ記入します。私の所の無線LAN暗号方式がWPA2-PSKで、またANY接続不許可の設定なので、さらに下2行を記入します。

・/etc/network/interfaces の編集 ==> DHCPでIPアドレス取得の場合は不要です 
※3/26追記
こちらの記事に書かれていますが、Raspbian Jessie でDHCPの場合は/etc/network/interfacesの編集は必要ないみたいです。

リブート後無線LANが繋がるか確認

# shutdown -r now
.
# ifconfig 
.
.
wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
 ここ---> inet addr:xxx.xxx.x.xx  Bcast:xxx.xxx.x.255  Mask:255.255.255.0
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9152 errors:0 dropped:5752 overruns:0 frame:0
          TX packets:1204 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1277232 (1.2 MiB)  TX bytes:145163 (141.7 KiB)

ipアドレスが正常か確認します。つづいてパッケージを更新します。

# apt-get update
# apt-get upgrade

PC のTeratermなどターミナルソフトからSSHでログインできるか確かめます。ホストpizero-w.localでアクセスできればOKです。

ssh ターミナルからアクセス

ssh ターミナルからアクセス

■ IPV6を無効にします

# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf

まだ他に諸々ありますが、今日の所はここらへんで。

Raspberry Pi USB webcamera 動画ストリーミング配信(オマケで音声も配信)

mjpg-streamer寝ている赤ちゃんやラヴリィな愛玩動物、さらには徘徊する御老人等々を見守るために、ラズベリーパイとUSB webcamを使いWifiで画像と音声のストリーミング配信をする実験を行いました。
いろいろ試してみたのですが、なかなか動作が安定せず現在も試行錯誤の段階です。その過程でまた新たに512MB RAMのRPiを買ってしまいました。

スペックです。

Raspberry Pi Model B
Downloaded image: 2012-12-16-wheezy-raspbian.zip
uname -a output: 3.2.27+ #250 PREEMPT Thu Oct 18 19:03:02 BST 2012 armv6l GNU/Linux

Webcam : Logitech C270
Wireless adapter: BUFFALO WLI-UC-GNM2

lsusb output:
Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270

cat /proc/cpuinfo

Hardware : BCM2708
Revision : 000f

電源は 5V 2A

まず動画の配信ですが、ffmpeg ffserverを使う方法やMotion, MJPG-Streamerなど何種類かを色々なサイトを参考にして実験してみました。

Motion(http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome) は apt-get で簡単にインストールでき、コンフィグ設定が簡単、しかも多機能なのでとても良いのですが、Raspberry Piの処理速度に起因してか最大で352×288 pixel の画像しか見ることができません。さらに問題なのは、私の環境では起動から数時間経過するとuvcvideo関係のエラーで動作が止まってしまう事でした。

しかしMotionは、玄箱HG(KURO-BOX HG) + C270 webcam + Debian squeeze + 640×480(画像)に設定して安定して動いていた経験があります。RPiでのこのエラー原因は、現versionのRaspbianの実装の問題か、またはwebcamとの相性なのか、良くわかりません。(ちなみに archlinux-hf-2012-09-18.zip でも試してみましたが、結果は同じでした)

結局、現在はディレイが少なく画像も640×480 pixelを軽快に再生できるMjpg-streamerを使っています。webcamは家電量販店で安く売っていたELECOM UCAM-DLD200BAも試してみたのですが、私の場合Logitech C270との方が相性が良いみたいです。ちなみにこの組み合わせで1280×960 pixelの再生も可能でした。でも、動画再生の様子ははカクカクという感じです。これは無線LANの通信速度にも大きく依存すると思います。

Mjpg-streamerのインストールについては多くの方が書かれているのですが、私はSLB Labs さんのサイト(http://www.slblabs.com/2012/09/26/rpi-webcam-stream/)を参考にさせていただきました。

作業手順は上記サイトに記載されている通りです。Raspbianインストール後、初期設定を行った後に、まずアップデートしておきました

# apt-get update
# apt-get upgrade

そして、こちらからmjpg-streamer-r63.tar.gzをダウンロード

任意のディレクトリで解凍
# tar xvzf mjpg-streamer-r63.tar.gz

コンパイルするためにlibjpeg8-devをインストール
# apt-get install libjpeg8-dev

シンボリックリンクを作成
# ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h

コンパイル
# cd mjpg-streamer-r63
# CFLAGS+=”-O2 -march=armv6 -mfpu=vfp -mfloat-abi=hard” make

/etc/rc.localファイルの# By default this script does nothing.の下あたりに下記を追記するとブート時に自動起動します。

cd /'ファイル パス'/mjpg-streamer-r63/
export LD_LIBRARY_PATH=.
./mjpg_streamer -i './input_uvc.so -d /dev/video0 -r 320x240 -f 3' -o './output_http.so -w www -p 8080'

(2013/02/24 -r -f の値を変更しました。 thanks D.K )

クライアントPCのブラウザで
http://ラズベリーパイのip address:8080
にアクセスすると、FirefoxやChomeさらに IEでもjavascriptを利用して動画を見ることができます。

また、スカイの社長日記さんのサイト(http://skysh.kyo2.jp/e391120.html) を参考にさせていただき、

/boot/cmdline.txt に smsc95xx.turbo_mode=N を追加 ===> (2013/02/03追記へ)

# raspi-config にて

overclock –> Turbo 1000MHz ARM, 500MHz core, 600MHz SDRAM, 6 overvolt
memory_split –> 16

にしてあります。また無線LANの設定は前回のエントリー(修正アリ)の通りに設定しました。

さて、C270 webcamにはマイクも付いていますので音声も同時ストリーミングに挑戦してみました。

こちら pruperさんのサイト (http://prupert.wordpress.com/2010/08/02/stream-live-audio-from-a-microphone-in-near-real-time-in-ubuntu/)や

こちらのサイト (http://ffmpeg.org/trac/ffmpeg/wiki/Capturing%20audio%20with%20FFmpeg%20and%20ALSA) を参考にしました。

まずffmpeg と lame をインストールします

# apt-get install ffmpeg lame

# arecord -l で Audio Input device を表示させます

**** List of CAPTURE Hardware Devices ****
card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0

C270 webcamの音声(Microphone on the USB web cam)は上記の通り card 1 ですので ffmpeg の -i オプションで指示する値を hw:1 にします。

# ffmpeg -f alsa -ac 1 -i hw:1 -acodec libmp3lame -ab 32k -re -f rtp rtp://239.5.5.5:1234 >/dev/null 2>&1 &

上記を実行した後にクライアントPCから VLC mdedia player を起動して

メディア (Media)- ネットワークストリームを開く(Open Network Stream) – ネットワークURL欄に rtp://239.5.5.5:1234 – 再生 (Play)

の順にすすめば音声も聞くことができます。

【映像・音声の遅延について】
ネットワークの通信速度にもよるのでしょうが、私の実験では映像に1秒-3秒くらいのディレイがあります。さらに遅れて音声が届くという感じです。

【CPU等の使用率: topの抜粋です】

画像のみの時 (Mjpg-streamer)

top - 21:03:22 up 2 min,  1 user,  load average: 0.37, 0.26, 0.11
Tasks:  60 total,   1 running,  59 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.1 us, 10.7 sy,  0.0 ni, 85.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    497764 total,    68868 used,   428896 free,     8976 buffers
KiB Swap:   102396 total,        0 used,   102396 free,    39144 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 2187 root      20   0 45760 1652 1468 S   5.2  0.3   0:02.35 mjpg_streamer

画像+音声 (Mjpg-streamer + ffmpeg)

top - 20:59:27 up 33 min,  1 user,  load average: 1.04, 1.12, 0.82
Tasks:  63 total,   2 running,  61 sleeping,   0 stopped,   0 zombie
%Cpu(s): 59.2 us, 15.4 sy,  0.0 ni, 25.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    497764 total,    99988 used,   397776 free,    12920 buffers
KiB Swap:   102396 total,        0 used,   102396 free,    57880 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
15352 root      20   0 37268  10m 4380 R  56.7  2.1   7:56.70 ffmpeg
 2170 root      20   0 53952 1840 1468 S   5.5  0.4   1:43.38 mjpg_streamer

ffmpeg はCPUの使用率が高いです。

調子良く運用できそうだったのですが、やはりエラーメッセージを出して止まってしまいます。 (涙)

Jan 30 17:51:35 raspberrypi MJPG-streamer [2209]: Error grabbing frames
Jan 30 17:51:35 raspberrypi kernel: [12810.889315] uvcvideo: Non-zero status (-5) in video completion handler.

この方法で音声も送るのには無理があるのでしょうか?今後の課題です。

キャプチャ

(2013/02/03 追記)

残念ながらしばらく動かしていると止まってしまい安定しません。どうやらUSB webcamだけでなくUSB無線アダプタの方も安定しないみたいです。smsc95xx問題関係かと思い対策方法を検索してみたところ、次の記事が目に留まりました。

http://www.raspberrypi.org/phpBB3/viewtopic.php?t=21963&p=259518

bgirardot さんがdevelopment firmwarenへのアップデートについて記載されていたので、カーネルパラメータに追記する方法に変えて試してみました。参照先にもかかれているように一度開発版のファームウエアにアップデートすると、元に戻すのはとても難しいので注意が必要です。(bgirardotさんはSDメモリカードのコピーを勧めています)

https://github.com/Hexxeh/rpi-update へアクセスしてこちらに書かれている通りに作業しました。(スパーユーザーの権限で行います)

■ [preparaitons(準備作業)]
私にはこの作業は必要なかったですが、行うとすれば

# apt-get update

# apt-get install ntpdate

# ntpdate -u ntp.nict.jp

# apt-get install ca-certificates

■ [rpi-update コマンドのインストール]

# wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update

# apt-get install git-core

■ [rpi-update の実行]

# rpi-update

# reboot

■ [上記コマンド実行の結果]

# uname -a の表示です。

Linux raspberrypi 3.6.11+ #366 PREEMPT Wed Jan 30 12:59:10 GMT 2013 armv6l GNU/Linux

まだ、長時間テストしているわけではないのですが安定性は良いみたいです。ただ、mjpg-streamerを実行した時の再生スピードが遅くなってしまったような感じがします(バラツキがある)。

(2013/02/05 さらに追記) 残念ながら上記設定でも長時間運用していると下記のエラーを出して動画配信が止まってしまいました。安定的に連続で動かせるようになるには、しばらくかかりそうです。

Feb 5 05:19:23 raspberrypi kernel: [78477.340097] uvcvideo: Non-zero status (-5) in video completion handler.

Raspberry Pi 無線LAN (wifi) SSH接続ができない

WLI-UC-GNM2
Raspberry pi を有線LAN経由でSSH接続してHeadless運用(モニタとかキーボードを接続しない)していたのですが、無線LANでSSHが使えれば離れたところにも設置できて便利です。そこでwifiで使うために、BUFFALOの無線アダプタを購入いたしました。型番はWLI-UC-GNM2。Amazon.co.jpで891円でした。無線LANに関してはWeb上で多くの方が報告されていますので問題ないハズと思ったのですが、なかなかうまくいきませんでした。

まず私のRPi環境のスペックです

Raspberry Pi Model B
Downloaded image: 2012-10-28-wheezy-raspbian.zip
Kernel version: 3.2.27+
Wireless adapter: BUFFALO WLI-UC-GNM2
lsusb output: Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]

board revision
root@raspberrypi:~# cat /proc/cpuinfo

Hardware : BCM2708
Revision : 0003

電源は 5V 2A
無線アダプタはセルフパワードハブ( powered hub)に接続
(電源に問題があって通信できない事例をWebで見ていましたので、この構成で試してみました。が、結果的には直接RPiに無線アダプタを挿しても同じでした。)

アクセスポイント側 BUFFALO WHR-HP-GN

無線アダプタは接続するとすぐ認識できました。

root@raspberrypi:~# lsusb
Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]

root@raspberrypi:~# dmesg
[    3.263009] usb 1-1.2: new high-speed USB device number 4 using dwc_otg
[    3.409389] usb 1-1.2: New USB device found, idVendor=0411, idProduct=01ee
[    3.423267] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    3.437499] usb 1-1.2: Product: 802.11 n WLAN
[    3.448902] usb 1-1.2: Manufacturer: Ralink
[    3.460167] usb 1-1.2: SerialNumber: 1.0

IP address ,SSID, 事前共有Key等をセットします。(IPアドレス等は実際とは異なる便宜上のものです)LANケーブルが差し込まれている時は eth0 から通信して、また反対に無線アダプタが差し込まれている時はwlan0から通信する事を目的としています。 (1/29 追記: 後日、新しいSD-CARDに再構築してみたところ、下記の設定だけではデフォルトゲートウエイがwlan0に切り替わりませんでした。何の設定をしたのか思い出せないので、しかたなくeth0の設定をコメントアウトしました。また、アクセスポイントはWPA-PSK 暗号化はAESで試してみました。 )

</etc/network/interfaces>

auto lo
iface lo inet loopback

# auto eth0
# allow-hotplug eth0
# iface eth0 inet static   
# address 192.168.11.200
# network 192.168.11.0
# netmask 255.255.255.0
# broadcast 192.168.11.255
# gateway 192.168.11.1


auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.11.201
network 192.168.11.0
netmask 255.255.255.0
broadcast 192.168.11.255
gateway 192.168.11.1

wpa-ssid "エスエスID"
wpa-psk "事前共有key"

</etc/resolv.conf>

nameserver 192.168.11.1
root@raspberrypi:~# shutdown -r now

無線アダプタをセットして、LANケーブルは抜いた状態でリブートします。

root@raspberrypi:~# iwconfig
lo        no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"エスエスID"
          Mode:Managed  Frequency:2.412 GHz  Access Point: 00:24:A5:xx:xx:xx
          Bit Rate=48 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
          Link Quality=70/70  Signal level=-19 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:1  Invalid misc:16   Missed beacon:0

eth0      no wireless extensions.

リンクはOKみたいです

root@raspberrypi:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.11.1      0.0.0.0         UG    0      0        0 wlan0
192.168.11.0      *               255.255.255.0   U     0      0        0 wlan0

ルーティングテーブルもOKみたいです。おや?簡単に繋がりました。インターネットもOK。Raspberry Pi側から通信する事は全然問題は無いですね。ですが・・・
クライアントのWindowsPCから有線LANでは繋がったSSHが無線LANでは繋がりません。(涙)

かなりの時間を費やしてようやく原因がわかりました。

(1)Windows PC   --- ping ---> Raspberry Pi  <NG>
(2)Raspberry Pi --- ping ---> Windows PC    <OK>
(3)Windows PC   --- ping ---> Raspberry Pi  <OK> (しばらくの間だけ)

上記のような状況です。Raspberry PiからクライアントPCに向けてPingを打った直後のみ、クライアントPCからRaspberry Piに通信できます。クライアント側からの ARP Request に Raspberry Pi の wlan0 が応答を返さない事が原因みたいです。

この対策を探すために必死にラズベリーパイのフォーラム等を探しまくりましたが、一番有力な解決策と思われるものは定期的にRaspberry Pi側からPingを打つ方法でした。簡単と言えばそうですが、これはスマートとはいえない解決策ですね。たいした成果も得られず、しかも夜遅くまで作業していたので、私はくたくたになってしまいました。(意識もうろう)

そこで後日、状況を整理するために、普段使っていなかった無線ルータ(PCI GW-MF54G2)で実験環境を作ってみましたところ、驚いたことに、何の問題もなく無線LANでクライアントマシンからSSH通信ができました。Raspberry Pi側ではなく、アクセスポイント側 BUFFALO WHR-HP-GNの仕様に問題があったということが結論でした。

バッファロのサイトを見たら新しいファームウエア【Ver.1.85 (R1.18/B1.00)】があって、「broadcast通信が出来なくなる場合がある問題を修正しました。」と書かれていましたので早速アップデートしたところ、現在使用している無線LANアクセスポイント (WHR-HP-GN)でも使えるようになりました。めでたしめでたしです。

Raspberry PiとArduino 間 nRF24L01+ 通信実験

一月の末に RS Compornets社に注文予約して待つこと8ヶ月、やっと Raspberry Piが先日我が家に届きました。私はケースも一緒に頼んだので送料込みで合計金額が$49.49 USD 、日本円で¥4,082でした。

早速 Debian派生のLinux、Raspbianをインストールしてみました。イントールにあたってはJunさんのホームページがとても参考になります。raspbianのバージョンですが、私は2012-09-18-wheezy-raspbianをインストールしました。蛇足になりますが、「ラズビアン」っては、日本語では少々危ない響きですね。わたしは滑舌(かつぜつ)が良くないのでとても心配です。

GUIで操作することもできて、ネットワークにも繋がる。それでいてこの価格は、すごいの一言ですね。色々と応用ができそうです。

その後、Raspbery Piの GPIO で nRF24L01 を動かす記事を発見しました。

Raspberry Pi View topic – NRF24L01 RF Transceiver

Beaglebone 用に書かれたnRF24L01 Libraryを Raspberry Pi で動かせるように書き直したと書かれています。( Thanks Mr. Purinda Gunasekara & Mr./Ms. direk! ) この記事を参考に、Raspbery Pi と Arduinoとの通信実験を行いました。

※ 2.4GHz帯 ISMバンドを使用する小電力機器でも日本国内で使用する為には、電波法により技術基準に適合していることを、特定の認証機関で証明してもらう必要があります。違反しますと、1年以下の懲役または100万円以下の罰金という刑事罰の対象になり得ますので、くれぐれもご注意ください。

こちらより nrf.tar.gz をダウンロードします。(Click here to start download from sendspace をクリックするとダウンロードできます)

以下、私はRaspberry PiにSSHで接続して作業を行いました。

$ tar -xzvf nrf.tar.gz
$ cd nrf3

解凍してできた nrf3ディレクトリにある main.cpp がRaspberry Pi側のサンプルコードです。pingを打ってArduino側から戻ってくるreplayを待ちます。ArduinoのRF24ライブラリのサンプルプログラムを元に作られているようですね。roleピンの機能は省かれているみたいです。

また、pingpair_dyn_arduino_pongbackディレクトリにあるコードはArduino側のものになります。Raspberry Pi からのping を待ち、受け取ったら応答を返す動作をします。ちなみにArduinoにはRF24ライブラリが必要です。

$ make

コンパイルすると dist/Debug/GNU_Arm-Linux-x86/ ディレクトリに rf24bb が作成されます。これが実行するプログラムになります。

次に上記プログラムを実行するために、Raspberry PiでSPIを使えるようにします。「竹本 浩氏のページ」を参考にさせていただきました。

/etc/modules に spidev の1行を追加して、/etc/modprobe.d/raspi-blacklist.confのblacklist spi-bcm2708を#でコメントアウトします。

</etc/modules>

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
spidev

</etc/modprobe.d/raspi-blacklist.conf>

# blacklist spi and i2c by default (many users don't need them)

#blacklist spi-bcm2708
blacklist i2c-bcm2708

リブート後、

# ls -l /dev/spidev* を実行して /dev/spidev0.0 and 0.1 が表示されることを確認します。これでソフトウエアの準備は完了です。


ハードウエアの結線ですが、raspberry pi 側のmain.cppの中に RF24 radio(8, 25); の記述があるのでnRF24L01のCEをGPIO 8,CSNをGPIO 25に繋ぎます。

同様に Arduino側 pingpair_dyn_arduino_pongback.ino 中に RF24 radio(4,3); の記述があるのでnRF24L01のCEをdigital 4,CSNをdigital 3に結線しました。必要であれば数値を変更してピン・アサインを変えることができます。

$ sudo ./nrf3/dist/Debug/GNU_Arm-Linux-x86/rf24bb

全てをセットした後に、Raspberry Pi 側ではルート権限で rf24bbを走らせます。同じくArduino側もスタートさせておきます。

Raspberry Pi のターミナルに以下のように表示され、Raspberry Pi と Arduino 間の通信を確認することができました。

STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xf0f0f0f0e1 0xf0f0f0f0d2
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xf0f0f0f0e1
RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x03
RF_CH = 0x78
RF_SETUP = 0x25
CONFIG = 0x0f
DYNPD/FEATURE = 0x3f 0x04
Data Rate = Model = CRC Length = PA Power = Now sending length 4...Got response size=4 value=ABCD
Now sending length 6...Got response size=6 value=ABCDEF
Now sending length 8...Got response size=8 value=ABCDEFGH
Now sending length 10...Got response size=10 value=ABCDEFGHIJ
Now sending length 12...Got response size=12 value=ABCDEFGHIJKL
Now sending length 14...Got response size=14 value=ABCDEFGHIJKLMN

・・・