BH2 Lite
テクニカルノート

最終更新日: 2017/05/08
バージョン: 1.6（株）ビズライト・テクノロジー
11. 本製品について ............................................................................................ 3
2. BH2Lite の概要 .......................................................................................... 3
3. 電池版簡易 UPS 機能 .................................................................................. 3
4. RTC（リアルタイムクロック）搭載 .................................................................... 45. 電源供給の安定化 ....................................................................................... 4
6. CPU の放熱対策 ......................................................................................... 4
7. ノイズ、静電対策 .......................................................................................... 48. 電源断サポート ............................................................................................. 4
9. ウォッチドッグタイマーの有効化 ..................................................................... 4
10. ハード仕様 ................................................................................................ 5
11. 試験結果 ................................................................................................... 6
12. 外寸と各部名称 ......................................................................................... 7
13. I/O コネクタへのアクセスと GPIO ポート .................................................... 8
14. 汎用ボタンの GPIO 割り当て ..................................................................... 9
15. 汎用スイッチの無効化、リセットコントロール端子切替 ............................... 10
16. OS について ............................................................................................ 12
17. 高速シャットダウンの処理シーケンス ........................................................ 14
18. RTC の設定シーケンス ........................................................................... 16
19. ウォッチドッグタイマーのセットアップ内容 .................................................. 18
20. 汎用スイッチを利用したプログラムのサンプルソース ................................. 19
21. 改訂履歴 ................................................................................................. 25

2

1. 本製品について
この度は BH シリーズ、BH2Lite をご購入いただき、誠にありがとうございます。
本製品は下記を組み込んだセットとなっております。
・金属ケース（放熱用パッドつき）
・Raspberry Pi2 Model B・（株）ビズライト・テクノロジー、オリジナル基盤
・簡易 UPS 用電池ソケット
・AC アダプター（7.5V3A）※microSD カードと単三アルカリ電池（4 本）は別売となっております。

2. BH2Lite の概要
BH2Lite は Raspberry Pi2 Model B を使用した汎用エンベデッド STB です。
ご好評いただきました当社 BH1 をベースに、電源断があまり多く起こらない現場での利用を想定した簡易 UPS（単三アルカリ電池版）とすることで、コストダウンを行いました。同時に、当社オリジナル基盤のパターンを変更し汎用スイッチに割り当てられている GPIO を開放できるようにするなど、機能性もアップしております。
Raspberry Pi は特に IoT 分野などに多く使われはじめております。しかし、プロトタイ
プを終えて実際にフィールドで利用するためには、電源断時に正常終了させたい、電源のブレーカー連動、システム時刻保持、電源の安定化、耐ノイズ、放熱、ウオッチドックタイマーなどクリアしなければならない問題がたくさん出てきます。BH2Lite は特に堅牢性に重点を置き、フィールドでも使える STB を目指して開発されました。

3. 電池版簡易 UPS 機能
Linux ベースであるが故に正常なシャットダウンの確保は必須となります。BH2Liteは供給電源断を検出し、CPU に割込みを発生させます。単三アルカリ電池 4 本を使用した簡易 UPS 機能を持ち、1 回のシャットダウン発生時に約 30 秒程度の無電源動作を行うことができるため、プログラムはこの間に安全なシャットダウンプロセスを実行することが可能となり、OS のクラッシュや、Micro SD カードのクラッシュの可能性を大幅に低減させることが可能です。
これにより、Raspberry Pi 環境で OS レスの機器組込シングルボードと同じような扱いをすることが可能となりました。

3

4. RTC（リアルタイムクロック）搭載
データロギングなど大抵のアプリケーションには、正しいシステム時刻が必要です。
BH2Lite はバッテリでバックアップされた RTC を搭載しています。

5. 電源供給の安定化
Raspberry Pi は通常ミニ USB コネクタから電源を供給しますが、消費電流が増加したときに、このコネクタの内部抵抗が問題になり、電源が不安定になることがありました。BH2Lite は I/O バスポートから電源を供給していますので、この問題が発生しません。また、内部にレギュレーターを搭載し、安定した動作電圧を確保しています。

