メモブログ

やったことを少しでも残すブログです

Raspberry Pi Pico W で温度と湿度を図ってみた

Raspberry Pi Pico W で温度と湿度を図ってみた。

出来たこと

温度と湿度を図り、スマホやPCからデータをWEB経由で確認できるようになった。


用意したもの

アプローチ

  1. Raspberry Pi Pico WとDHT11を繋ぎ、検知したデータを取得できるようにした。
  2. Raspberry Pi Pico Wをhttpサーバーにした。
  3. ローカルPCからPicoに温度と湿度を図るようリクエストをあげる
  4. ローカルPCからLightsailにあるMySQLにデータを突っ込む
  5. LightsailのApacheにファイルを置いてMySQLからデータ取得、HTML生成
    • Apatchのデフォルトの設定についていい感じのページがあったのだが、忘れてしまった。。。残念。

コード

getTempAndHumi()を作成し、データを取得し、jsonで返すようにしてみた。

def getTempAndHumi():
    d = dht.DHT11(machine.Pin(15))
    try:
        sleep(1)
        d.measure()
        print("test")
    except OSError as e:
        print(e.errno)
        print('Faild')
        
    data = {
        "temperature": str(d.temperature()),
        "humidity" : str(d.humidity())
    }
    return data

"""
/ 色々と書いて
"""
# Listen for connections
while True:
    try:
        cl, addr = s.accept()
        print('client connected from', addr)
        cl_file = cl.makefile('rwb', 0)
        while True:
            line = cl_file.readline()
            if not line or line == b'\r\n':
                break
        cl.send('HTTP/1.0 200 OK\r\nContent-type: application/json\r\n\r\n')
        data = getTempAndHumi()
        json_data = json.dumps(data).encode('utf-8')
        cl.send(json_data)
        cl.close()
    except OSError as e:
        cl.close()
        print('connection closed')

何故かPico単体で動かないことがあった。どこで処理が落ちているか分からなかったので、無理やり、LEDが点滅するかどうかをブレイクポイントにしました。
もっといい方法があったはず。

led = machine.Pin("LED", machine.Pin.OUT)
while True:
    led.on()
    utime.sleep(1)
    led.off()
    utime.sleep(1)

学んだこと

  • Lightsailの環境にアクセルするには、プライベートキーが必要。
  • LightsailのLAMPへアクセスするには、SSHトンネルを使う必要がある。
  • 現状のPico はOSを持たない(マイコン)なので、SSHトンネルを設定できない。
  • MicroPythonは少し癖がある印象。Pythonではできることが、MicroPythonではできない場合がある。特にパッケージはMicroPython用のパッケージがないと動かない。
  • OSがあるって何て素晴らしいことなのだろうか!!!