InfluxDBにGPSログを記録する
概要
NMEAを吐くGPSモジュールとM5AtomがUARTで通信して、GPS座標、高度、CPU?のシリアル番号をinfluxDBに記録する。
材料
・M5 ATOM Lite
・NMEAを出すGPSモジュール
・UDP通信可能なInfluxDBが動いているサーバ
前提条件
・GPSモジュールとの通信
GPSモジュールとの通信速度は115200bpsです。違う場合は該当箇所を変更してください。
また、UART通信をGROVEコネクタを流用して使っています。具体的には以下のように宣言しています。GROVEを他の目的で使う場合は該当箇所を変更してください。
Serial2.begin(115200,SERIAL_8N1,26,32);
・influxDBの前準備
udpを有効にして、データベースを作成しておいてください。
あと、どうにかしてinfluxDBに繋がるIPアドレスも必要です。
参考資料
https://www.influxdata.com/blog/how-to-send-sensor-data-to-influxdb-from-an-arduino-uno/
使ったライブラリ
・ESP32とM5Stackのライブラリ
・Tiny GPS++ http://arduiniana.org/libraries/tinygpsplus/
ソース ATOM
ソース
#include <TinyGPS++.h>
#include <WiFi.h>
#include <WiFiUDP.h>
#include "WiFiMulti.h"
WiFiMulti wifimulti;
#include "M5StickC.h"
const char* ssid1 = "wifi-1";
const char* password1 = "pass1";
const char* ssid2 = "wifi-2";
const char* password2 = "pass2";
// the IP address of your InfluxDB host
byte udphost[] = {192, 168, 1, 1};
int port = 8089;
WiFiUDP udp;
// The TinyGPS++ object
TinyGPSPlus gps;
void setup()
{
Serial2.begin(115200,SERIAL_8N1,26,32);
Serial.begin(115200);
delay(10);
wifimulti.addAP(ssid1,password1);
wifimulti.addAP(ssid2,password2);
if(wifimulti.run() == WL_CONNECTED){
delay(1000);
Serial.print(".");
}
Serial.println(WiFi.SSID());
}
void loop()
{
uint8_t chipid[6];
esp_efuse_read_mac(chipid);
while (Serial2.available() > 0) {
char c = Serial2.read();
gps.encode(c);
if (gps.location.isUpdated()) {
String latnum=String(gps.location.lat(),9);
String lngnum=String(gps.location.lng(),9);
String high=String(gps.altitude.meters());
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="gps,device="+id+" lat="+latnum+",lng="+lngnum+",high="+high;
Serial.println(line);
Serial.println("Sending UDP packet...");
udp.beginPacket(udphost, port);
udp.print(line);
udp.endPacket();
delay(10000);
}
}
}
ソース M5Stack+M5Stack用GPSモジュール V2
ソース
#include <TinyGPS++.h>
#include <WiFi.h>
#include <WiFiUDP.h>
#include "WiFiMulti.h"
WiFiMulti wifimulti;
#include "M5Stack.h"
//#include "M5StickC.h"
//#include "M5Atom.h"
#include <Wire.h>
const char* ssid1 = "WiFi1";
const char* password1 = "pass1";
const char* ssid2 = "WiFi2";
const char* password2 = "pass2";
// the IP address of your InfluxDB host
byte udphost[] = {192, 168, 1, 60};
int port = 8089;
WiFiUDP udp;
// The TinyGPS++ object
TinyGPSPlus gps;
void setup()
{
M5.begin();
M5.lcd.setBrightness(20);
M5.Lcd.fillScreen(BLUE); // 背景を青にする
M5.Lcd.setTextSize(2);
Serial2.begin(9600);
Serial.begin(115200);
delay(10);
wifimulti.addAP(ssid1,password1);
wifimulti.addAP(ssid2,password2);
if(wifimulti.run() == WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println(WiFi.SSID());
}
void loop()
{
uint8_t chipid[6];
esp_efuse_read_mac(chipid);
while (Serial2.available() > 0) {
char c = Serial2.read();
gps.encode(c);
if (gps.location.isUpdated()) {
String latnum=String(gps.location.lat(),9);
String lngnum=String(gps.location.lng(),9);
String high=String(gps.altitude.meters());
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="gps,device="+id+" lat="+latnum+",lng="+lngnum+",high="+high;
Serial.println(line);
M5.Lcd.setCursor(0, 0, 1);
M5.Lcd.println(line);
udp.beginPacket(udphost, port);
udp.print(line);
udp.endPacket();
delay(1000);
}
}
}
Author And Source
この問題について(InfluxDBにGPSログを記録する), 我々は、より多くの情報をここで見つけました https://qiita.com/yasunori_oi/items/161b99a868effb206e2d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .