LoginSignup
6
2

Raspberry Piで取得した画像、温度、湿度をプリザンターに登録する

Posted at

概要

Raspberry Piで取得した画像、温度、湿度をプリザンターに登録するPyhtonのスクリプトを作成しました。植物の生長などを定期的に記録するシステムなどに応用できるかもしれません。

システム構成

Raspberry Pi完成写真

Raspberry Piにカメラモジュールと温湿度センサーを装着した状態
IMG_7469.jpg

窓際に設置して道路状況をモニター
IMG_7468.jpg

Raspberry Piで動作するPyhtonのスクリプト

Thonnyに下記のスクリプトを張り付けて実行するとカメラの画像とセンサーのデータを取得します。そのデータをプリザンターにAPIで登録します。

from picamera2 import Picamera2, Preview
import time
import base64
import requests
import json
import board
import adafruit_dht

# カメラを起動して写真を撮ってJPEG画像を保存した後、Base64エンコードしたデータを返す関数
picam2 = Picamera2()
def getImage():
    picam2.start_and_capture_file(
        name="test.jpg",
        delay=2
        )
    with open("test.jpg", "rb") as f:
        image = f.read()
    return base64.b64encode(image).decode('ascii')

# 温湿度センサーから温度データと湿度データを取得して返す関数
dhtDevice = adafruit_dht.DHT22(board.D4, use_pulseio=False)
def getTemp():
    while True:
        try:
            # Print the values to the serial port
            temperature_c = dhtDevice.temperature
            temperature_f = temperature_c * (9 / 5) + 32
            humidity = dhtDevice.humidity
            print(
                "Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(
                    temperature_f, temperature_c, humidity
                )
            )
            return {
                    "NumA": temperature_c,
                    "NumB": humidity
                }
        except RuntimeError as error:
            continue
        except Exception as error:
            dhtDevice.exit()
            raise error

# プリザンターに取得したデータ登録する
# カメラの画像は内容欄(Body)に挿入する
while True:
    url = "https://demo.pleasanter.org/api/items/9499654/create"
    data = json.dumps({
        "ApiVersion": 1.1,
        "ApiKey": "***********",
        "Title": "Today Info",
        "NumHash": getTemp(),
        "ImageHash": {
            "Body": {
                "HeadNewLine": False,
                "EndNewLine": False,
                "Position": 0,
                "Alt": "imageBody",
                "Extension": ".jpg",
                "Base64": getImage()
            }
        }
    })
    headers={'Content-Type': 'application/json', 'charset': 'UTF-8', 'user-agent': 'vscode-restclient'}
    response = requests.post(url, data=data, headers=headers)
    print(response.content.decode())


プリザンターに登録されたイメージ

オフィスから目の前の道路状況を定期的に撮影、同時に温度、湿度を記録
image.png

プリザンターの一覧画面を定期的にリロードするJavaScript

定期的にデータがアップロードされてくるので画面をリロードすることで監視システムのようになる

setInterval(function() {
  $p.send($('#Grid'));
}, 2000);
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2