ラズパイを使って僻地にモニターカメラを設置するまでの最終章、備忘録です。

 「ソラコムキャンペーン植物観察キット」手順で概ねの手順は出来上がってるのですが、いつまでもソラコムのスペースを間借りしているわけにもいきません。

 別途amazonのアカウントを設ける案もありますが、すでに使用しているレンタルサーバーに「FTPアップロードするが適当!」との結論に至りました。

 ただしこの方式だと何らかの必要性で手動では遠隔で reboot したいときにできない。

2017-10-raspberry_pi-001.jpgほぼ完成品、ラズパイにアクリルケースの下半分が取り付けられていて
電源ケーブル(上) USBカメラ(左下) ドングル(左中央) 上に少し見えるのがLCDとラズパイをMHDI接続する一体となったコネクタ
下辺のGPIOからの電源供給等のソケットを利用して支えの一部にしている
この目的だけの為には最終的にはディスプレイを外せる構成でもいいのですが、
メインテナンスの為には付けた状態で制作した

1.構成パーツ・準備等

ラズパイ: raspberry pi3 B これにGUI版のフルオプションのraspbian を入れたもの

画像撮影: バッファロー BSW13KM01H の古いやつに、ソラコム提供の take_picture.sh を改造使用(一部不具合あり:文字化けする)。

画像のアップロード: Karan Ingram 氏のドキュメントを参照して作ったレンタルサーバーへFTPする自作プログラム(upload_image_to_xxxx.sh)

自動アップロード: 定刻に撮影した画像をレンタルサーバーにアップロードを自動で行う。
 5-19時の毎時 00 15 30 45 の60 コマ/日
 これを crontab に設定した。

画像URLのパスワード設定: レンタルサーバのファイルマネージャのところにBasic認証のツールがあって、自動的に.htaccessが置けるようになっている、便利! ただしアクセス制限をかけるURLを間違えないように。

通信手段(画像のアップロード): AK-020 ドングルでソラコム通信。 ソラコム提供の connect_air を自動起動するようにする。
 ただ~~し、reboot では自動接続しない時もあるようなので、ドングルの緑の点滅で確認する。電源ONで試す。

消費電力等: AK-020は待機電流50mA(通信時500mA)だそうです。ラズパイは待機電流400mA程度か。 それにしてもドングルは熱を持つから50mAと言うのは本当か? AK-020は仕様では待機時は1.5秒の点滅だそうだが、通信してなくても四六時中0.5秒の点滅をしている。 不良品を出してるみたいだけどどうでもいいか。
日立の車用ブースターバッテリーでも18000mAh(12V)。
要するにかなりの大型バッテリー動作でも1週間も持たないのでAC電源が必要。

2.設置