6. CPU の放熱対策
BH2Lite はケースに熱伝導パッドを装着し、これを CPU に密着させることにより、放熱対策をしています。50℃の外部環境での動作テストをクリアしていますので、フィールドで安心してご利用になれます。

7. ノイズ、静電対策
金属ケースの採用や、グランド処理などにより、静電気、雷サージ、GPIO ラインノイズなどの対策を施しています。

8. 電源断サポート
電源切断時に電源断検出(GPIO23)の信号を受けて高速シャットダウンが可能です。
高速シャットダウン時に任意のコマンド(独自に作成したプログラムなど)を実行することが可能です。

9. ウォッチドッグタイマーの有効化
Raspberry Pi に搭載されたウォッチドッグタイマーを有効にし、万が一 CPU が暴走した場合でも、ハードウェア的に CPU をリブートさせます。システムがハングアップしたままになる可能性を減らすことが可能です。

410. ハード仕様
OS

Raspbian 3.18 以上

CPU

Raspberry Pi2 Model B
900MHz quad-core ARM Cortex-A7

GPU

250 MHz / Broadcom VideoCore IV

メモリ

1GB

簡易 UPS

単三アルカリ電池 4 本（別売）

電源断検出

GPIO23 L レベルで検出

RTC

MAXIM DS3231 I2C 接続（10KΩでプルアップ済み）
GPIO2、3 を使用

リセットコントロール

GPIO18 を使用

汎用スイッチセンター、上下左右モメンタリスイッチを搭載

ビデオ出力

HDMI(1.3 / 1.4)

音声出力

3.5mm ジャック / HDMI

USB

USB2.0×4

I/O コネクタ

40 ピン（ピンアサインはオリジナルと同様）

ネットワーク

10 / 100Mbps イーサネット

ストレージ

Micro SD カード(別売)CPU 熱対策

CPU よりケースへ放熱。0℃〜50℃ 動作試験

静電試験

接触 4KV 放電 8KV

電源AC100-240V、50/60Hz （専用 AC アダプタ使用時）
DC 7.5V 3A

外寸

高さ 32mm×幅 115mm×奥行き 115mm

重量420g（乾電池、AC アダプタ含まず）

動作保障温度

0 度～40 度（非結露）動作保障湿度

10%～80%5

11. 試験結果
試験場所:

地方独立行政法人 北海道立総合研究機構 工業試験場
北海道札幌市北区北 19 条西 11 丁目

雷サージ許容度試験（試験装置: ノイズ研究所㈱LSS-15AX-C3）
試験内容

AC ラインより 1KV の雷サージを、正負 1 回ずつ、20 秒間隔で 5回、合計 10 回与える。

試験結果

正常

試験内容

AC ラインより 2KV の雷サージを、正負 1 回ずつ、20 秒間隔で 5回、合計 10 回与える。

試験結果

正常

静電気許容度試験（試験装置: ノイズ研究所㈱ESS-2000 & 放電ガン TC=815R）
試験内容

間接放電（本装置から 10 センチメートル離れたところで放電する）

試験結果

8KV * 20 回: 正常
15KV * 20 回: 正常

試験内容

直接放電（本装置に放電ガンを接触させて放電する）

試験結果

4KV * 20 回: 正常
8KV * 20 回: 正常

ただし間接、直接双方とも放電時にモニタ画面が一瞬乱れて 1 秒以内に正常に戻るという現象が見られた。本体リセットがかかったのではなく、高圧パルスによるノ
イズで HDMI の同期が一瞬だけ外れることが原因と推測する。
電子機器用低温恒温恒湿試験（試験装置: エスペック㈱PL-4KP）
試験内容

0℃において本装置を 24 時間連続運転する。

試験結果

正常

試験内容

50℃において本装置を 24 時間連続運転する。

試験結果

正常

6

12. 外寸と各部名称

⑭

①
⑧

⑬
⑧

⑥

⑦
②
⑮

③

⑨

⑩

⑪

⑫

⑤

④
⑯

