LoginSignup
2
0

More than 3 years have passed since last update.

HAT-YUNの観測データをinfluxDBに入れる

Last updated at Posted at 2020-11-11

目標

HAT-YUNで観測した値をデータベースに入れて記録したい。かっこいいグラフ表示とか出来たらもっといいよね!
スクリーンショット 2020-11-11 16.02.38.png

材料

・M5Stick-C
https://www.switch-science.com/catalog/5517/
・YUN-HAT
https://www.switch-science.com/catalog/6072/
・InfluxDBが動いてるサーバ
今回はUbuntuのパッケージにあったInfluxDB 1.1.1を使いましたが、現時点での最新バージョンは1.8.3です。動作確認出来た方がいましたらコメントお願いします。

初期設定

動作確認

Arduinoを開いて、
ファイル>スケッチ例>M5StickC>Hat>YUN
に、公式のサンプルソースがあるので、開いて書き込みます。

// Adafruit_BMP280 lib in Sketch->Includ Library->Library Manager

とあるので、Adafruit_BMP280ライブラリをインストール。

書き込み時に、エラーが出る場合はG0をジャンパーピン等でGNDに繋ぐと、書き込める場合があります。

InfluxDBの準備

インストール方法は公式を参考に。
https://docs.influxdata.com/influxdb/v1.8/introduction/install/

UDPを使えるようにする

運用場面においてtcpにするメリットは無いのでudpを使います。

viの使い方はググってください。

$ sudo vi /etc/influxdb/influxdb.conf

必要箇所のコメントアウトを削除。

 [[udp]]
  # enabled = false
   enabled = true
   bind-address = ":8089"
   database = "udp"

influxdbを再起動

$ sudo service influxdb restart

データベースを作る

$ influx
CREATE DATABASE udp
quit

ソース


YUN.ino
YUN.ino
// please install Adafruit_BMP280 lib first
// Adafruit_BMP280 lib in Sketch->Includ Library->Library Manager

#include "M5StickC.h"
#include <Adafruit_BMP280.h>
#include "SHT20.h"
#include "yunBoard.h"
#include <WiFi.h>
#include <WiFiUdp.h>

char ssid[] = "YOUR-WiFi-SSID";
const char* password = "WiFi-pass";

// the IP address of your InfluxDB host
byte host[] = {192, 168, 1, 60};

// the port that the InfluxDB UDP plugin is listening on
int port = 8089;

SHT20 sht20;
Adafruit_BMP280 bmp;

uint32_t update_time = 0;
float tmp, hum;
float pressure;
uint16_t light;

WiFiUDP udp;

void setup() {
  M5.begin();
  Wire.begin(0, 26, 100000);
  M5.Lcd.setRotation(1);
  M5.Lcd.setTextSize(2);
    M5.Lcd.fillScreen(BLACK);
  // RGB888
 //  led_set(uint8_t 1, 0x080808);

  if (!bmp.begin(0x76)) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
  }

    /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_1000); /* Standby time. */

  // put your setup code here, to run once:
    WiFi.begin(ssid, password); 
    while (WiFi.status() != WL_CONNECTED) { 
        delay(100);
        Serial.print(".");
    }
    Serial.println();
}

uint8_t color_light = 5;

void loop() {

//  led_set_all((color_light << 16) | (color_light << 8) | color_light);
  if(millis() > update_time) {
    update_time = millis() + 1000;
    tmp = sht20.read_temperature();
    hum = sht20.read_humidity();
    light = light_get();
    pressure = bmp.readPressure();

    M5.Lcd.setCursor(0, 8);
    M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
    M5.Lcd.printf("tmp:%.2f\r\n", tmp);
    M5.Lcd.setTextColor(TFT_GREEN, TFT_BLACK);
    M5.Lcd.printf("hum:%.2f\r\n", hum);
    M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
    M5.Lcd.printf("pre:%.2f\r\n", pressure/100);
    M5.Lcd.setTextColor(TFT_GREEN, TFT_BLACK);
    M5.Lcd.printf("light:%04d\r\n", light);
  }

  M5.update();
  Serial.println(pressure/100);

  if(M5.BtnA.wasPressed()) {
    esp_restart();  
  }

  delay(100);
  // put your main code here, to run repeatedly:
  byte addr[8];
  uint8_t chipid[6];
  esp_efuse_read_mac(chipid);
  String id=String(chipid[0],HEX)+String(chipid[1],HEX)+String(chipid[2],HEX)+String(chipid[3],HEX)+String(chipid[4],HEX)+String(chipid[5],HEX);
  String line;

    line="sensor,mac="+id+" device=\"yun\",tmp="+tmp+",hum="+hum+",pre="+pressure/100+",light="+light;
Serial.println(line);
    udp.beginPacket(host, port);
    udp.print(line);
    /* line output sample 
sensor,mac=11a11d11ff00 device="yun",tmp=30.99,hum=35.00,pre=1013.3,light=400
*/
    udp.endPacket();
    delay(10000);
}


Grafana

https://grafana.com/docs/grafana/latest/installation/
公式通りにインストール。

特に迷う所は無いと思いますが、humのクエリーはこんな感じ。

SELECT mean("hum") FROM "sensor" WHERE $timeFilter GROUP BY time($__interval) fill(null)

追記:FBで教えてもらいました。下に表示されている項目をクリックすると、左側のy軸か右側か選択できます。

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