USBカメラをつないでみる
世の中にごまんとブログはあるので、適当に参考にする。
(35連休)4日目:Raspberry Pi(OpenCVのインストール〜リアルタイム顔認識) - hsuetsugu’s diary
OpenCVをapt-getする。結構大きいな。。。。
luvcviewもあっけなく動作したので、まずはUSBカメラの動作検証までは完了。
次は、OpenCVで1フレームごとのキャプチャする。これも世の中にごまんとコードがある。ここで、はまった。python-opencvをインストールしても、またしてもpython3では動作しない。python2.7では動作する。
どうやら以下のブログを読むとそもそもOpenCVそのものが ver2ではpython2.7しかサポートしていなかったらしい。よって、OpenCV3をpython3にバインドする、ということを自前でやる必要がある。
できなくもないが、そこまでしてpython3に拘っても面倒なので、ここはpython2.7であきらめることにする。そのうちだれかaptパッケージで用意してくれるさ。
ページ先頭のブログのサンプルをpython2.7で実行すると、以下のような予想外のエラーが出る。どうもVNC接続をしている先に表示できない。
あたっていた。HDMI画面には普通に表示できた。まあVNCでOpenGLは無理だから、cv.NamedWindow() で作るウインドウの調整でなんとかできるか試してみる。おかしい。cv.NamedWindow() は引数に明示しない限りOpenGL使わないはずだが、引数なしのデフォルトでも失敗。
仕方ないので、以下を参考にしてなつかしのMESAを入れる。まさかこの期に及んでMESAのお世話になるとは。
Raspberry PiにOpenCVを導入してキャプチャするまでと、トラブルシューティング - Qiita
あれ? MESAはすでに入っていた。ということはこれでは解決しない?
以下のブログで同様のトラブルをx11vncを使って回避している。
OpenCVとTightvncサーバー - 満腹居士 七転八倒の記
せっかくTightVNC serverを自動起動するようにしてあるが、いったんそれをOFFにしておき、x11vncを自動起動させる。
Raspberry Piでリモート操作できるようにするメモ – 1ft-seabass.jp.MEMO
/home/pi/
.config
/autostart/x11vnc
.desktop を準備した。よし自動起動成功。
あれ? vncでキーリピートしない。
Sakura/VPS/x11vnc - Home Server Journal
では「x11vnc -repeatで成功」と言っているのでやってみる。成功。
Raspberry PiとWindowsでクリップボード共有
Raspberry Piは顔無しで運用しているので、WindowsからVNCで接続している。
そうすると、やはりWindowsとRaspberry Piの間でcopy&pasteしたくなるわけだ。
あっけなく、うまくいった。これで地味に便利になった。
Raspberry Piにつなぐカメラを探してみる
玄関天井近くに無粋なWebカメラを設置したくはないので超小型カメラで解像度は低くてよいもの、がないのか探してみる。
なかなか魅力的。4000円なり。
そもそも、本家から出ている。
が、結局むき出し基板にケースを自作してとか考え始めると、USBカメラの方が無難か。ケーブルの長さもとれるし。以下のものは991円。安い。。。1.9 x 6 x 2.4 cmなら十分小さいかな。
iBUFFALO マイク内蔵120万画素Webカメラ HD720p対応モデル ブラック BSWHD06MBK
と思ったが、値段は若干あがるが1081円の LOGICOOL ウェブカム HD画質 120万画素 C270 にした。こちらの方が、ロッカーの扉の上に付けるにはいい形だし。
I2Cで温度センサをつないでみる
仕事でI2C接続をさんざん使っていながら、自分の手で直接接続したことがなかったので、初心に帰ってここから。
ラズパイマガジンの初心者用部品セットに入っていたADT7410を接続する。
ついに半田付けをする日がきた。ピンヘッダを付けるだけだが。
昔、半田付けがうまくできなかったトラウマがあるので(だからソフトウェアに走ったという話もある)、「半田付け コツ」でぐぐると、出てくる。。。 すごい世の中になったものだ。
村田製作所の教えに従い、半田こての先をきちんと清浄したおかげか、8秒のリズムに忠実に従ったおかげか、自分史上もっともきれいな半田付けに成功。テスターでチェックしたが隣同士のショートもしていない。
さて、ハードウェアの準備は整った。あとはソフトなのだが、2冊の本で利用しているpythonライブラリが異なるので面倒だな。
- ラズベリーパイ超入門
pythonでRPiモジュールを利用して説明していた。GPIOを利用するLチカはこれで動作したが、この本ではI2Cの制御にAdafruit_ADS1x15など、独自のモジュールを提供している。手元の温度センサーを直接制御するには不都合。 - ラズパイマガジン2016/6
秋月でこのマガジンとペアになっている部品群をまとめて購入したので、pythonコードもこちらの本を参考にすれば問題ない。が、wiringpiがインストールできない。
そうすると、今後も考えるとラズパイマガジンの環境にそろえた方がよさそうだ。wiringpiをなんとか使えるようにしよう。
% sudo apt install wiringpi
では「最新だ」と言われるので、どうもネイティブのwiringpiは入っているのだが、それをpythonから使うpythonパッケージがうまく見つけられていないようだ。
きちんと本家からもってきてビルドするのが正しいのか?
いや、ここにあるようにpipでスマートに入れられる、はず。やってみよう。
どうもよく分からないが、python2.7に対しては wiringpi が動作した。python3では駄目。上記のインストールをする前から実は python2.7 では動作していたのかもしれないので何とも言えないなあ。
ん? 以下のブログを参考にしてもう一度やってみよう。
E.S.C. — Raspberrry PiにWiringPi2 を(python3)
うまくいった。
どうもpython2.7とpython3.4が併存していると面倒だな。まあ、とにかくpython3でもwiringpiが動作した。
では、ラズパイマガジンに従ってソフト環境の準備を続ける。
- wiringpiをpythonから使えるようにする。
- apt-get install libi2c-dev
- Raspberry PiのインターフェイスとしてI2Cを有効化
- ADT7410の全機能を使うためのお呪い
- wiringpiを利用したサンプルコードを実行
root権限で実行しないと wiringpi.wiringPiSetup() が失敗する、ということがIDLE上で実行していると見えずはまりかけたが、コンソールから実行すればきちんとエラーが出ていた。
温度表示成功。
が、あまり変化がないので盛り上がらないな。
Lチカしてみた
さっそく秋葉原の秋月でRaspberry Pi 3 Model Bを購入。
入門書も購入。もうこれ以上ないという感じのベタな書名だ。
まずはLチカ(LEDチカチカ)をやってみる。ソフトで言えばHello Worldだな。
wiringpiパッケージがうまく見つからず一瞬はまったが、RPiパッケージは動作したので、当面はそちらを使うことにした。
しかし、ブレッドボードを使うと部品を再利用できるのが今更ながら新鮮。高校生のとき(何年前だよ)に半田付けしたときには「何か作るたびに小遣いがなくなる。。。」と悩んだ記憶が。
これは楽しめそうだ。
どのマイコンにする?
世のマイコンシステムで前から気になっていたものをもう一度調べなおしてみる。
Arduino、Raspberry Pi、Intel Edison、mbed。それぞれの違いを紹介 – ニフティIoTデザインセンターブログ
ラピッドプロトタイピングツールの比較(Arduino vs Raspberry Pi) | 株式会社バニーホップ
あたりを斜め読みして、気になる点をまとめよう。
- Arduino
安価なので分、メモリやCPUといったスペックは貧弱、というあたりが気になる。 - Raspberry Pi
Linux / python なのでソフト屋から見ると取っ付きはいい。消費電力は大きめなのでAC電源必要。ほぼ10年前のLinux PCと思えばよい。 - Intel Edison
超小型ながら、WiFiを搭載しており、さらにBluetoothを扱うこともできます。消費電力小さ目。Linux / python あり。 - mbed
C言語を使って開発。オンラインIDEという考え方が素敵だ。
ネットワーク機能はありませんが、モジュールとして有線、無線LANが販売されている。
で、考える。。。
- 玄関の靴ロッカーの中に、電源コンセントとLANルータがある。なので消費電力は気にしなくてよいし、Wi-Fiでなくて有線LANでOK。
- 開発言語はどれでもいいが、あとでクラウドにデータをアップさせたいのでCよりはpythonの方が楽かな?
- 世の情報量としては、Arduino、Raspberry Piの2強が抜きんでている。
mbedのオンラインIDEにはかなり興味があるのだが、やはり最初はRaspberry Piから入ってみることにする。
では、さっそく購入。ネットで買ってもよいのだが、たまたま暇なこの週末、久しぶりに秋葉原にでも行ってみるかと思い、あえて実店舗にこだわる。
Raspberry Pi 秋葉原の販売店 | タビログ(Tabilog)
Raspberry Piもいろいろバリエーションあり。
値段もたいして変わらないのだから、Pi 3 Model B にしておくか。当分 Wi-Fi は使わないはずだけど。
センサーも買わなければ。気圧センサーとカメラが欲しい。
ラズベリーパイで温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信 | Device Plus - デバプラ
Amazon ベスト センサーモジュール キット 20種セット
Raspberry Pi本体ボードとセンサーはケーブルで離さないとならない(センサーは靴ロッカーの外に出すので)ことを考えると、簡単な電子工作も必要そう。
参考になりそうなブログをちらっと見ておく。この例では人感センサーだが、まあセンサーの値をpythonで読み出す、という流れはこんなものか。あっけない。
あとは、参考文献も購入。以下の本にするかは分からないが、このあたりの本は1冊は買っておこう。
O'Reilly Japan - Raspberry Piをはじめよう