①電源スイッチ②電源ジャック③HDMI ジャック
④3.5mm ジャック
⑤10 / 100Mbps イーサネット⑥USB2.0×4⑦汎用ボタン
⑧I/O コネクタ⑨電池劣化チェックボタン⑩電池劣化表示 LED⑪電池起動ボタン⑫OS 起動 LED⑬電池用蓋⑭⑮⑯裏蓋用ネジ
Micro SD カードは、⑭⑮⑯裏蓋用ネジをはずし、裏蓋を開けて、Raspberry Pi に直接挿します。
7

アルカリ乾電池４本(別売)は、⑬電池用蓋を開けてセットしてください。
※⑬電池蓋開口時

13. I/O コネクタへのアクセスと GPIO ポート⑧I/O コネクタのネジと蓋をはずすと、I/O コネクタにアクセスできます。
GPIO ポート番号は下図のようになっております。

814. 汎用ボタンの GPIO 割り当て

① UP ボタン： GPIO 17② DOWN ボタン：
GPIO 27③ LEFT ボタン：
GPIO 24④ RIGHT ボタン：
GPIO 22⑤ ENTER ボタン：
GPIO 25

PULLUP モード(Raspberry Pi 内蔵のプルアップ抵抗を有効)にします
汎用ボタンは GPIO のピンと GND が接続されています(外付けのプルアップ抵抗は接続されていません)
押されていない場合は H レベル(1)、押された場合は L レベル(0)の値になります
コマンドラインから値を取得する場合の例(Wiring Pi の gpio コマンドを利用して up ボタンの値を取得する場合):
gpio -g mode 17 input
gpio -g mode 17 up
gpio -g read 179

15. 汎用スイッチの無効化、リセットコントロール端子切替
本製品では、ジャンパピンによって汎用スイッチを無効化しスイッチに割り当てられている GPIO ポートを利用するようにすることができます。
ENRUN 端子の GPIO ポート番号を変更することが可能となっております。

ジャンパピンへのアクセスは裏蓋を開け、Raspberry Pi をはずすことによりアクセス
可能です。
JP-1

ジャンパピンを抜くと、乾電池電圧チェックが無効になり GPIO4 が利用可能になります。

JP-2

ジャンパピンを抜くと、UP ボタンを無効化し GPIO17 が利用できるよ
うになります。

JP-3

ジャンパピンを抜くと、DOWN ボタンを無効化し GPIO27 が利用できるようになります。

JP-4

ジャンパピンを抜くと、LEFT ボタンを無効化し GPIO24 が利用できるようになります。

JP-5

ジャンパピンを抜くと、RIGHT ボタンを無効化し GPIO22 が利用できるようになります。

JP-6

ジャンパピンを抜くと、ENTER ボタンを無効化し GPIO25 が利用できるようになります。

JP-7

出荷時はリセットコントロールと OS 起動 LED 制御を GPIO18 に設定しております。ジャンパピンの切り替えで GPIO5 に変更できます。
10

JP-7 GPIO5 に 変 更 し た 場 合 は 、 設 定 フ ァ イ ル shutdownSensor.conf を/usr/local/sbin/以下に下記の内容で作成し、保存します。設定ファイルを保存後、OS の再起動が必要です。
/usr/local/sbin/shutdownSensor.conf# Shutdown sensor config fileenrun pin = 181116. OS について
Raspbian に対してセットアップツールをインストールします。
セットアップツールを利用すると、次の機能を追加します。
 電源切断による高速シャットダウン
 OS 起動時に RTC 時刻をシステム時刻に設定
 ntpdate を利用して現在時刻を取得し RTC 時刻に設定(設定タイミング: ネットワーク接続時、毎時 30 分(1 時間毎))
 ウォッチドッグタイマーの有効化
セットアップツールは、以下からダウンロードできます。
http://dl.bizright.jp/bh/bh-tools-latest.tar.gz（対応 OS: Raspbian 3.18 以上）
Raspbian 3.18 以上をインストール後、次のコマンドを実行します。
セットアップツールのインストールコマンド:
curl -O http://dl.bizright.jp/bh/bh-tools-latest.tar.gz
tar xfvz bh-tools-latest.tar.gz
cd bh-tools./build （※Installation of BH tools completed.が表示されれば成功）
sudo reboot
注意: build ファイル内で git や apt-get を呼び出しているためインターネットに接続できる状態で実行します。
既にセットアップツールを導入済みの方でバージョンアップする場合もこちらのコマンドを実行します。
一緒にインストールされるライブラリやパッケージ一覧:






