« July 2017 | Main

August 22, 2017

Raspberry Pi Zero W RTC と シャットダウン・ボタン

E314先日のブログ にも書いたが、Raspberry Pi Zero W をアクセスポイント化して、山奥とか離れ小島とか、インターネットにアクセスする方法がない場所でも、チャットや対戦ゲームやチェックリストのオリジナルなプログラムを、仲間内だけで使うような ミニサーバーを作ろうと思っている
が、大きな問題があった

Raspberry Pi Zero W には、リアルタイムクロックが無い
これは、Raspberry Pi Zero W に限らず、Raspberry Pi シリーズは全てリアルタイムクロックがない
このため、起動すると、前回シャットダウンした時刻にシステムクロックが止まったままになる
もちろん、インターネットアクセスが可能なら、即座に NTP に接続し、システムクロックを修正するのだが、そもそもインターネットアクセスができないような場所で、チャットや対戦ゲームやチェックリストをやりたいのだから、困ったしまう
もう一つの問題は、リアルタイムクロックに比べると些細だが、単独ではシャットダウンする方法がないことだ

そこで、RTC と シャットダウンするためのボタンを追加することにした
ついでながら、ステータス表示のための LED も追加した

必要な部品
秋月電子にて
・DS1307 I2Cリアルタイムクロックモジュール(RTC) 750円
・2色LED 赤・黄緑3mmクリアボディ OSRGHC3131A (10個入) 150円 : 使うのは 1個
その他
・押しボタンスイッチ
・抵抗 5.1kΩ 2個

配線
・Raspberry Pi Zero W 部品
・2pin 5V ⇔DS1307 P1 3pin Vcc
・3pin SDA1 ⇔DS1307 P1 4pin SDA
・5pin SCL1 ⇔DS1307 P1 5pin SCL
・30pin Gnd ⇔DS1307 P1 2pin Gnd
・29pin GPIO5 ⇔押しボタン
・33pin GPIO13 ⇔LED (赤) 5kΩ経由
・35pin GPIO19 ⇔LED (緑) 5kΩ経由
・30pin Gnd ⇔押しボタン・LED コモンカソード

シャットダウンプログラム
・ブログのせいで、インデントが表示されず、見にくいところ、申し訳ない

/usr/local/sbin/raspi_shutdown.sh

#!/bin/sh
count=0
b_status=0
b_count=0
flg_ping=0
while :
do
sleep 0.5s
if [ $b_status -eq 0 -o $b_status -eq 1 ]; then
case $count in
0)
echo 0 > /sys/class/gpio/gpio13/value
echo 1 > /sys/class/gpio/gpio19/value
;;
1)
if [ $flg_ping -eq 0 ]; then
ping -c 1 -W 1 google.com > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 0 > /sys/class/gpio/gpio13/value
flg_ping=1
else
echo 1 > /sys/class/gpio/gpio13/value
fi
else
echo 0 > /sys/class/gpio/gpio13/value
fi
echo 0 > /sys/class/gpio/gpio19/value
;;
esac
elif [ $b_status -eq 2 -o $b_status -eq 3 ]; then
case $count in
0)
echo 1 > /sys/class/gpio/gpio13/value
echo 0 > /sys/class/gpio/gpio19/value
;;
1)
echo 0 > /sys/class/gpio/gpio13/value
echo 0 > /sys/class/gpio/gpio19/value
;;
esac
elif [ $b_status -eq 4 ]; then
echo 1 > /sys/class/gpio/gpio13/value
echo 0 > /sys/class/gpio/gpio19/value
fi
SHUTDOWN=$(/bin/cat /sys/class/gpio/gpio5/value)
case $b_status in
0)
if [ $SHUTDOWN = 0 ]; then
b_status=1
b_count=0
fi
;;
1)
if [ $SHUTDOWN = 0 ]; then
b_count=`expr $b_count + 1`
if [ $b_count -eq 10 ]; then
b_status=2
b_count=0
fi
else
b_status=0
b_count=0
fi
;;
2)
if [ $SHUTDOWN -ne 0 ]; then
b_status=3
b_count=0
fi
;;
3)
if [ $SHUTDOWN = 0 ]; then
b_status=4
b_count=0
else
b_count=`expr $b_count + 1`
if [ $b_count -eq 10 ]; then
b_status=0
b_count=0
fi
fi
;;
4)
if [ $SHUTDOWN = 0 ]; then
/sbin/shutdown -h now
else
b_status=0
b_count=0
fi
;;
esac
count=`expr $count + 1`
if [ $count -eq 2 ]; then
count=0
fi
done

