しろふくろうず (しろふくろーず)

修繕に関するDIYをメインに趣味や時事ネタなども

ラズベリーパイに接続した温度センサーの数値をAzureのクラウドストレージに保存してみました

こんにちは。DIYフクロウです(・ω・)ノ

 

お久しぶりの投稿です~

 

Pythonで動かして学ぶ!あたらしいIoTの教科書 株式会社VOST著

 

を読んで、なんとか、

Microsoft Azureのクラウドストレージに温度(数値)をアップロードできました。

Azureで苦労し、顔文字までIoTになってしまったフクロウです (IoT)ノ

Azureは無料試用版で試しています。

 

本書ではI2C温度センサー(ADT7410)をRaspberry Pi に接続した例ですが、

DIYフクロウはI2C温度センサー(AM2320)を使いました。(・ω・v)

 

やっぱり、本書の動作環境のとおりRaspberry Pi は Stretch (Python3.5.3) でないとダメでした。

Buster (Python3.7.3) ですとchapter5.pyで次のようなエラーが出てあきらめました。

(ラズパイ4で進めていくとP.111でプログラムを実行するとエラーで行きづまります。)

 

import iothub_client
File "/home/pi/.local/lib/python3.7/site-packages/iothub_client/__init__.py", line 1, in <module>
from .iothub_client import *
ImportError: libboost_python-py35.so.1.62.0: cannot open shared object file: No such file or directory

 

ムムムム・・・(;ω;)

 

ということで、ラズパイ4BはBuster (Python3.7.3) なので難しいと思います。

ラズパイ3BのRaspbian OSがStretchの環境で行いました。(・ω・;)

 

そのほか、気になった点

P.95 ④クリック:

 IoT Hub が、「おすすめ」に無いときは「すべて表示」から探しましょう。

 

P.100 ④クリック:

 Stream Analytics job が、「おすすめ」に無いときは「すべて表示」から探して作成しましょう。

 

P.103 Stream AnalyticsのジョブでIoT Hub の新規入力設定:

 パーティションキーは 空白 でOK。

 

P.105 出力の設定

 サブスクリプションが無料試用版だと、ストレージアカウントが選べない・・・

 →手動で行えば突破できました!

 ここが一番困りました・・・Azure慣れておらず(;ω;)

 

詳細は、

・「サブスクリプションからストレージを選択する」から「ストレージ設定を手動で行う」に丸ポチを変える

・ストレージアカウントを手動で入力(P.92で設定した名前)し、ストレージ アカウント キーは、左上の「三」クリックして、「ストレージアカウント」をクリックして、自分で設定したストレージアカウントの名前(P.92で設定した名前)をクリックして左のメニューの設定にある「アクセスキー」をクリックすると、key1のキーやkey2のキーがありますので、key1のキーをコピーして貼り付ける。

・コンテナーは「既存のものを使用」にして、P.94の5.3項で作成したコンテナーの名前を入れる。

 

これで突破できると思います。

 

なお、cyapter5.pyのAM2320化改造は

頭に追加:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

 

補足:

CONNECTION_STRING = "xxxxxx" のxxxxxは

CONNECTION_STRING = "HostName=xxxxxx" でした。(・ω・;)

 

削除:

bus = smbus.SMBus(1)

追加:

i2c = smbus.SMBus(1)
address = 0x5c

 

追加:

def am2320():
    try:
        i2c.write_i2c_block_data(address,0x00,[])
    except:
        pass
    time.sleep(0.003)
    i2c.write_i2c_block_data(address,0x03,[0x00,0x04])
    time.sleep(0.015)
    block = i2c.read_i2c_block_data(address,0,6)
    hum = float(block[2] << 8 | block[3])/10 # 湿度
    tmp = float(block[4] << 8 | block[5])/10 # 温度
    return tmp

 

 削除:

# 温度を読み込む関数
def adt7410():
    block = bus.read_i2c_block_data(0x48, 0x00, 2)
    data = (block[0] << 8 | block[1]) >> 3 # 13ビットデータ
    if (data >= 4096): # 温度が負の場合
        data -= 8192
    temp = data * 0.0625
    return temp

 

削除:

        inputValue = adt7410()

追加:

        inputValue = am2320()

        print(inputValue)

 

削除(任意):

        time.sleep(1) #1秒

追加(任意):

        time.sleep(60) #60秒

 

Thonny Python IDEを使わずにターミナルから実行してみました。

f:id:shirofukurokun:20200927153649j:plain

Raspbian_Stretch_Terminal

 

これでP.114までうまくいきコンテナーの中からCSVファイルをダウンロードすると温度が取得できました!(・ω・♪)

 

ちなみにAM2320の物理配線はI2C接続なので、次の通りジャンパーワイヤーで接続します。

f:id:shirofukurokun:20200927152330p:plain

RaspberryPi_AM2320_fritzing

ここまでお読みいただき、ありがとうございます。

以上となります(`・ω・´)v