2017年9月アーカイブ

 ソラコムのサービスを使って遠隔のラズパイに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/ に移動する
  curl -O http://soracom-files.s3.amazonaws.com/connect_air.sh (ソラコム提供)
  chmod +x connect_air.sh (実行を追加)
  sudo mv connectair.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 ラズパイの中身を理解する

 ラズパイの中身を理解し、「RaspberryPiで学ぶ電子工作」に従って電子工作プログラミング環境を整えるまでの備忘録を記録しています。 自分の備忘録なので情報は不正確なので参考にしませんように、悪しからず。

1.ラズパイにインストールしたOSとプログラミング環境

 OSはDebian系のraspbianでubuntuと同じで素人のためにWEBの中に多くの先人の情報があるので安心です。
 さらに jessie 系列のらしい。

 システムのターミナルはLXTerminalを使う

   ラズベリーアイコン > アクセサリ > LXTerminal 又は上のタスクバーのアイコンから起動する。

 プログラミング言語はpythonを、開発環境はIDLEというやつを使う

   何か知らんが、最新のものはv3らしいが、shellを起動するとPython2.7.13Shellと出るからv2も入っている。

   起動は、ラズベリーアイコン > プログラミング > Python2(IDLE)
   又はLXTerminalから $ sudo idle & でPython2.7.13が起動する。

   Python3の機動は、ラズベリーアイコン > プログラミング > Python3(IDLE)
   又はLXTerminalから $ sudo idle3 & でPython3.5.3が起動する。

   先々まで使えるようにPython3を使うようにしよう。

 データフォルダ:

 ファイルマネージャはタスクバーのアイコン又はラズベリーアイコン > アクセサリ > ファイルマネージャ から開く。

 /home/pi/の下にまとめてあって特出しになってるので分かりやすい。

 テキストエディター:

 defaultでLeappadを使うようになってる。ファイルマネーから開くドキュメントはこれで開いている。どういうわけか管理者権限になっているみたい。

 ラズベリーアイコン > アクセサリ > Text Editor から開く。

2017-09-16-134402_1824x984_scrot.jpgLXterminal、python3、idle、LeappPadを並べた