なお、このプログラム、元々は日経LINUX 2017年2月号の記事を参考にしたのだが、日経LINUXの記事のままだと、Raspberry Pi Zero W の少ない CPU の負荷が100%になってしまうので、改良した
また、Raspberry Pi Zero W のステータス表示機能も追加している

RTC の設定

$ sudo raspi-config
<< i2cをイネーブルにする >>
$ sudo reboot

再起動

$ sudo apt-get install i2c-tools python-smbus
$ sudo modprobe rtc-ds1307
$ sudo apt-get remove fake-hwclock
$ sudo dpkg --purge fake-hwclock

/etc/rc.local のファイル末に下記を追加

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock --adjust || true
sudo hwclock -s || true
echo 13 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio13/direction
echo 0 > /sys/class/gpio/gpio13/value
echo 19 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio19/direction
echo 0 > /sys/class/gpio/gpio19/value
echo 5 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio5/direction
/usr/local/sbin/raspi_shutdown.sh &
exit 0

ここで、一度、再起動

使い方

RTCモジュールについているボタン電池は、充電池なのだが、秋月電子で購入したときは、ほぼ空になっていた
起動した状態で充電できるようなので、最初は、何時間か連続で通電しておく
インターネットに接続し、NTPで時刻が正しくなっている状況で、

$ sudo hwclock -w

とやると、RTCが設定される

最初の内は、RTCの誤差が大きい(私のRTCの場合は、24時間で6秒も遅れた)
インターネットのNTPで正しい時刻にシステムクロックが設定されている時に、「$ sudo hwclock -w」を何度か繰り返しているうちに、誤差が補正される
これは、/etc/rc.local のファイルの中で、「sudo hwclock --adjust」と補正オプションが指定されているため、補正値を自動設定しているからだ
補正が正しくできるようになったら、インターネットアクセスは必要なくなる

電源が入り、OSが起動すると、LEDが点滅してステータスを表示する
インターネットアクセスにアクセスできないうちは、LEDは「赤と緑が交互に点滅」になる
そのうち、インターネットアクセスが確立したら「緑だけの点滅」になる
(当然ながら、インターネットアクセスが不可能な山の中や離れ小島では、「赤と緑が交互に点滅」のままだ)
押しボタンを長押しすると、LEDは「赤だけの点滅」に変わる
ここで一度指を離し、再びボタンを押すと「赤の点灯」になり、その後、シャットダウンする

さて、今回は、ブレッドボードで回路を作ったが、次回は、ユニバーサル基板に半田付けし、小さなケースにいれて、『ミニサーバー』にする予定だ

| | Comments (0) | TrackBack (0)

August 20, 2017

Raspberry Pi Zero W ブレッドボード

E313_1Raspberry Pi Zero W だが、外部と結線するところをどうするか、悩んでいた
どうせなら、汎用的な I/F にするべきだろうが、普通の Raspberry 3などと同じにすると、表側(CPUの付いた面)側にオスのヘッダを付けることになり、そうすると、折角の専用ケースに入らなくなる
Raspberry Pi Zero 専用ケースには、裏面側に I/Fが通る穴がある
そこで、裏表逆になるが、基板裏面側に I/F 用に秋月で売っているロープロファイルピンヘッダ(オス)を半田付けすることにした

これに、やはり秋月で300円で売っている ラズベリーパイB+/A+ブレッドボード用変換基板に ロープロファイルピンソケット(メス)および、細ピンのヘッダを半田付けしたものを用意する
と、ブレッドボードに挿して、実験しやすくなる

E313_2左の写真のように、ヘッダを半田付けした Raspberry Pi Zero W は専用ケースにすっぽり入る

実は、この状態で、専用カメラが付いた状態なのだが、全く問題なく入る。
 


E313_3ケースの裏側は、このような状態

