Raspberry Pi用 Apple Pi を実用的に使うサンプルスクリプト

Raspberry Pi用 Apple Pi を実用的に活用するためのサンプルスクリプトを製作しました。たいした機能ではありませんが、Raspberry Piを使用する際に便利な機能です。
 ・IPアドレスのLCD表示
 ・センサ読み取り値のLCD表示
 ・日付と現在時刻のLCD表示
 ・Apple Pi用のスクリプトの動作LED表示
 ・ボタン操作によるRaspberry Piのシャットダウン機能
サンプル・スクリプトを起動すると、LCDにRaspberry PiのIPアドレス、温度・湿度・気圧のセンサ値、今日の日付と現在時刻を表示します。
また、ボタン(SW6)を長押しすると、Raspberry Piがシャットダウンします。
※もちろん、市販の完成品のApple Piでも動作します。
IPアドレス表示:HDMI出力をモニタに接続しなくても、IPアドレスを確認することが出来る。リモートで使用する場合、この機能はとても役に立つ。
タクトスイッチ(SW6)を押し続けると、シャットダウンする。マウスやキーボードを接続しなくてもシャットダウンできるので便利。「shutting down」の表示が出て、すぐにボタンを離すとキャンセルできる。
タクトスイッチと並列にリードスイッチも実装した。上ぶたを取り付けた状態でも磁石を接近させるとシャットダウンすることが出来る。

Apple Piとは

Apple Piはビットトレードワンが販売するRaspberry PiをIoT実験コンピュータとして使用するための拡張基板です。
プリント基板が、CQ出版社の雑誌「トランジスタ技術2016年8月号」の付録として配布されていたので、基板だけをお持ちの方も多いでしょう。
Apple Pi (ビットトレードワン)

必要な部品を準備する

今回の実験に必要な電子部品は、以下の通りです。
スイッチSW6と並列にリードスイッチを接続すると、Raspberry Piへ磁石を接近させてシャットダウンさせることも可能です。
  • 液晶(LCD1) AQM0802A 1個
  • チップコンデンサ(C8,C9) 1uF 2個
  • センサ(U2) BME280 1個
  • LED(LED1,LED2) 1~2個
  • LED用のチップ抵抗(R5,R6) 330~1kΩ 1~2個
  • タクトスイッチ(SW6) 1個
  • リードスイッチ・ノーマルオープン型(磁石を接近させてシャットダウンさせたい場合)
本来はセンサ(U2)の部分にI2CリピータIC(U5)を必要する必要がありますが、実装しない場合は、I2CのCLKとSDA信号を直結しておく必要があります(下図)。
I2CリピータICが手に入らない場合は、I2C_CLKとI2C_SDA信号を直結する。ただし、I2C通信時に液晶からの応答ACKが得られなくなるので、液晶との通信時にACKを無視する必要がある。(部品コストを控えたい人向けの暫定的な方法)

ハードウェアを製作する

お手持ちのケースによっては、Apple Piの基板の外形を加工する必要があります。部品を実装する前に、基板の外形をケースに合わせて削っておくとよいでしょう。
ケースに入るように基板の外形を加工しておく。タクトスイッチの、すぐ上にある永細い部品が「リードスイッチ」・ガラス管に入っているので割れないように十分に注意する。
今回は使わないが、赤外線リモコン用の赤外線LED(中央付近)も実装した。赤外線LEDが少し曲がっているのは、ケースのカバーを取り付けたときに、LEDのレンズの位置と、ラズベリーパイのロゴの穴との位置が合うようにしたため。

サンプル・スクリプトの内容

以下に製作したサンプルスクリプトを紹介します。LCDへの出力、GPIOの入出力を繰り返しているだけです。
Apple Pi 用のサンプルスクリプト
#!/bin/bash
while true; do
  /home/pi/RaspberryPi/gpio/raspi_lcd -i `hostname -I|cut -d" " -f1`
  /home/pi/RaspberryPi/gpio/raspi_gpo 5 1 >/dev/null
  sleep 0
  /home/pi/RaspberryPi/gpio/raspi_lcd -i `/home/pi/RaspberryPi/gpio/raspi_bme280`
  /home/pi/RaspberryPi/gpio/raspi_gpo 5 0 >/dev/null
  /home/pi/RaspberryPi/gpio/raspi_gpo 6 1 >/dev/null
  sleep 2
  /home/pi/RaspberryPi/gpio/raspi_lcd -i `date "+%y/%m/%d%R:%S"`
  /home/pi/RaspberryPi/gpio/raspi_gpo 6 0 >/dev/null
  sleep 2
  IN=`/home/pi/RaspberryPi/gpio/raspi_gpi 27 PUP`
  if [ $IN = "0" ]; then
    /home/pi/RaspberryPi/gpio/raspi_lcd -i "shuting down…"
    sleep 2
    IN=`/home/pi/RaspberryPi/gpio/raspi_gpi 27 PUP`
    if [ $IN = "0" ]; then
      /home/pi/RaspberryPi/gpio/raspi_lcd -i "Bye."
      sudo shutdown -h now
      exit 0
    fi
    /home/pi/RaspberryPi/gpio/raspi_lcd -i "Canceled"
  fi
done
GitHubに公開中のスクリプトおよび、液晶ドライバ、センサ用ドライバなどについ
は、下記の手順でダウンロードし、インストールすることが出来ます。
$ cd
$ cd RaspberryPi/gpio
$ make
実行するには、以下を実行します。
$ ./apple_pi.sh
ただし、2重に起動すると、I2C通信に失敗するようになります。再実行する場合は、必ず「Ctrl」+「C」やkillコマンドでスクリプトを終了させてから、上記のコマンドを実行してください。
Raspberry Pi起動時に自動実行するには、ファイル/etc/rc.local内のexit命令よりも手前に以下を追加し、実行属性を付与します。追加するには
(1) rc.localをテキストエディタで開く
$ sudo leafpad /etc/rc.local
(2) 「exit」よりも手前に以下を追加して、上書き保存する
/home/pi/RaspberryPi/gpio/apple_pi.sh &
(3) 実行属性を付与
$ sudo chmod a+x /etc/rc.local

各種IoT機能を使用する

各種のIoT機能(液晶、センサ、リモコン、LED、ボタン)の動作方法を下記のブログで紹介しています。
Apple Pi の各種IoT機能の動作確認
 ・I2C接続小型液晶
 ・温度・湿度・気圧センサ
 ・赤外線リモコン受信モジュール

 ・赤外線リモコン送信
 ・LED
 ・タクトスイッチ(ボタン)

遠隔地の高齢者見守りサービス i.MyMimamoriPi システム

その他のサンプルスクリプトも公開中です。
遠隔地の高齢者見守りサービス i.MyMimamoriPi システム(トランジスタ技術2016年9月号)
by ボクにもわかるRaspberry Pi