2.GPIO:種類と内容・機能など 

 合計PIN数:40PIN

 5V電源:2端子 (USBで供給した外部電源の容量に依存する。 ラズパイが5W程度と言っているから、外部電源容量から1A差し引いた値と思うが、限度があるので控えめにしよう。

 3.3V電源:2端子 (GPIOで使うのと合わせて合計で50mA以下か)

 GND:8端子

 GPIO:13端子 (3.3Vの電圧供給、1/0の出力1端子、あたり最大16mA、合計で50mA、入力電圧は3.3vまで、入力1/0の読み取り、プルアップ及びプルダウンの内部抵抗利用可(抵抗値は多分47kΩ))

 3.3V電源に1.8kΩの抵抗が繋がったI2C通信用の専用端子:2端子

 spi通信用の(専用?)端子:5端子、さらにもう1チャンネル分GPIO16、19、20、21がSPIに使えるらしい。計9端子と云うべきか?

 PWM制御用の端子:4端子 (puls width modulation)

 UART通信用の端子:2端子 (universal asynchronous receiver and tranmitter)

 その他:2端子 ID_SD、ID_SC と書いてあるわけの分からない端子

 GPIOのピン配置の指定:
  Broadcomのプロセッサに合わせて指定するときは:GPIO.setmode(GPIO.BCM)
  GPIOのコネクター番号に合わせて指定するときは:GPIO.setmode(GPIO.BOARD)
  とする。

 3.ディスプレイ無しで起動するか? 

12017・9・28 追記

 これは現場に設置したり遠隔で操作したりするときに必要で、以前linuxをいじくってた時に難儀したことなので確認した。

 結論:

 当然ディスプレイ部分はきちんと起動してないのは当然として、その他のところ:
 無線LANは起動してない(外部からwifiでSSHできない)
 有線LANは起動している
 USBに繋げたワイアレスキーボードとマウスは使用可

 ってことで、現場設置の時はこのままではディスプレイ持参する必要あり。 

(工事中)

 ラズパイで脳の老化は防げるか? 答えは分かりません。

 健康サプルメントは大よそ月に5000円ぐらいまでのが多いですが、効果は全く不明、体験談などの宣伝でその気になってるだけですね。

 この年になってIoTの流れに乗るべく、ラズパイに20,000円の投資を決めました。 ゴールはリモート画像モニター、副作用で頭スッキリ。

 スターターとして注文して配送されたのがこれです。

2017-09-rasberry_pi-007.jpg 主役のraspberry-pi3-Bは透明なケース付きで右のところにあります。 
右下はその小物部品、上は5Vの電源で大きめの容量3Aのものです。 
左はラズパイを制御系として電子装置を組む「超」入門書。 
中央は「オソヨーのraspberry pi用の電子部品キット」で入門書とは連動してませんが
同程度で充実した部品が揃っている部品一式。

 このほか必要なmicroSDメモリーカード、ディスプレイ、キーボードとマウスは手持ちのものを使用します。

 これでスタートです。 以降は備忘録として事の顛末を記録するものです。

 備忘録に入る前に、この入門書には驚きました。 小学校の教育内容のところからおさらいしてくれてますので、「超」安心です。 オームの法則はもちろん、電池と豆電球の正しいつなぎ方まで図入りで解説してます。 教育現場はどうなってんでしょうか、先生!。

1.OSのインストールのところでつまずきました。

 つまずいた状況はこんな所です。

 新品のmicroSDカードに公式サイトからダウンロードしたラズパイのOS Raspbianを展開、コピーして電源を入れた直後にSDカードにアクセスした気配があって、ディスプレイに何か出てきたが一向に先に進まない。 電源を入れなおしたりすると今度は「全く」起動の気配もなくなった。

 「超」入門書での対処法は「電源のコネクターを抜き差しする」ってことなんで、「全く」頼りにならん。

 基本に立ち返り、ググってみて、鉄壁のOSインストールはこんなもんじゃないかと結論づけました。 

 (1)OSのダウンロードは公式サイトから、NOOBSのDownload Zipをできだけ有線LAN環境でする。 無線LAN環境では時間がかかりすぎる。

 (2)SD Associationが発行する最新のフォーマッター(この時点でフォーマッター5.0)を使ってmicroSDカード全体をFAT32でフォーマットする。 クイックでなく時間はかかるが「上書きフォーマット」をする。

 (3)入門書では、かなり注意深く、マウスとキーボードはUSB端子の付いた有線のものを使うように推奨してますが、ここでは両者ともワイアレスのものを使いました。

 こんな所でしょうか。

2017-09-12-104031.jpg

ワイアレスのマウスとキーボードはインストールの最初から使える状態になっていて全く問題ありませんでした。 
おかげで周辺環境はスッキリ。 
電源の抜き差しは全く関係ありませんでした~。

 ここで何点か疑問点等を上げておきます。

 OSはどこにインストールされてるのか? どうやらmicroSDカードの余ったところをパーティションをしてLINUX用のフォーマットをしてここに入れているようです。 元のダウンロードしてコピーしたものはリカバリ用としてFAT32のフォーマットのパーティションの中に残っていました。 どうやって使うかわかりません。

 microSDカードのRaspbianの入ってるところのフォーマット形式はext4か? 

2017-09-12-103010tr.jpgext4らしいです。 $ df -T で調べました。

 Raspbianは何者か? DebianベースのLinuxのようです。 Ubuntuと同じでなので親しみがもてます。


2.Raspbianの使用環境を整備する

 ここでもインターネット接続(wifi)で手こずってしまった。 知らないうちはいじくり回すもんじゃありませんな。

 整備すべき環境は、ネットワーク環境、日本語入力などです。

 インターネット接続(家庭内wifi)は:

    gateway (ここではrouterという表示でした)
    netmask
    raspbianのIPアドレス
    DNSアドレス(gatewayと同じ)

を整えなおし無事つながることになった。

 これを整える前にそれらしき入力画面を開き適当にパチパチやってたことがいつまでもリセットされずにもとに戻らず(*_*;

 パチパチやったことが etc/dhcpcd.conf に書き込まれていた。 書き込まれたもの全部消して正規手順で一発解決。 ロスタイム半日!

 2017-09-12-110148_tr.jpgこの画面のところは分からないうちはやたらに入力して「適用」をパチパチやらないように。
パチパチやったことがどんどんetc/dhcpcd.conf に書き込まれている。この画面からはもとに戻せない。
間違いない情報を入れて一発必中で「適用」をパチンとすること。

 ファイルの書き直しは極めて簡単。 ファイルマネージャからそのファイルを開いて書き直し(なぜ書き直せたのか不明ですが*)再起動で反映された。 特別なエディターは不要でした。

 *後で調べてみたのですが、この dhcpcd.conf ファイル、所有者root、グループnetdevとなっていて 書き込みのパーミッションは所有者とグループ。テキストエディターは通常起動で確かに書き直せた。他のファイルでパーミッションが所有者のみのは確かに書き直せない。

 netdavって何者なんだ?

.

 日本入力環境は:

 $ sudo apt-get install ibus-anthy で入れた。

 インストール後 設定>ibus>何か知らんがOKOKでibus設定画面にたどり着いた。 1か所「ctrl/space」で切り替えるようにしたが、デスクトップ画面で変えられるのでどうでもいいかな。

3.その他のラズパイ作業に必要なこと

 使用場所は:

 デスクトップパソコンを置いてあるとこしかありません。

 ディスプレイは共用です。 入力が3つあるので、ラズパイにHDML、デスクトップにDVI入力を割り当てる。切り替えスイッチで使えるようになった。

2017-09-rasberry_pi-008.jpg赤ランプの点いている白いやつ、USB電源(2.4A)と2口タップを使ってスッキリした。

  データファイルの交換は:

 常用及びモバイルパソコンとのファイルのやり取りは:

 RaspbianにSambaを入れる方法、USBメモリを使う方法、クラウド(この場合はグーグルドライブ)を介する方法などあるが、とりあえずグーグルドライブを介してすることにした。

 ラズパイでUSBメモリを認識して中を覗けるがここに書き込みができない。多分パーミッションの関係と思うがまだ扱いが分からん。

 Sambaはまだインストールしてない。

 print screenはどうやるの?:

 このブログを書いたりするときに場面のコピーに使うPrtScrってやつ、これをやっても見かけ上何の反応もなし。

 しかし安心してください。 /home/pi/ のところに画像が出来ていました(^^♪

4.追加でインストールしたパッケージ

 ibus-anthy 日本語環境 2017/9/11
 mpg321 MPC再生 2017/9/18

5.オソヨー3.5インチHDMIタッチスクリーンディスプレイを買いました

 ラズパイを壊されました。 OSアップグレードとかしたりして何とか復旧しました。

 注意事項がありまして、曰く:
 「「単独タッチドライバーインストール方法」はRasupbian、UbuntuOSをサポートします。該方法の利点は、Raspberry Piで既存のOSで働くことができます。欠点は初心者には複雑であるという事です。」
 とありまして、何とかこの「単独タッチドライバーインストール方法」でドライバーインストールをやりました (^^;
 途中「非必要」とかありましたが中国文化に触れつつ使えるところまで来ました。
 欠点の「複雑」に関しては、説明が「複雑で難解」でしたが、操作は「複雑」ではありませんでした。

ラズパイのページ その2.ラズパイの中身を理解する  
ラズパイのページ その3 電子工作の雑知識
ラズパイのページ その4 プログラムの形