Wiring Pi
ntpdatewatchdog
upstart(systemd がインストールされていない場合にインストールされる)git(git がインストールされていない場合にインストールされる)
12

セットアップツールをアンインストールする場合は次のコマンドを実行します。
セットアップツールのアンインストールコマンド:
cd bh-tools (※インストール時に利用したディレクトリに移動)./build uninstall（※Uninstall of BH tools completed.が表示されれば成功）
cd wiringPi./build uninstall (※今後 Wiring Pi を利用しない場合)
sudo apt-get -y remove ntpdate (※今後 ntpdate を利用しない場合)
sudo apt-get -y remove watchdog (※今後 watchdog を利用しない場合)
sudo reboot –f※セットアップツールでエラーが出てインストールできない場合
Error: WDT module is unknown.
のようなエラーが出てインストールが正常に行えない場合は、
apt-get update
apt-get upgradeを行った後に、BH を再起動していない可能性があります。
sudo rebootを行った後、再度セットアップツールのインストールを行ってください。

13

17. 高速シャットダウンの処理シーケンス
BH2Lite 上での高速シャットダウンする際の処理シーケンスです。
1. BH2Lite の電源切断時に GPIO の 23 番（INPUT モード）が H レベル(1)から Lレベル(0)になります※AC アダプタ経由の電源を使わず、単三アルカリ電池 4 本での稼働で最大 30秒間利用可能2. 常駐プログラム「/usr/local/sbin/shutdownSensor」が 1.の割り込みを受けて次のスクリプトを実行します /usr/local/sbin/fastshutdown
 /usr/local/sbin/__fastdown-function(fastshutdown から呼ばれます)
3. 開始時間をログに出力します(高速シャットダウンの処理時間を計測するため)
出力先: /var/log/fastshutdown.log
Start time: (/proc/uptime の内容)
4. ディスプレイの信号を OFF にします
5. /usr/local/sbin/system-stop-use-usb スクリプトを実行します(10 秒経過するとタイムアウトとなり、強制終了します)
6. USB コントローラの電源を OFF にします(シャットダウン時の消費電力を減らす
ため、有線 LAN と USB に接続された機器を利用不可にします)
7. /usr/local/sbin/system-stop スクリプトを実行します(10 秒経過するとタイムアウトとなり、強制終了します)
8. 現在の時刻を保存します(RTC が接続されていない場合でも動作可能にするため)
9. 全てのプロセスを正常終了させます
10. メモリ上のデータの内容を強制的にディスクに書き込みます
11. 全てのプロセスを強制終了します
12. 終了時間をログに出力します(高速シャットダウンの処理時間を計測するため)
出力先: /var/log/fastshutdown.log
End time: (/proc/uptime の内容)
13. メモリ上のデータの内容を強制的にディスクに書き込みます
14. マウントされているすべてのファイルシステムを読み込み専用モードで再マウント
します
15. GPIO の 23 番（INPUT モード）が H レベル(1)の場合はシステムを再起動、L レ
ベル(0)の場合はシステムを停止します(ユーザが誤って AC 電源を切ってしまい、シャットダウンプロセスが走り始めたの
14

に AC 電源を復旧させたようなケースを想定)
高速シャットダウン時に任意のコマンド(独自に作成したプログラムなど)を実行したい
場合は、次のスクリプトに任意のコマンドを追加します。
/usr/local/sbin/system-stop
任意のコマンド内でネットワークと通信する処理や USB を利用した処理(有線 LANや 無 線 LAN の 利 用 、 USB メ モ リ へ の フ ァ イ ル 保 存 な ど ) を 行 う 場 合 は 、「/usr/local/sbin/system-stop」に記述せずに次のスクリプトに任意のコマンドを追加します。
/usr/local/sbin/system-stop-use-usb
system-stop スクリプトと system-stop-use-usb スクリプトは 10 秒以内に処理を完了
してください。10 秒経過するとタイムアウトとなり、強制終了します。
タイムアウトの秒数は次のスクリプトで変更可能です。
/usr/local/sbin/__fastdown-function
timeout -s 9 タイムアウトの秒数 /usr/local/sbin/system-stop-use-usb
timeout -s 9 タイムアウトの秒数 /usr/local/sbin/system-stop
高速シャットダウン時に独自に作成したプログラム内でファイルのクローズ処理などを行う場合は、kill シグナルの割込みを受けてファイルのクローズ処理を行います。
system-stop スクリプトまたは system-stop-use-usb スクリプトに killall コマンドなどを追加して、高速シャットダウン時に独自に作成したプログラムに対して kill シグナルが送られるようにします。
追加例:/usr/local/sbin/system-stop
killall 独自に作成したプログラム名
OS 起動中に予期しないリセットが発生しないようにするため、常駐プログラム「/usr/local/sbin/shutdownSensor」の起動時(OS 起動時)に GPIO の 18 番(OUTモード)を H レベル(1)にし、シャットダウン完了までそのままの状態を保持しています。

