LoginSignup
4
5

More than 5 years have passed since last update.

ラズパイで温度センサー(LM75B)を使ってみる。

Last updated at Posted at 2016-06-13

安価で接続の簡単な温度センサー(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の補数になる。

================================

get_temp.py
#!/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'

===============================

ncmbsample.py
#!/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())

===============================

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5