安価で接続の簡単な温度センサー(LM75B)をraspberry pi(以下ラズパイ) で使ってみる
温度センサーのデータをニフティクラウド mobile backemobile backend にアップロードします
前提条件
- NXPの温度センサー(LM75B)
- ラズパイ
- Python言語
温度センサーの使い方。
接続はI2C方式
従って、事前にI2Cを有効にする。
次のコマンドを実行する。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y i2c-tools
sudo raspi-config
「Advanced Options」->「A7」I2C」
でI2Cを有効にする
###温度センサーとRaspberry Piとの接続
電源をOFFして、VCC、SCL、SDA、GNDをラズパイにつなぐ、
LM75B --ラズパイ
VCC <->3.3V(1)
SCL<->SDA(3)
SDA<->SCL(5)
GND<->GND(6)
再起動して確認
i2cdetectコマンドで確認
実行例
pi@raspberrypi:~$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
温度センサーのデータ形式
2進数で2桁ごとまとまっていて、小さい順に並んでいる。
下位5bitは無効で0.125度段階になっている。
有効桁数は11bit
摂氏がマイナスは最上位Bitが1のとき、2の補数になる。
================================
#!/usr/bin/python
#coding: utf-8
import smbus
import time
i2c = smbus.SMBus(1)
lm75b_address = 0x48
def get_Temperature():
block = i2c.read_i2c_block_data(lm75b_address, 0x00, 2)
val = block[0] << 8 #上位ビットをシフトしてセット
val = val | block[1] #下位ビットをORでセット
# val = 0xc920 #マイナス温度のテスト
# 以下プラス、マイナス判定をして温度を計算する
if(val >= 0x7fff):
val = val - 0xffff
result = ((val >>5) * 0.125)
return result
while True:
print("Temperature:%6.2f" % get_Temperature())
time.sleep(5)
===============================
実行例
pi@raspberrypi:~$ ./get_temp.py
Temperature: 32.50
Temperature: 32.50
Temperature: 32.62
###ニフティクラウド mobile backemobile backend にアップロードする
ncmbのpythonモジュールのインストール
sudo pip install py_nifty_cloud
nifty_cloud.ymlにファイルアプリケーションキー、クライアントキーを設定する
nifty_cloud.yml
APPLICATION_KEY: 'your application key'
CLIENT_KEY: 'your client key'
===============================
#!/usr/bin/python
#coding: utf-8
import smbus
import datetime
import locale
from py_nifty_cloud.nifty_cloud_request import NiftyCloudRequest
i2c = smbus.SMBus(1)
lm75b_address = 0x48
def get_Temperature():
block = i2c.read_i2c_block_data(lm75b_address, 0x00, 2)
val = block[0] << 8 #上位ビットをシフトしてセット
val = val | block[1] #下位ビットをORでセット
# val = 0xc920 #マイナス温度のテスト
# 以下プラス、マイナス判定をして温度を計算する
if(val >= 0x7fff):
val = val - 0xffff
result = ((val >>5) * 0.125)
return result
# instanciate with yaml file contains APPLICATION KEY and CLIENT KEY
ncr = NiftyCloudRequest('.nifty_cloud.yml')
path = '/classes/Temperature'
method = 'POST'
# today()メソッドで現在日付・時刻のdatetime型データの変数を取得
d = datetime.datetime.today()
date_str = d.strftime("%Y-%m-%d %H:%M:%S")
value = "%6.2f" % get_Temperature()
# post a new recode
values = {'date':date_str,'temperature': value}
response = ncr.post(path=path, query=values)
print(response.status_code)
# show response as json format
print(response.json())
===============================