arduino - ARDUINO:如何将 GPS 数据发送到 Firebase?
问题描述
我有一个 UBLOX Neo 6M 模块来获取设备的纬度和经度。我打算将这些数据发送到 Firebase。根据我的研究,它需要一个 Wifi 模块才能将数据传递给 Firebase。我打算使用可以提供互联网数据的 SIM 卡。
#include <FirebaseArduino.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#define FIREBASE_HOST "FIREBASE URL"
#define FIREBASE_AUTH "DB SECRET"
//SIM
#define APN "internet"
void setup() {
Serial.begin(9600);
ss.begin(GPSBaud);
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
int n = 0;
void loop(){
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
}
}
}
delay(1000);
// set bool value
Firebase.setBool("truth", false);
// handle error
if (Firebase.failed()) {
Serial.print("setting /truth failed:");
Serial.println(Firebase.error());
return;
}
delay(1000);
// append a new value to /logs
String name = Firebase.push("location", gps);
// handle error
if (Firebase.failed()) {
Serial.print("pushing /location failed:");
Serial.println(Firebase.error());
return;
}
Serial.print("pushed: /location/");
Serial.println(name);
delay(1000);
}
--
我确信这个代码块不会引导我进入一个工作系统。但我想知道这个序列是否会引导我到某个地方。请放弃我所缺乏的想法,我应该搜索。谢谢你。
解决方案
我不确定 Firebase 的工作原理,但您需要做的是首先获取一个有效位置,然后将其传递给 Firebase,如下所示:
#include <FirebaseArduino.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#define FIREBASE_HOST "FIREBASE URL"
#define FIREBASE_AUTH "DB SECRET"
//SIM
#define APN "internet"
float lat, lng;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
void setup()
{
Serial.begin(9600);
ss.begin(GPSBaud);
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
unsigned long last_millis = millis();
}
void feed_gps()
{
unsigned long last_millis = millis();
if (ss.available() > 0)
{
//feed gps for 1 seconds
while (millis() - last_millis < 1000)
{
gps.encode(ss.read());
if (gps.location.isValid())
{
lat = gps.location.lat();
lng = gps.location.lng();
Serial.print("Latitude= ");
Serial.print(lat, 6);
Serial.print(" Longitude= ");
Serial.println(lng, 6);
}
else
{
Serial.print("GPS still unavailable, Chars processed: ");
Serial.println(gps.charsProcessed());
}
}
}
}
void loop()
{
feed_gps();
// set bool value
Firebase.setBool("truth", false);
// handle error
if (Firebase.failed())
{
Serial.print("setting /truth failed:");
Serial.println(Firebase.error());
return;
}
char location_str[25] = {0};
// store string of lat,lng
sprintf(location_str, "%f, %f", lat, lng);
String name = Firebase.push("location", location_str);
// handle error
if (Firebase.failed())
{
Serial.print("pushing /location failed:");
Serial.println(Firebase.error());
return;
}
Serial.print("pushed: /location/");
Serial.println(name);
}
推荐阅读
- html - 用于计算的无线电代码和数字输入以及您要求的文件的错误不存在
- reactjs - React 组件的 Selenium 测试失败
- c - 在 c 中输入键时摆脱 while 循环
- php - 执行后php soap重定向不起作用
- hybris - 在 hybris create-wizard 上禁用子类型
- visual-studio-code - 如何配置更漂亮(VS Code)以将对象文字中的冒号对齐以在单个列中居中
- r - ggarrange:使绘图(不包括标题、轴标题、轴标签)大小相同
- android - 在 ImageAnalysis 中关闭图像使 Mlkit 停止工作
- java - 如何访问另一个类中的私有方法?
- javascript - 如何重复淡入淡出和动画?