ほんの少しだけ、ヘッダピンが飛び出しているが、ロープロファイルを使っているので、あまり気にならない程度だ
 
 
 
 
 
 
 
 
 
 

E313_4最後に、ブレッドボードに付けた状態
専用ケースの中には、Raspberry Pi Zero Wと専用カメラが入った状態だ

これなら、色々と実験できる

で、実際に、これを使って実験して、作ったものは、また、次回以降に紹介予定

| | Comments (0) | TrackBack (0)

August 06, 2017

Raspberry Pi Zero W CPUの謎とカメラ

Raspberry Pi Zero Wの謎
Raspberrypi_zero_w・一番大きなチッブ(おそらくCPU等の入ったSoC)が何故かエルピーダの刻印。エルピーダってメモリでしょ?
・小さなWifii/Bluetoothと思われるチップと、プリントされたアンテナ
・裏面はパスコンの全く無い、真っ平・・・

これをTwitterで呟いたら、「Package on Package でDRAMの下にCPU SoC がある」と教えてもらった。
ネットを調べたら、ZeroではないRaspberry Piですが、分解(破壊)動画見つけた

Under The Raspberry Pi CPU: The Actual Soc / CPU

2分あたりでCPU&メモリを剝がしているが、これと同じような実装方法であろう。
しかし、凄い実装法だなぁ

ラズバイ専用カメラ

Raspberry Pi Zero Wに、アマゾンで850円で買ったカメラを付けた。何の問題もなく、写真が撮れる
1200円のラズパイゼロWと850円のカメラで、Wifi接続のWebカメラになる。

私の買ったのは、これ
アマゾン => HiLetgo OV5647 5MP カメラ OV5647 HDカメラモジュール  Raspberry Pi に対応 A/B+/2 モデルB ケーブル
ラズパイ A/B+/2 モデルB 用とあるが、Zero Wでも変換ケーブルさえあれば動く。
私が買ったときは850円だったが、今は800円だ(2017.08.06現在)

実際に送られてきたのが、これ。シンガポールから送られてきた。
Win_20170806_07_06_46_proRaspberry Pi Camera Rev. 1.3 と書いてある。
調べると、ラズパイカメラは、V1.3 が500万画素、V2.1が800万画素。V1.3 は製造中止になり、V2.1が現行品らしい。
あんまり安いんでパチモンかもしれないと思ったが、どうやら、売れ残りのV1.3の在庫処分品だったのだろう。

WifiやBluetoothが付いているものは、海外から輸入すると技適の関係で違法になる可能性があるから、海外からは買わない
でも、カメラなど、電波出さないものは、関係ないから、海外から安いのを買っちゃう・・

なお、カメラとRaspberry Pi Zero Wを結ぶケーブルは、専用ケースに付属していたもの。Raspberry Pi 2や3と比べて、カメラ用のコネクタが小さいので変換ケーブルが必要なんだが、専用ケースに付属していた。Raspberry Pi Zero W、単品では購入できず、専用ケースとのセット販売で買ったのだが、この変換ケーブルが付いていたので、役にたった。ちなみに次の写真のようにカメラを付けた状態でケースに入る。

Win_20170806_07_55_11_proで、このカメラを使って、「静止画を撮る」「動画のストリーミング」「OpenCVで画像解析」をやってみた

静止画を撮る
第43回「Raspberry Pi Zero V1.3+カメラモジュールでミニ定点カメラを作ろう!」
これで、OK!

動画のストリーミング
mjpg-streamerでraspberryPiのカメラからストリーミングをする方法
これ、Raspberry Pi 2や3用の記事と思われるが、そのままでOK!
ただし、ストリーミングは、5fpsくらいで遅いが

OpenCVで画像解析
講談社ブルーバックスの「実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける」
この本の7章の「円の抽出」と「顔検出」を試してみた。これRaspberry Pi +や2用プログラムだが、Zero Wでも上手く行った

やって気が付いたのだが、UVC規格のUSBカメラでもOpenCVで画像解析できる
ラズパイ専用カメラでも、USBカメラでも、とにかく安いカメラをRaspberry Pi Zero Wに接続して、何か面白いものを作りたいな

| | Comments (0) | TrackBack (0)

« July 2017 | Main