こんにちは。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を使わずにターミナルから実行してみました。
これでP.114までうまくいきコンテナーの中からCSVファイルをダウンロードすると温度が取得できました!(・ω・♪)
ちなみにAM2320の物理配線はI2C接続なので、次の通りジャンパーワイヤーで接続します。
ここまでお読みいただき、ありがとうございます。
以上となります(`・ω・´)v