ラズパイでセンサープログラミング始めました

KSYさんから発売されたセンサーモジュールキットを購入してみたので、Raspberry Piで試してログを残していこうと思います。

センサーモジュールパック 13個セット - Raspberry Pi Shop by KSY

「いいね!」 1

温湿度センサー

温湿度センサーをRaspberry Piで試してみました。動かすだけなら、Pythonのモジュールをインストールするだけで温湿度の取得はできました。

下記GitHubのサンプルコードがそのまま動作しました。
https://github.com/szazo/DHT11_Python

必要なモジュール:

$ pip3 install dht11

サンプルコード:

import RPi.GPIO as GPIO
import dht11

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

# read data using pin 14
instance = dht11.DHT11(pin = 14)
result = instance.read()

if result.is_valid():
    print("Temperature: %-3.1f C" % result.temperature)
    print("Humidity: %-3.1f %%" % result.humidity)
else:
    print("Error: %d" % result.error_code)

実行してみると時折「Error: 1」や「Erro:2」のような表示がでて、データが取得できないことがありました。

「いいね!」 1

回転センサーモジュール

回転センサーモジュールを (ロータリーエンコーダー) 動かすことができました。特に追加の電子部品は必要なく、ラズパイと直接つないで使用できます。

詳しい使い方はこちら:

使い方を教えてくださった @yasuhiroyamashita さんありがとうございます!

「いいね!」 1

RPi PICO と RPiのUSB Serialについて確認してみました。
PICOから1secごとにデータ送信、RPiで60secごとに読み込んだ場合、以下のコードではバッファにたまったデータの古いデータから一行ずつ読み込むので、最新のデータが読めませんでした。(検証はしてませんが、いずれバッファが溢れそう)

While True:
    line = ser.readline()
    print(line)
    time.sleep(60)

RPiで60秒ごとに読み取りつつ、送られてきたデータの最新値を表示する方法として、こんなのはどうでしょう?

while True:
    while ser.in_waiting > 0:    #バッファがなくなるまで読み込み
        line = ser.readline()
        if ser.in_waiting == 0:    #バッファがなくなったら、最後に読み取った行を表示
            print(line)
    time.sleep(60)

60秒ごとに、バッファがなくなるまでreadlineして、最後に読み取った内容だけを表示しています。

ただし、私見としては、
①データを読み込みたいタイミングでRPi→PICOにキューを送信
②PICOはキューを受けたらその時点でのデータをRPiに送信
③RPiで送られてきたデータを読み取り
とした方がRPi側でタイミングをコントロールできるので気持ちいいですね。(^^)

「いいね!」 2