(IoT)に関するメモ。Piと様々なモジュールを使って進めていく。3のGPIOピンレイアウトは以下のようになっている。コマンドを実行する(MBAで動作確認)。vctest_get"多いし、見難い、。各コマンドの使い方は以下のページで概要は掴める。Pi.GPIOを操作するライブラリ+コマンドラインツール。Cで書かれているが他の言語のバインディングも多数公開されている。本家のGitは重いのでこちらから取得した方が良いかもしれない。Wi-fi機能が搭載されているので無線LANアダプタは不要。5GHz帯には対応していないので注意。WLI-UC-GNMを用いた。こちらも残念ながら5GHz帯は使えない。あと、しばらく稼働させていると触るのをためらうくらい発熱があるので何か熱対策が必要だと思う。AvahiはZeroconf仕様のLinux向けの実装となっている。reboot接続元ではBonjourサービスを起動しておく。いう名前でアクセスすれば良い。ここではraspiという短いホスト名にしておいた。IMX219PQ1/4.0型なのでスマートフォンに組み込まれているイメージセンサーよりも一回り小さいが、SONYお得意の裏面照射型なので高感度性能も高い。コマンドからカメラ機能を有効にしておく。3との接続には15ピンMIPIカメラインタフェース(CSI)にカメラモジュールのフレキシブルケーブルを挿すだけ。ねじれに弱いケーブルなので慎重に扱おう。ここで接続しているのはv2のカメラモジュールなので正常に認識しない。correctlyこれを解決するにはファームウェアをアップデート後、再起動する必要がある。rebootカメラモジュールの接続確認は以下のコマンド。(公式のコマンドリファレンス)カメラモジュールにアクセスするにはsudo権限が必要なので注意。raspistillコマンドはオプションはv2センサーでしか機能しないオプションもいくつかあるようだ。image.jpg一例としてタイムラプス画像を撮影するには以下のようなオプションを付ける。timelapse_%04d.jpgv2カメラモジュールで撮影した写真のEXIFを見てみた。F2.035mm換算の画角は約29mmとなっている。スマートフォンのカメラだと大体20mm前後なので少しだけ望遠寄り。17Mbpsの動画となるようだ。動画コーデックはH.264、いくつかのエンコードパラメータはオプションで指定できる。ビットレートは最大25Mbpsまでのようだ。それ以上を指定すると以下のログが出力される。-ex)を逆光用の設定にしてみたけどほとんど見た目には変わらなかった。17Mbpsの約2分間の動画(空を定点観測)で約30MB程度の容量になった。同条件なら1時間で1GB前後になる計算。H.264フォーマットなので、これを使いやすいMP4動画に変換するには例えば以下のような方法がある。Pi上でも特に問題なく実行できるオススメの方法。モジュールを利用する。サンプルコード類はGitHubに上げておく。(1/fps).ISOの値も変更できるようになっているので、もし低感度+スローシャッターで撮影したい場合はフレームレートを遅くしてからシャッタースピードを変更する必要がある。単純にISO値を低く設定して残りを全てオート設定で撮影しても、露出不足で写真が暗くなってしまう。framerateこのようなエラーが出たら、書いてある通り解像度やフレームレートを落とす。HDかHDサイズくらいで撮ると良いかも。動体を撮影する場合このカメラモジュールはローリングシャッターであるため、動体を撮るときはシャッタスピードが遅いと歪むので注意。(キャラクタ液晶)1602-V2のLCDを300円くらいで購入。3との結線はだいたい以下のサイトの通りでOK。GPIO7とGPIO8はT-Cobbler上の表記だとSPICSO1、SPICSO0になっているので注意。VOはGNDに繋いでしまうと液晶上の文字がほとんど見えなくなったので、可変抵抗(半固定ボリューム)を使って1.0-1.5Vくらいで調整するとちょうど良いコントラストになる。バックライトの明るさも適宜調整すると良い。PythonPythonでのサンプルコードはGitHubに。表示処理部分はAdafruitのモジュールを使うと簡単。GitHubセンサーセンサーモジュールの試用について。以下の2行を追加、その後再起動しておく。ファイルから現在の温度が取得できる。26.062計測精度は後述するBMP180センサーと実測で同等程度だった。コストパフォーマンスはなかなか良いのではないだろうか。モジュールを使って値を読み取ることもできる。W1ThermSensorコマンドラインツールも付属しているので併せて試してみる。print(e)複数のDS18B20センサーを接続してもIDで判別できるようになっている。フィリップス社が開発したデバイスとのシリアル通信方式のひとつ。コマンドを利用できる。パッケージを入れておく。77Pythonからデータ取得するにはAdafruitのモジュールが便利。Python3.x系でも動作することを確認。Pa'.format(sensor.read_sealevel_pressure()))コード中にはBMP085とあるがBMP180のセンサーでも動作する。Pa気圧測定の活用方法を考えねば。(温湿度センサー)シリアル接続の温度/湿度センサーBMP180と同様に、AdafruitがPythonモジュールを公開している。こちらもPython3.x系でも動作することを確認。Humidity=53.0%安価なだけあって精度は低い。え付けの庫外湿度計と比較して20%ほど数値に開きがある。温度計測の精度も±2°C程度はあるようだ。(焦電人感センサー)ドーム型のフレネルレンズは光を効率良く集めるためのもの。基板下に取り付けられている半固定抵抗で感度を調整することができる。モーションの検知はGPIOの値を読み取るだけ。RPi.GPIOモジュールのイベントハンドラを使い、エッジの立ち上がりを検知したらコールバック関数に処理を渡すと良い。MCP3008量子化は10bit、サンプリング周波数が最大200kHz。サンプリングレートを落とせば8chまで使えるのでコスパは高い。ADコンバータを上手く活用できるようになれば電子工作でできることの幅が一気に広がるとは思うけど、まだ知見が少なすぎるのでもっと勉強する必要がある。半固定ボリュームこの部品の呼び方はいくつかあるようだ。抵抗値をどうやって読み取るのかわからないので、型番毎の抵抗値をメモしておく。3の主に性能面を検証する。安定してどのくらい負荷の高い処理が実行できるか。線形SVMによる文書分類モデルをscikit-learn実装を用いて作成してみる。利用するので二値分類モデルとなる。total学習自体はなんとか完走。cv)で約25分時間を要した。3のカタログスペックだけで判断するともっと速く処理できても良いのではと思ったけれど、実際はこれだけの時間がかかってしまった。プロセッサ(コア)数を自動検出させて実行みるとOSErrorが発生。3は4コアなので4プロセス生成されるようだ。1プロセスでちょうどメモリを45-55%程度消費していたので妥当な結果。memory学習処理実行中のCPU温度の推移は以下の通り。Pi用のケースを外して基板剥き出し状態で計測。ケースを付けるとさらに温度が上がる。70°C超えるとなかなか危険、この温度になるとCPUのヒートシンクを手で触り続けるのも難しいくらい。計算処理はサーバ側に任せて、末端のデバイス側はあくまでデータ収集/送信の役割に徹するのが安全なようだ。その他機能/ツールメモなどパワーマネージメント機能Wi-Fi接続が頻繁に切断されてしまう場合はパワーマネージメント機能が働いている可能性がある。ファイルを設置する方法が良さそう。temp=49.9'C70°Cを超えてくると、CPUやLANコントローラが手でずっと触れ続けるのは厳しいくらい熱くなる。初期設定段階でいろんなモジュールをコンパイル・インストールしている際に起こりがち。この温度だとSSHのコネクションが突然切れることも増えてくるので熱対策が必要。Piのケース有無でも10°Cほど温度が変わるようだ。Piなどの機器と組み合わせてIoT開発をサポートするクラウドサービスを試用。Things提供機能はデータの可視化程度なので導入のハードルは低い。IoTよりオススメできる。device/month)ということなので、そこそこの量のデータを送ることができるようだ。PricingGitHubにM2XをHTTPおよびMQTTプロトコルから利用するサンプルコードを上げておく。Dashboard他のIoTクラウドサービスと比較すると認証・認可周りがしっかりしているし、セキュリティ面での安心感は高い。他のAWSサービスとの連携をするなら連携するサービス分の学習コストを都度払う必要がある。SNSと連携するサンプルを作るのが楽。マイクロサービスみたいな要領で開発する。myDevicesフランスのスタートアップ企業が提供するIoTサービス。日本語/英語ではあまり情報が集まらない。Osoyoo社と提携してたりするので営業活動も力を入れているようだ。Cayenne接続されたセンサーモジュールが自動認識されるのは楽だが、起動するデーモンが認証無しのHTTPでひたすらデータを送ってるのでセキュリティ面は危ない。premium.MQTT.ORGメッセージ指向ミドルウェアのアプリケーション層で使用される、TCP/IPによるPub/Sub型データ配信モデルの軽量なメッセージキュープロトコル。フットプリントが小さくM2M/IoT向けの通信プロトコルとして普及してきている。接続してMQTTによるメッセージ送受信を試してみよう。モジュールが利用できる。モジュールが利用できる。mqtt上記モジュールを利用してMQTT通信するサンプルコードを上げておく。GitHubまた、上述で説明したM2XサービスもMQTTプロトコルに対応しているようだ。様々なMQTTブローカー実装が公開されているのでいくつか試しておきたい。重いことがあるので勉強用にMQTTブローカーサーバを1つくらい構築しておくと良いかも。MosquittoMQTTのリファレンス実装であるMosquittoサーバを構築する。バイナリインストーラやrpm/aptレポジトリが公式配布されているのでインストールは簡単。以下から対象OS用のレポジトリから取得する。mosquitto-clientsPus/Subの動作確認。mosqsub/21800-raspiMQTTでSSL通信を手軽に試すには自己認証局とサーバー証明書を作成して、mosquittoの設定ファイルを一部変更して起動するだけ。ディレクトリが作成されるようだ。/etc/mosquitto/certs/server.keyまた、独自ドメインを持っているのならオレオレ証明書を使うのではなく、無償でSSL証明書を発行できる認証局(CA)を利用した方が良い。Encryptサービスを利用する手順が説明されているのでこれに従って設定すればOK。mosquittoMosquittoはMQTTのリファレンス実装なのでMQTTの仕様自体は網羅されているけれど、冗長化のための機能も無いので実際のシステムに組み込むには難しいか。VerneMQ冗長化にも対応しており実運用でも十分利用できるプロダクトようなのでこちらは入念に検証してみたい。現在検証中、あとでまとめる。(GitHub)IoT関連の勉強中に作成したサンプルコードをGitHubに置いておく。各センサーモジュール、LCD、IoTクラウドサービスなどを利用するためのサンプルコード等が含まれる。Pythonが多いが一部はRubyやJavaScriptも含まれる。V2.1で安価に自宅内ペット観察システムを作るには。Stationみたいなシステムが理想。Piを使って自作してみる。PiのmicroSDカードにライブ映像を録画保存するのは現実的にムリなので工夫する必要がある。コマンドでそれぞれ静止画/動画を撮影することができる。シャッタースピードやISO感度の変更、タイムラプス撮影機能も備わっており意外と高機能。PiのCPU温度推移。(毎秒測定してみたが、横幅のスケールの都合上見難くなってしまった)動画撮影時のCPU温度はだいたい65°C前後、GPUも併用しているためそれほど温度上昇はしていないが、無停止稼働は厳しそう。V2.1のレンズやセンサーだと画質はもちろん、高感度性能や逆光耐性が不十分。Piからデジタルカメラを操作する方向でも検討してみる。SONY製デジタルカメラはWi-fi経由で接続して細かくリモート制御できる。Pi用のSDKなどは提供されていないが、機能はHTTPのAPIから操作できるのでプラットフォームを選ばないのも良い。beta部屋全体をファインダーに収めるには出来る限り広角で撮影する必要がある。ここでは手持ちの16mmのレンズを使用する。前述の通り、動画撮影はストレージ容量問題があるので、タイムラプス撮影を採用した方が良さそう。自分で撮影部分の処理を書くのは難しくはないけど公式有料アプリもあるのでこちらを使って楽しむのもアリかも。上述で紹介した焦電型赤外線センサーと組み合わせる。Sensorストレージ容量の節約を目的として、動体検知をトリガーとして撮影する方式を検証する。HC-SR501センサーは半固定抵抗で検知感度を適宜調整していく。検知処理自体はGPIO出力のエッジが立つのでそこを読み取ればいいだけ。Detection動体検知センサーに限らず、センサーモジュールは常に正しい(もっともらしい)情報を検知できるわけではない。製品によっては検品が不十分だと異常値を検知する頻度も高くなる。ここではセンサーの異常値パターンをモデル化する方法を検討してみる。簡単な事前検証としてBMP180センサーによる気温と気圧の測定値を見てみる。M2Xを利用して可視化してみると外れ値が稀に検知されていることがわかる。電源OFFしていた日も多いので、もし無停止で定常運用する場合はもっと高頻度に発生すると考えられる。M2Xのグラフだと縦軸のスケールが外れ値に引っ張られてしまうようなので解消したい。Factor(LOF)を使って外れ値の検知を試みる。暗い外出時は電気を消すしカーテンも閉めていることが多いので光量が足りない。露光時間を長く取ると被写体ブレしてしまうし、ISO感度を上げすぎると画質が劣化する。赤外線フィルターを使えば光量問題は解決するけど色が消えてしまう。カメラを外部から電源On/Offしたいα7IIの電源On/Offだけは外部からリモートで操作できない。物理レバーを動かす必要があるので何かギミックを考えたい。