15

18. RTC の設定シーケンス
OS 起動時(/usr/local/sbin/set-rtc)：
1. RTC の I2C 接続を初期化します
2. RTC 時刻をシステム時刻に設定します
3. 2.の実行結果が失敗の場合、fake-hwclock を利用して前回のシャットダウン時
刻をシステム時刻に設定します
ネットワーク接続時と毎時 30 分(1 時間毎))に実行(/etc/network/if-up.d/ntpdate)：
1. 重複起動をチェックします(既に起動中の場合は処理を停止)
2. 20 秒間待機します(ネットワーク接続直後は ntpdate が失敗しやすいため)
3. /usr/sbin/ntpdate-debian コマンドを実行し、ネットワーク経由でシステム時刻を設定します
4. 3. の実行結果が成功の場合、システム時刻を RTC 時刻に設定します
5. 3. の実行結果が成功の場合、10 分間待機します(ntpdate が連続して実行されるのを防ぐため)
ntpdate の実行間隔は次のファイルで変更可能です。
/etc/cron.d/ntpdate（毎時 30 分(1 時間毎)の場合）
30 * * * * root /etc/network/if-up.d/ntpdate > /dev/null 2>&1
NTP サーバーを指定する場合は次のファイルを修正します。
/etc/default/ntpdate
NTPSERVERS="ntp.nict.jp ntp.jst.mfeed.ad.jp ntp.ring.gr.jp"
手動で nptdate を実行し、システム時刻を RTC に設定する場合は次のコマンドを実行します。
sudo /usr/sbin/ntpdate-debiansudo hwclock -w

16

ネットワークに接続しない場合や ntpdate を利用してシステム時刻を合わせる必要がない場合は次のファイルを削除します。
/etc/cron.d/ntpdate/etc/network/if-up.d/ntpdate
任意の時刻を RTC に設定する場合は次のコマンドを実行します。
sudo date -s '時刻(例: 2015-06-19 00:00:00)'
sudo hwclock -w
RTC 時刻を表示する場合は次のコマンドを実行します。
sudo hwclock -r
RTC 時刻をシステム時刻に設定する場合は次のコマンドを実行します。
sudo hwclock -s

17

19. ウォッチドッグタイマーのセットアップ内容
セットアップツールを利用した場合、次のコマンドを実行してウォッチドッグタイマーを有効化しています。watchdog のプログラムをインストールして設定ファイルを変更し、OS 起動時に bcm2708_wdog モジュール(Raspbian 4.2 以下の場合)または
bcm2835_wdt モジュール(Raspbian 4.3 以上の場合)を自動的にロードします。
sudo apt-get install watchdog
sudo vi /etc/default/watchdog
変更前:
watchdog_module="none"
変更後(Raspbian 4.2 以下の場合):
watchdog_module="bcm2708_wdog"
変更後(Raspbian 4.3 以上の場合):
watchdog_module=" bcm2835_wdt "sudo vi /etc/watchdog.conf
変更前:#max-load-1= 24#watchdog-device = /dev/watchdog
変更後:
max-load-1= 24
watchdog-device = /dev/watchdog
watchdog-timeout = 10
sudo vi /etc/modules
最終行に追加(Raspbian 4.2 以下の場合):
bcm2708_wdog
最終行に追加(Raspbian 4.3 以上の場合):
bcm2835_wdt
sudo vi /lib/systemd/system/watchdog.service
最終行に追加(ファイル内の[Install]の下に追加)
WantedBy=multi-user.target
sudo update-rc.d watchdog enablesudo reboot

