コンテンツにスキップ
Raspberry PIのIoTサーバー

Raspberry PIのIoTサーバー

このチュートリアルでは、Raspberry PIにmachbase-neoをインストールし、センサーデータを収集・検索する手順を説明します。

DHT11センサーとRaspberry PIの接続

DHT11センサーをGPIOに接続する前に、必ずRaspberry PIの電源を切ってください。

gpio

DHT11にはVCC、DAT、GNDの3本のピンがあり、それぞれGPIOヘッダーの物理ピン2、3、6に接続します。物理ピン3がGPIO 2です。

dht11

センサーデータの読み取り

  • Raspberry PI 4 Model B(このチュートリアルではメモリ4GBモデルを使用)
  • Adafruit_DHT 11(センサー)

センサーデータを読み取るために、PythonモジュールAdafruit_DHTをインストールします。

pip3 install Adafruit_DHT

以下のコードは、DHT11センサーのDATAピンに接続したGPIO 2(pinnum = 2)から値を読み取ります。 1秒ごとに標準出力へname, timestamp, value形式のデータを出力します。 machbase-neoがナノ秒単位のタイムスタンプを処理できるように、1000000000を掛けた値を生成します。

import Adafruit_DHT
from time import time
from time import sleep

pinnum = 2
sensor = Adafruit_DHT.DHT11
while (True):
    hum, temp = Adafruit_DHT.read_retry(sensor,pinnum)
    ts_ns = int(time() * 1000000000)
    if hum is not None and temp is not None:
        print(f'temperature,{ts_ns},{temp}')
        print(f'humidity,{ts_ns},{hum}')
        sleep(1)

ソースをdht.pyとして保存し、実行して結果を確認します。

$ python dht.py
temperature,1676008535430951936,28.0
humidity,1676008535430951936,33.0
temperature,1676008536956561152,28.0
humidity,1676008536956561152,33.0
temperature,1676008538482078464,28.0
humidity,1676008538482078464,33.0
temperature,1676008540007633664,28.0
humidity,1676008540007633664,33.0
^C

machbase-neoのインストール

  • SSHまたはコンソールでPIに接続します。
$ ssh -l pi <ip address>
  • demoディレクトリを作成します。
mkdir demo && cd demo
  • machbase-neoをダウンロードします。
sh -c "$(curl -fsSL https://docs.machbase.com/install.sh)"
  • アーカイブを展開します。
$ unzip machbase-neo-{{ site.latest_version }}-linux-arm64.zip
$ cd machbase-neo-{{ site.latest_version }}-linux-arm64
  • machbase-neoを起動します。
./machbase-neo serve

img

停止するにはCtrl+Cを押します。

machbase-neoのネットワーク設定

外部接続用のIPバインド

既定の設定では、machbase-neoはlocalhost(127.0.0.1)でのみ待ち受けます。 ノートPCや他のアプリケーションサーバーからHTTPなどで接続するには、--host <bind_ip_addr>オプションでホストIPをバインドする必要があります。

./machbase-neo serve --host 0.0.0.0

データの保存

exampleテーブルの作成

machbase-neo serveの実行中に、以下のコマンドでexampleテーブルを作成します。

./machbase-neo shell "create tag table if not exists EXAMPLE (name varchar(100) primary key, time datetime basetime, value double)"

machbase-neoへのデータ書き込み

dht.pyを実行し、出力をmachbase-neo shell importにパイプで渡します。 importコマンドは既定でCSV形式を受け取り、EOFに達するまで、指定したテーブル(ここではexample)に1行ずつ取り込みます。

python dht.py | ./machbase-neo shell import example

標準出力をパイプで渡しているため、出力メッセージは表示されません。

machbase-neoからのデータ読み取り

直近に保存したデータの確認

書き込み中に別のターミナルを開いてSQLを実行すると、最新のデータを確認できます。 --tz localオプションは、TIMEフィールドをUTCではなくローカルタイムゾーンで表示します。

./machbase-neo shell walk --tz local 'select * from example order by time desc'

rキーを押すと、クエリを再実行して最新のデータに更新します。

walk

アプリケーションからのデータ検索

machbase-neoは保存したデータを検索するHTTP APIを提供しているため、以下のようにSQLを含むHTTPリクエストで容易にデータを取得できます。

from urllib import parse
import pandas as pd
query_param = parse.urlencode({
    "q":"select * from example order by time limit 500",
    "format": "csv",
})
df = pd.read_csv(f"http://192.168.1.214:5654/db/query?{query_param}")
df

query

最終更新日