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

安価で接続の簡単な温度センサー(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進数で２桁ごとまとまっていて、小さい順に並んでいる。
下位５bitは無効で0.125度段階になっている。
有効桁数は11bit
摂氏がマイナスは最上位Bitが１のとき、２の補数になる。

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

```py: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'

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

```py: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())
```

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