LoginSignup
0
0

多点の温度計測をする。

Posted at

はじめに

多点の温度計測(5点程度)が必要になった。
ネットワーク越しに値が見たい
計測先はWiFiなのでIPアドレスがかわる

多点なのでOneWire

機器PC、マイコンは 以下の3台

  1. 設定用 分解能設定--> M5Stack Basic
  2. 温度計測側
  3. データ受信側(ベータベース・可視化)

設定用(Arduino)

image.png

目的

センサー1個つないで以下のことができる

  • センサー動作確認(温度表示)
  • センサーID表示
  • 精度(分解能)を9ビットにセットする。

Hardware

M5Stack Basic
基板 27PinにDin
PullUp抵抗 4.7kΩ

Library

M5Stack
DallasTemperature

スケッチ

#include <M5Stack.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// DS18B20のデータピンを指定します
const int oneWireBus = 26;

OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
TFT_eSprite spr1 = TFT_eSprite(&M5.Lcd);
TFT_eSprite spr2 = TFT_eSprite(&M5.Lcd);
void setup() {
  // M5Stackの初期化
  M5.begin();
  //音が出るのでMute
  M5.Speaker.begin();
  M5.Speaker.mute();
  // シリアル通信を開始します
  Serial.begin(9600);
  spr1.setColorDepth(8);
  spr1.createSprite(320, 50);
  spr2.setColorDepth(8);
  spr2.createSprite(320, 100);
  // DS18B20のセンサーを開始します
  sensors.begin();
}

void loop() {
  char buf[25];
  spr1.fillRect(0, 0, 320, 50, TFT_BLACK);
  spr2.fillRect(0, 0, 320, 100, TFT_BLACK);
  // センサーから温度を読み取ります
  sensors.requestTemperatures();
  sensors.setResolution(9);
  // センサーの数を取得します
  int sensorCount = sensors.getDeviceCount();

  // 各センサーの温度を表示します
  for (int i = 0; i < sensorCount; i++) {
    // センサーのアドレスを取得します
    DeviceAddress sensorAddress;
    sensors.getAddress(sensorAddress, i);
    sprintf(buf, "%02x-%02x%02x%02x%02x%02x%02x ", sensorAddress[0], sensorAddress[6], sensorAddress[5], sensorAddress[4], sensorAddress[3], sensorAddress[2], sensorAddress[1]);
    // 温度を取得します
    float temperature = sensors.getTempCByIndex(i);

    // シリアルモニタに温度を表示します
    Serial.print(buf);
    Serial.print("Sensor ");
    Serial.print(i + 1);
    Serial.print(" temperature: ");
    Serial.print(temperature);
    Serial.println("°C");
    spr1.setTextSize(2);
    spr1.setTextDatum(TC_DATUM);
    spr1.setTextColor(TFT_WHITE, TFT_BLACK);
    spr1.drawString(buf, 0, 0, 2);
    
    spr2.setTextSize(2);
    spr2.setTextDatum(TC_DATUM);
    spr2.setTextColor(TFT_WHITE, TFT_BLACK);
    spr2.drawFloat(temperature, 2, 0, 0, 7);
  }
  spr1.pushSprite(0, 20);
  spr2.pushSprite(0, 100);
  // M5Stackの更新処理
  M5.update();
  Serial.println("----");
  // 1秒待ちます
  delay(500);
}

測定器(RaspberryPI (M5Stack CM4Stack))

目的

  • 本番のセンシング
  • 温度センサー 5本以上

HardWare

  • CM4STACK
  • 基板
    • Port 2(UART)に接続
    • DinはGrove2番ピン(RaspberryPiのPin4)
    • DCDCコンバータ(秋月電子 K-16055)で電圧を3.3Vに下げる。
    • PullUP抵抗は4.7k
      image.png

Setup

  • オリジナルのRasbian(M5StackのカスタムOSではなぜか1Wire動かず)
    • FANの設定
    • 音は出ない
    • 本体の表示ない
  • NTPの設定
    • /etc/systemd/timesyncd.conf 内のFallbackNTPのコメントを外して設定、再起動
  • WiFi IEEE802.1Xの認証設定
    • 今回はネットがこれのせいでRasPIを使っている
    • いろいろなサイトを検索しながら。。。
    • パスワードをハッシュしないといけなかった。
  • Node-REDのインストール

Node-RED

  • サービスでスタートさせる。
  • node-red-contrib-ds18b20-sensor パレット追加

InfluxDBはInflux Batchノードを使用
image.png

Inject

測定タイミングになる。
開始後5秒と5分間隔を設定

rpi-ds18b20

rpi-ds18b20 はArrayにチェック
image.png

Function

cm4_1とRoom1は適宜変更

let newMsg = {};
let datas= new Array();
for(let i=0;i<msg.payload.length;i++){
      let data ={};
      data=  {
                  measurement:"cm4_1",
                  fields:{
                        Temp:msg.payload[i].temp
                  },
                  tags:{
                        Room:"Room1", 
                        Sensor:msg.payload[i].file
                  },
                  timestamp: new Date()
            };
            datas.push(data);
      }
      newMsg.payload=datas;
return newMsg;

InfluxDB

  • Version2で設定
  • WiFiで8086ポートが通らないので8080ポートに変更

データ受信側(ベータベース・可視化)

Software

  • Ubuntu 22.04LTS
  • InfluxDB
  • Grafana

InfluxDB

  • 設定
    • WiFiのFirewallで8086ポートがつぶされていたので8080ポートに設定
    • /etx/influxdb/config.toml にhttp-bind-address = ":8080"を追加

Grafana

クエリ

from(bucket: "bucket1")
  |> range(start: -1d)
  |> filter(fn: (r) => 
    r._measurement == "cm4_1" and 
    r._field == "Temp"
  )

Web キャプチャ_20-7-2023_193628_10.96.100.114.jpeg

0
0
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
0
0