1820. 汎用スイッチを利用したプログラムのサンプルソース
汎用スイッチを押すとボタン名を表示するプログラムのサンプルソースです。
このサンプルソースは、以下からダウンロードできます。
http://dl.bizright.jp/bh/bhButton.zip
C 言語で Wiring Pi を利用した場合：
bhButton.c#include <stdio.h>#include <sys/time.h>#include <wiringPi.h>#define GPIO_UP 17#define GPIO_DOWN 27#define GPIO_RIGHT 22#define GPIO_LEFT 24#define GPIO_ENTER 25#define BUTTON_USLEEP 50000#define RESET_SEC 5
int setupGpio();void isrUp();
void isrDown();
void isrRight();
void isrLeft();void isrEnter();void isrButton(int pin, char *button);// 現在押されているボタン名
static volatile char *currentButton = NULL;// 押された時間
static volatile long currentButtonTime = 0;// メイン関数
int main(int argc, char *argv[]) {19

struct timeval now;// GPIO の初期化
if (setupGpio() == -1) return 1;
while (1) {sleep(1);// 現在、汎用ボタンが押されている場合// 他の汎用ボタンを最大 RESET_SEC(5 秒)間無効
if (currentButton != NULL) {gettimeofday(&now, NULL);
if (RESET_SEC < now.tv_sec - currentButtonTime) {currentButton = NULL;
}
}

}

}
return 0;// GPIO の初期化関数
int setupGpio() {// WiringPi の初期化
if (wiringPiSetupGpio() == -1) return -1;// 入力モードに設定
pinMode(GPIO_UP, INPUT);
pinMode(GPIO_DOWN, INPUT);
pinMode(GPIO_RIGHT, INPUT);
pinMode(GPIO_LEFT, INPUT);
pinMode(GPIO_ENTER, INPUT);// PULLUP モードに設定
pullUpDnControl(GPIO_UP, PUD_UP);
pullUpDnControl(GPIO_DOWN, PUD_UP);
pullUpDnControl(GPIO_RIGHT, PUD_UP);
20

pullUpDnControl(GPIO_LEFT, PUD_UP);
pullUpDnControl(GPIO_ENTER, PUD_UP);// GPIO の値の変化を検出し、割り込み処理を行う}

wiringPiISR(GPIO_UP, INT_EDGE_BOTH, &isrUp);
wiringPiISR(GPIO_DOWN, INT_EDGE_BOTH, &isrDown);
wiringPiISR(GPIO_RIGHT, INT_EDGE_BOTH, &isrRight);
wiringPiISR(GPIO_LEFT, INT_EDGE_BOTH, &isrLeft);wiringPiISR(GPIO_ENTER, INT_EDGE_BOTH, &isrEnter);return 0;// up ボタンの割込み関数
void isrUp() {isrButton(GPIO_UP, "up");}// down ボタンの割込み関数
void isrDown() {isrButton(GPIO_DOWN, "down");}// right ボタンの割込み関数
void isrRight() {isrButton(GPIO_RIGHT, "right");}// left ボタンの割込み関数
void isrLeft() {isrButton(GPIO_LEFT, "left");}// enter ボタンの割込み関数
void isrEnter() {isrButton(GPIO_ENTER, "enter");}21

// ボタンの割込み関数
void isrButton(int pin, char *button) {int read1, read2;
struct timeval now;// チャタリングによる誤動作防止のため// BUTTON_USLEEP(0.05 秒)の間隔で GPIO の値を 2 回取得し// 一致する場合のみボタン名を表示}

read1 = digitalRead(pin);usleep(BUTTON_USLEEP);
read2 = digitalRead(pin);
if (read1 == 0 && read2 == 0) {if (currentButton == NULL) {gettimeofday(&now, NULL);
currentButtonTime = now.tv_sec;
currentButton = button;
printf("%s¥n", button);}} else if (currentButton == button && read1 == 1 && read2 == 1) {currentButton = NULL;}

ビルドコマンド:
gcc -lwiringPi -o bhButton bhButton.c
実行コマンド:sudo ./bhButton

22

Python で RPi.GPIO を利用した場合：

bhButton.py# coding: UTF-8
import RPi.GPIO as GPIO
import time
GPIO_UP = 17
GPIO_DOWN = 27
GPIO_RIGHT = 22
GPIO_LEFT = 24
GPIO_ENTER = 25
BUTTON_SLEEP = 0.05
# ボタンの割込み関数
def gpio_callback(channel):# チャタリングによる誤動作防止のため# BUTTON_SLEEP(0.05 秒)の間隔で GPIO の値を 2 回取得し# 一致する場合のみボタン名を表示
value1 = GPIO.input(channel)
if value1 == 1:
returntime.sleep(BUTTON_SLEEP)
value2 = GPIO.input(channel)
if value2 == 1:
returnif value1 != value2:
returnif channel == GPIO_UP:
print('up')elif channel == GPIO_DOWN:
print('down')
elif channel == GPIO_RIGHT:
print('right')
23

elif channel == GPIO_LEFT:
print('left')
elif channel == GPIO_ENTER:
print('enter')# 入力モード,PULLUP モードに設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_UP, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(GPIO_DOWN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(GPIO_RIGHT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(GPIO_LEFT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(GPIO_ENTER, GPIO.IN, pull_up_down=GPIO.PUD_UP)# GPIO の値の変化(1 から 0)を検出し、割り込み処理を行う
GPIO.add_event_detect(GPIO_UP, GPIO.FALLING)
GPIO.add_event_detect(GPIO_DOWN, GPIO.FALLING)
GPIO.add_event_detect(GPIO_RIGHT, GPIO.FALLING)
GPIO.add_event_detect(GPIO_LEFT, GPIO.FALLING)
GPIO.add_event_detect(GPIO_ENTER, GPIO.FALLING)
GPIO.add_event_callback(GPIO_UP, gpio_callback)
GPIO.add_event_callback(GPIO_DOWN, gpio_callback)
GPIO.add_event_callback(GPIO_RIGHT, gpio_callback)
GPIO.add_event_callback(GPIO_LEFT, gpio_callback)
GPIO.add_event_callback(GPIO_ENTER, gpio_callback)while 1:
time.sleep(1)実行コマンド:sudo python bhButton.py

2421. 改訂履歴
更新日

バージョン

内容

2016/02/01 1.0

初版

2016/05/24 1.1「 20. ウ ォ ッ チ ド ッ グ タ イ マ ー の セ ッ ト ア ッ プ 内 容 」 でRaspbian 4.3 以上の場合にウォッチドッグタイマーのモジュール名が「bcm2708_wdog」から「bcm2835_wdt」に変更になったため、設定コマンドの内容を修正

2016/05/27 1.2「16. OS について」
次の文言を追加
git(git がインストールされていない場合にインストールされる)

2016/05/30 1.3「16. OS について」
専用 OS イメージについての説明を削除（今後は Raspbian に対してセットアップツールをインストールする方法のみとする）「17.コンソール / SSH でのログイン」を削除（専用 OS イメージについての説明のため削除）

2016/06/24 1.4「13.I/O コネクタへのアクセスと GPIO ポート」
GPIO のポートの図を変更

2016/12/06 1.5「17.高速シャットダウンの処理シーケンス」
8.現在の時刻を保存します の後に、すべてのプロセスを正常終了させるシーケンスを追加

2017/05/08 1.6「16. OS について」
セットアップツールのインストール時にエラーが出た場合の対応について追記25