前回は、HummingBoardにWiringXを載せて、WiringXのAPIコマンドでGPIOの制御の検証をしました。”LEDチカ”まではこれでできるようになりました。併せてPythonでの制御もまもなくできそうです。今回は、GPIOと同じコネクタ上にあるSPIを使って、LCDモジュールを接続して表示をさせてみる検証を行ってみます。HummingBoardを装置に組み込んで、その装置の設定や状態の表示に使うというような用途が一番もっともらしいでしょう。小ぶりなもののほうが実際の用途に合っていそうです。
[温度センサーモジュール]
今回使用した温度センサーは「ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール」です。株式会社秋月電子通商から購入することができます。
◆主な仕様
・温度精度:±0.5℃@-40℃~+105℃(2.7V~3.6V)
±0.4℃@-40℃~+105℃(3.0V)
・温度分解能:0.0078℃(16ビット設定時)/0.0625℃(13ビット設定時)
・温度校正および温度補正、直線性補正等は不要
・動作/測定温度範囲: -55℃~+150℃
・電圧範囲:DC+2.7V~+5.5V
・I2C互換インターフェース
・消費電流(@VDD=3.3V、TA=+25℃)
ノーマル・モード:210μA(typ)
パワーセービング・モード(1サンプル/1秒):46μA(typ)
シャットダウン・モード:2μA(typ)
・基板サイズ:15×11ミリ
・基板上の入出力端子:4個(VDD,GND,SCL,SDA)
[配線]
HumminBoardとの接続表です。今回の実験では、前回までと同じGPIO 拡張ボードとブレッドボードを用いています。
I2C Signal 対応表
GPIO Signal Comparison | ||||||||||
GPIO | Signal | pin# | HB Signal | Sensor-PIN | GPIO | Signal | pin# | HB Signal | Sensor-PIN | |
7 | CE1 | 26 | ECSPI2_SS1 | 17 | P0 | 11 | GPIO 73 | |||
8 | CE0 | 24 | ECSPI2_SS0 | 18 | P1 | 12 | GPIO 72 | |||
11 | SCLK | 23 | SPI_SCLK | 27(21) | P2 | 13 | GPIO 71 | |||
9 | MISO | 21 | SPI_MISO | 22 | P3 | 15 | GPIO 10 | |||
10 | MOSI | 19 | SPI_MOSI | 23 | P4 | 16 | GPIO 194* | |||
15 | RXD | 10 | UART RX | 24 | P5 | 18 | GPIO 195* | |||
14 | TXD | 8 | UART TX | 25 | P6 | 22 | GPIO 67 | |||
3(1) | SCL | 5 | I2C_SCL | CLOCK | 4 | P7 | 7 | GPIO 1 | ||
2(0) | SDA | 3 | I2C_SDA | DATA | GND | |||||
GND | 1 | GND | ||||||||
3.3V | 25 | VCC |
[OS]
HummingBoardのGPIOの検証に使っているDebianを用います。v2.6(2015年2月時点で最新)以降のものを使ってください。(SPIのバグフィックスが入っているので重要)
http://www.igorpecovnik.com/2014/08/19/cubox-i-hummingboard-debian-sd-image/
http://mirror.igorpecovnik.com/Cubox-i_Debian_2.6_wheezy_3.14.14.zip
Debian v2.6 / 5.2.2015
Kernel 3.14.14
Fixed bug in SPI. Display works now
XBMC upgrade ready / tested.
温度センサーが認識できるかチェックします
|
下のように、ADT7410のアドレスが 0x48 し表示されればOKです。
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- |
温度を計測するために、下のようなPythonのファイルを作成します
/root/adt7410ディレクトリを生成して、ファイル名はadt7410.pyでセーブしてください。
(母艦のPCでadt7410.pyファイルを作成して、SDをマウントしてコピーする方が簡単でよいでしょう。以下、様々なテキスト・ファイルの作成・設置については同様に考えてください。)
#!/usr/bin/python # -*- coding: utf-8 -*- import smbus import time i2c = smbus.SMBus(2) address = 0x48 while True: block = i2c.read_i2c_block_data(address, 0x00, 12) temp = (block[0] << 8 | block[1]) >> 3 if(temp >= 4096): temp -= 8192 print("Temperature:%6.2f" % (temp / 16.0)) time.sleep(10)
|
温度測定をしてみます
次のようにPythonスクリプトを実行してください。
# python /root/adt7410/adt7410.py |
10秒ごとに温度が表示されます。
[Webサーバのインストール]
測定した温度をPC、タブレット端末、スマートフォン等のブラウザからグラフとしてみられるように
Apache WebサーバとPHPをインストールしましょう。
(1) Apache2のインストール
|
(2) PHPのインストール
|
これで、HummingBoardがWebサーバになりました。
[ グラフ表示の準備]
次に、Webサーバ上で動くグラフ表示コンテンツを作成します。
その前に、温度を計測して、その結果をCSVファイルに追記していくPythonスクリプトadt7410-2.pyを作成します。
グラフ表示コンテンツは、そのCSV1ファイルを取り込んで折れ線グラフを生成します。
(1) 測定した温度をCSVファイルに追記していくPythonスクリプトadt7410-2.pyを/root/adt7410の下に作成します
adt7410-2.pyの中身は下のように記述します。この例では10分ごとに”時刻”,”温度”を/var/www/adt7410/temp.csvファイルに追記していきます。
#!/usr/bin/python # -*- coding: utf-8 -*- import smbus import time import datetime i2c = smbus.SMBus(2) address = 0x48 filepath = '/var/www/adt7410/temp.csv'
while True: block = i2c.read_i2c_block_data(address, 0x00, 12) temp = (block[0] << 8 | block[1]) >> 3 if(temp >= 4096): temp -= 8192
tnow = datetime.datetime.now() tstr = tnow.strftime("%Y/%m/%d %H:%M")
f = open(filepath, 'a') f.write(tstr) f.write(',') f.write(str(temp / 16.0)) f.write('\n') f.close()
time.sleep(600) |
コメントをお書きください