設置に持参するもの:

 ラズパイ、USBカメラ、USBドングル、ワイアレス・マウス・キーボード
 ディスプレイ(オソヨーの3.5インチLCDラズパイ用のを買いました (^^♪ 
 バッテリー (ポータブルで試してみるときのため)
 ノートパソコン (情報収集や結果確認)
 スマホ (結果確認)
 拡大鏡 (ディスプレイの文字が小さいため)

3.障害対応

 レッドランプ点灯(信号・サービス無し)がときたま発生、この場合は復帰する。

 観察によると再起動で、USBドングル、これがグリーンランプ点灯(初期化中)のままになったりする。
 LCDディスプレイのスイッチ(画面のみのスイッチと思うが)ONOFFにかかわらず、reboot で2回に1回以上ドングルがグリーンランプ点灯状態から脱出できない。

 外来ノイズ等何らかの原因でシステムがフリーズする可能性がある。

 夏場は雷で停電が起こる。 通電後の自動復帰はまれにできないことが想定される。

 以上の瞬断停電対応に、root 権限のcrontab でプログラムしてみる:
  深夜22時15分にreboot -i (OSの再起動+ドングル接続断)
     22時15分にconnect_air.sh (ドングル再接続)

 多分、長時間動きが無いとスリープ状態なのか定時のrebootがきかない様子(未確認)
 たまにドングルが通信を停止していることがある。復帰するときと全く復帰しないときがある。(原因不明)
 症状はドングルは待機状態(グリーンランプ点灯のまま)

 上記の原因不明にの通信対応として:
  カメラ撮影のみは24時間毎時撮影し、サーバーアップは5時から19時の毎時4回としてみる。
  ドングルの再接続をreboot時以外に(未明に一度)追加する。

 いや~~、あまり信頼できないんですよね。

 調査結果の障害対応の最終案:

 電源ON時に connect_air.sh (ソラコム提供)を自動実行
 未明に一回システムを再起動、その時 reboot にオプション-i を入れる(これで再起動後にすべてのネットワークインターフェースがシャットダウンするようですね) 
 reboot 1分後に connect_air.sh で再接続する。

 これで、停電時:復帰後に再起動しネットワークにつながった状態になるが、ならないときもある。
 何らかの原因でシステムが正常動作してないときは、一日一度の再起動で復帰する。

 ワイアレス・マウス・キーボードのUSBは設定後に抜いた状態で運用。

4:出来上がったもの、慣らし運転

 画像撮影:5時から19時の毎時00分、15分、30分、45分にUP、撮影は24時間毎時。 サイズ640x480ピクセル
 表示画像:その時点の最新の画像

 再起動・再接続を毎日22時35分に行い日中の故障の復帰をする。

 

 ソラコムのサービスを使って遠隔のラズパイにUSB接続したwebカメラの画像を自宅パソコンやスマホで観るまでの試行錯誤の備忘録です。 「ラズパイxソラコムキャンペーン植物観察キット」ハンズオンドキュメントに従った試行の記録です。

1.ラズパイをSSHでパソコンから操作する:

 ラズパイをSSHを有効にする:
 ラズベリーアイコン > 設定 > Raspberry pi の設定 > インターフェース のところで「SSH」を「有効」にする。

 パスワードを変える:
 default はID:pi、 password:raspberry となっていて、「このままだと危険だたよ~ん」と言ってくるので変えた。 
 ラズベリーアイコン > 設定 > Raspberry pi の設定 > システム のところで新しいパスワードを入れる。 前のパスワードを入れなくて変えられるので、パスワード地獄にならない。

 windowsパソコンに TeraTermを入れる:
 これでLAN(無線LAN)内のパソコンからはアクセスできる。 LAN外からはこれから。 

2.ラスパイでUSB接続のカメラを使う:

 カメラは手持ちの古いやつを使う。 モデル名はバッファローのBSW13KM01H 古すぎるが使えた(^^♪

 fswebcam というパッケージを入れる:
 sudo apt-get update
 sudo apt-get install -y fswebcam

 写す時は:
 fswebcam -S5 -r 640x480 sample.jpg
 ここで:
 -F5::?
 -S5:オートフォーカスや自動露光の時間を取るためフレーム数だけ取り込みをスキップする。このカメラには 5~10位が適当か。
 -r 640x480 取り込み画像サイズを決める。

3.windowsパソコンに取り込んで見るには:

 パソコンにWinSCPをインストールしてファイル転送する。 

 WinSCPはウィンドウがPC側とリモート(ラズパイ)側と2つ開き、ドラッグ&ドロップできとても便利、お薦め。

4.apache2を入れてwebカメラにする:

 ソラコムのテキストに従って以下の事をした:

 apache2 のインストール
 
cgi.load の enable
 CGIのプログラムはソラコムよりダウンロード:
sudo wget -O /usr/lib/cgi-bin/camera https://xxxxxxxxxxxxx
  ここで-Oは-大文字のオーだった(*_*; このカメラファイル
 camera にパーミッション x を追加
 camera の中の記述は上記2.の結果に従い fswebcam のところに -S10 を追記した
 ユーザー www-data をグループ video に所属させる(なんで必要?)

 つまずいたところ:
 apache2 のstart、restart でエラーが出た。 原因はcgi.loadのファイルがmods-enabledの方にうまくリンクできていなかった(*_*;。

 wgetの-Oのオプション、oだか、0だか、Oだか、大文字のOってのがあるんですね、勉強になりました。

 webカメラの確認は:
 http://(ラズパイのIPアドレス)/cgi-bin/camera
 実行するたびにその時のカメラ画像が出る。

5.ドングルAK-020を使う:

 温度を測るのは後回しにして、ソラコムのスターターキットが来たので、AK-020でインターネットに繋げてみた。

 結論、繋がったが大変~
     せっかくラズパイが5W程度の小電力なのにAK-020は結構熱くなり、電力の使いまくりで、ラズパイの省エネが台無し!

 実施したこと:
 パッケージ wvdial usb-modeswitch のインストール
 ソラコム提供のスクリプト connect_air.sh をダウンロード、パーミッションを変えて、/usr/local/sbin/ に移動する

 sudo で connect_air.sh の実行で接続できた、、、が、、、

 ・disconnectする方法が分からない。
 ・AK-020はその都度(電源ONとかドングル差し込みとか)自動ではつながらない。
 ・AK-020接続したとき、ラズパイはwifiとどちらでつながってるのか不明。
 ・AK-020で接続しているときは パソコン側からターミナルとしてラズパイに(wifi経由)SSH接続できない。
 ・パソコンからターミナルとしてラズパイに(wifi経由)SSH接続して、AK-020の接続を試みると途中で通信が途切れる。


 有線LANの場合はどうか、後の3項目は解消してるので多分にラズパイのwifiの又はドングルのどちらか、ラズパイの方が信用あるが、、

 という事で今のところ(2017年9月27日現在)、AK-020の接続を必要とする作業は、ラズパイ+ディスプレイ+AK020の組み合わせまたはパソコン―ラズパイを有線LANて使う。 

6.気温を測定する:

 ここでは例題として温度センサーDS18B20+を使ってw1通信デバイスの使い方をハンズオン。

 実施したこと:

 /boot/config.txt ファイルに dtoverlay=w1-gpio-pullup,gpiopin=4 を追記
 /etc/modules ファイルに 
w1-gpio
w1-therm
   を追記してreboot。 ラズパイ起動時に読み込まれるようになる。

 DS18B20+ が認識されたかの確認は:
 ls /sys/bus/w1/devices/ でここに28-で始まるデバイスw1_bus_master1 があればこれが温度センターという事らしい。

 温度測定は:
 cat /sys/bus/w1/devices/28-*/w1_slave で結果が出る。でた~!

7.fswebcamの問題点:

 fswebcam は画面の下にキャプションを入れて日付とか気温を入れるなどできるのがいいんだけど、上記4のwebカメラにして使うときにはきちんと表示できるが、画像をアップロードするために定点観測撮影した画像では文字化けしてしまう。 未解決。

fswebcam-test_pictr.jpgwebカメラとして外部からapache2にアクセスして見るときには下辺のキャプションの温度と日付はきちんと出るが、
直接fswebcamを実行したときの画像はその部分が文字化けして□□□のようになって出てこない。


8. 結果:

 ドングルAK-020使えた 接続はできるが切断はどうするか分からん かなり熱くなる
 w1通信の温度センサー使えた
 soracom beam を使ってデーターをクラウドに送る。 できたようだが確認ができない
 自前のUSBカメラが使えた webカメラとしては完璧
 fswebcamは何とか使えたが文字化けは未解決
 crontabは使えた
 soracom endorseは使えたようだ
 
 

 ここは レッスン3 ADコンバーター&SPI通信、レッスン4 液晶ディスプレイ&I2C通信 レッスン5 WEBIOPi 等の備忘録になります。

1.用語と内容

 SPI:serial peripheral interface SCLK(シリアルクロック)、MISO(master-in-slave-out)、MOSI(master-out-slave-in)、CE(多分chip-enable、ラズパイにはCE1とCE2がある)
 I2C: inter-integrated circuit:SDA(シリアルデータ)とSCL(シリアルクロック)2本線だけのデータ通信  SMbusが使われる)
 PWM: pulse width modulation パルス幅変調

2.プログラム

 #で日本語を書くとき:# -*- coding: utf-8 -*- を初めに入れとく、、と超入門書に書いてありました、しか~~し! ?サンプルプログラムからこれを消してもエラーは出ませんでした? どうして?

 さらに気がつくとidleのプログラミング画面に日本語が入りません、どうして?

 ADCのデジタル値の読み込み:「超入門書」ではコピペして使えと言ってる。

3.サンプル回路.プログラム応用編

 レッスン3 ADコンバータ+SPI通信

    センサーのアナログ値をデジタル値に変換して読み取る
    可変抵抗器でデジタル出力を変える
    ホトレジスターで明るさを測る、明るさでLEDをON/OFFする
    温度を計測する
    距離を測る

 レッスン4 I2Cデバイス

    温湿度センサー(ADT7410)
    小型LCD表示器(オソヨーキットの中の1602 LCDディスプレイ)

 オソヨーの raspberry pi スターターキットに入ってる部品類の中で、温湿度センサーやLCD表示機のように「超入門書」の解説にあるものと違う時は、オソヨーのホームページにキット部品に合わせた部品解説とサンプルプログラムが載ってて、これを使うとよい。安っぽい部品を扱ってる割には懇切。pythonプログラミングの方を参照する。
 説明も「~~してくださいませ」と超ていねい。

 I2Cのモジュールを有効にする:
 ラズベリー > 設定 > Raspberry piの設定 > インターフェース で有功にする。
 導入モジュール:ic2-tools、python-smbus

 I2Cデバイスのアドレスを知るには:
 ターミナルで sudo i2cdetect -y 1 (1はイチ)で結果を見る。 バスにつながってるのが皆出てきた。

 初期化処理
 bus = smbus.SMBus(1)
 address_adt7410 = 0x48 (ADT7410温度センサーの場合)(0x は引き続く数字が16進数表記されることを示す)
 address_lcd1602 = 0x27 (1602 LCDディスプレイの場合)
 register_adt7410 = 0x00 

 関数定義
 いろいろあって思考の外の世界。

 LCDのの結論:バックグラウンドライトのコントールがきかないこともあり動かすことはできなかった。

 PWMの結論:デバイスがオソヨーに入ってなく未実施。

 超入門書で取り上げた電子工作例で出てきたプログラムを中心に備忘録としてまとめています。どこの場所で出てきたかでまとめてある。

 レッスン1 LEDの点灯、レッスン2 タクトスイッチ までの範囲です。

1.プログラムの全体の形

 import文

 関数定義

 初期化処理

 メイン処理

 終了処理

2.import文

 import RPi.GPIO as GPIO ラズパイのGPIOを「GPIO」と言う名称で使うヨ
 from time import sleep 「time」というモジュールから「sleep」という関数を使用可にする。
   sleep(処理停止秒数ms) ここで処理停止秒数だけ処理停止する

3.関数定義

 def my_callback(channel): my_callbackと言う関数を定義する、()内はchannelという引数、定義内容は段差下で記述
 global ledState ledStateと言う名の変数をこの関数でも使うよと言う宣言。
 ledState = not ledState ledStateと言う名の変数の状態を変える。 
 

4.初期化処理

 GPIO.setmode(GPIO.BCM) GPIOの番号をブロードコムの論理番号にする
 GPIO.setup(25, GPIO.OUT) GPIO25をOUTにする
 GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW) 上に加えて初期状態をLOWとする
 GPIO.setup(24, GPIO.IN) GPIO24をINにする

 GPIO.setup(24, GPIO.IN, pul_up_down=GPIO.PUD_DOWN) 上に加えプルアップダウン抵抗をプルダウン抵抗を有効にする

 GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback, bouncetime=200) GPIO24の立ち上がり検出、立ち下がりの時はGPIO.FALLING、bouncetime=秒数はチャタリングの除去の時間

 ledState = GPIO.LOW ledStateという名の変数を設定し初期状態でGPIO.LOWという値(状態)にする

5.メイン処理

 try: と except の間に段下げしてメイン処理を入れる。段下げは自動に任せる。合わせないとエラーになるので要注意。

 while true:  ループで繰り返し実行 内容は段下げで

 GPIO.output(25, GPIO.HIGH) GPIO25をHIGHにする

 if GPIO.input(24) == GPIO.HIGH  ==の前後はスペース、その他 > >= < <=
 else: ifと一体で、ともに内容は段差下で。

6.終了処理

 exept KeyboardInterrupt: キーボードのCtrl/cでプログラム処理に割り込める
 pass 何もせずに次に移る
 GPIO.cleanup() GPIOの設定をリセットする

7.未決

 カメラ接続
 subprocess
 args

電子工作するときの、よく参照する雑情報の備忘録です。

1.抵抗器の公称値とカラーコード

 公称値:よく使われる値:
 1.0 1.2 1.5 1.8 2.2 2.7 3.3 3.9 4.7 6.8 8.2
 
デジタル回路だから赤字ので十分ですね。

 カラーコード: 覚え方

 カラーコード表示は右から:値2または3本-位どり-誤差 の4本または5本

 虹を意識して並べられている

 色 数値 位(10のx乗) 誤差±%   色の覚え方

 茶  1    1       1%       お茶を一服
 赤  2    2       2%       赤いニンジン
 橙  3    3                橙色のみかん
 黄  4    4                岸恵子 四季の色
 緑  5    5                緑はGO
 青  6    6       0.05%     青二才のろくでなし
 紫  7    7       0.25%     紫式部
 灰  8    8       0.1%      ハイヤー
 白  9    9       0.05%     釧路
 黒  0    0                黒い礼服
 金      -1       5%
 銀      -2       10%

2.ダイオード、LEDのアノードとカソードの区別

 リード線の長さで区別してあって、長い方(アノード)から短い方(カソード)に電流が流れる。 

 電子回路記号で△の方と―の方とで線の長い短いで関連付けると覚えられる。

 やたらにニッパーで切ってしまうと分からなくなるので要注意。

3.ファイルのパーミッション

 確認方法:

 設定方法:

4.raspbianをいじくりまわすのによく使うlinuxのコマンドなど

 cd cd / cd ./ cd ../ カーソルの現在地移動

 ifconfig -a ネットワークインターフェースの状態確認など

 ls -l そこにあるフォルダやファイルのオーナーやパーミッションを確認する

 mv ファイルを移動する

ラズパイのページ その1 ラズパイ環境を整えるまで
ラズパイのページ その2 ラズパイの中身を理解する