初めに
当方初心者のため理解が乏しい部分が多々ありますが、アドバイス頂けますと幸いです。
”ここをもう少し読め”でも構いません、方向性を示して頂けると非常に助かります。
やりたいこと
特定のBuletooth環境センサー(inkbirdのIBS-TH1 mini)の値を継続的(最終的には0.1秒おき)
に取得したい。cronにてスケジュールを組み、定期的にデータを取得できることは確認できました
今回やりたいのはcron無しでプログラム内のみで繰り返し処理を行い、継続的にデータを取得したい
ということになります
困っていること
プログラム内でreadを繰り返してもセンサーデータが更新されない
→同じ内容のデータしか返ってこない
同じ取得間隔でcronで実行した場合とプログラム上で繰り返し処理にて
データを連続取得した場合では、前者はセンサからの取得データに変化があるのに対し
後者の場合はデータの変化が見られませんでした。
実際のプログラム
実際に使用しているプログラム全文は以下になります
Python2.7
1from bluepy import btle 2import os 3import datetime 4import struct 5import time 6 7##GET ABS PATH## 8abs_file = os.path.abspath("cron_test3.txt") 9 10##OPEN TARGET FILE 11file = open(abs_file, 'a') 12 13##Get DATA## 14macaddr = '実物のMACアドレス' 15 16for num in range(2): 17 ##SLEEP## 18 time.sleep(10) #EVERY 10 SEC 19 20 temp_x = 'temp_' + str(num) 21 characteristic_x = 'characteristic_' + str(num) 22 file.write(temp_x + '\t') 23 file.write(characteristic_x + '\t') 24 #変数名をわざわざ変えてるのはデータの受け側に問題があるかと思ったからです 25 26 ##READ DATA## 27 peripheral = btle.Peripheral() 28 peripheral.connect(macaddr) 29 characteristic_x = peripheral.readCharacteristic(0x002d) 30 (temp_x, humid, unknown1, unknown2, unknown3) = struct.unpack('<hhBBB', characteristic_x) 31 32 ##GET DATE&TIME## 33 now = datetime.datetime.now() 34 35 ##WRITE TEXT## 36 d = temp_x / float(100) 37 h = humid / float(100) 38 c = unknown3 39 file.write(str(now) + '\t') 40 file.write(str(d) + ' / ') 41 file.write(str(h) + ' / ') 42 file.write(str(c) + ' / ') 43# file.write(temp_x + ' / ') 44 file.write('\n') 45 46file.close() 47peripheral.disconnect()
実行結果が以下になります
temp_0 characteristic_0 2022-07-12 14:32:16.147834 27.27 / 74.74 / 158 / temp_1 characteristic_1 2022-07-12 14:32:17.273077 27.27 / 74.74 / 158 /
頭二つの変数名は余計なので無視してください。
個人的に考えている懸念事項
- そもそもセンサー側でデータが更新されていないのでは?(peripheral.readCharacteristicの部分)
- センサ側をブロードキャストモードにしてデータを受け取るべき?(←データを受け取る方法・種類・手段を理解できてない)
ご教授いただけますと幸いです、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー