firebase - 使用 ESP32+Sim800L 向 Firebase 发送传感器数据
问题描述
我有一块 TTGO T-CALL ESP32+Sim800L 板,我想将加速度计数据发送到 Firebase。我正在使用支持 Sim800L 的 SSL/https 连接的 TinyGSM 库。我目前正在发送虚拟数据以查看它是否有效,但它给了我一个失败的标志。为什么它不向 Firebase 发送数据?
#define FIREBASE_HOST "https://XXXXXXXXXXXXXXXXXfirebaseio.com/"
#define FIREBASE_AUTH "XXXXXXXXXXXXXXXXXXXXhevKwQ3LALblGclqCk"
FirebaseData firebaseData;
void setup()
{
// Set console baud rate
Serial.begin(115200);
// Set-up modem reset, enable, power pins
pinMode(MODEM_PWKEY, OUTPUT);
pinMode(MODEM_RST, OUTPUT);
pinMode(MODEM_POWER_ON, OUTPUT);
digitalWrite(MODEM_PWKEY, LOW);
digitalWrite(MODEM_RST, HIGH);
digitalWrite(MODEM_POWER_ON, HIGH);
// Set GSM module baud rate and UART pins
SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
delay(3000);
SerialMon.println("Initializing modem...");
modem.init();
SerialMon.print("Connecting to APN: ");
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println(" fail");
}else {
SerialMon.println(" OK");
Firebase.begin(FIREBASE_HOST,FIREBASE_AUTH);
SerialMon.println(" Connection to Firebase Successful");
}
}
void loop()
{
String data = "5";
bool res = Firebase.pushString(firebaseData,"/ax", data);
Serial.println("Data sent");
Serial.println(res);
Serial.println(firebaseData.errorReason());
delay(1000);
}
解决方案
我没有在网上找到很多资源,但是,我确实做到了这一点,并且我为任何需要帮助的人创建了一个GitHub 存储库。
基本上,由于 Firebase 仅接受 Https 请求,因此无法在大多数微控制器和 GSM 模块上制定该请求。为了规避这个问题,我创建了一个 php 服务器,我可以向它发送 HTTP POST 请求,脚本可以从中获取数据并使用 php firebase 库将其推送到 Firebase。
推荐阅读
- c - 使用 (*ptr)[5] 代替 *ptr 的目的是什么?
- java - 使用 Thread.sleep 与 CountDownLatch 保持主线程运行
- php - 重新加载后 Ajax 结果消失了
- html - 如何修复指向子页面标签的超链接?引导程序 4
- android - GCM 是否会在弃用 GCM 后为使用 GCM 的旧客户端提供新令牌
- vb.net - 如何调整与包含它们的窗口相关的控件的大小?
- javascript - 在组件主体外部声明一个函数有什么区别吗?
- php - 如何在 Symfony4 的 FOUserbundle 中向另一个用户显示用户配置文件?
- react-native - 使用 react-native-firebase 和 react-navigation 时出现错误“未定义不是对象(评估 'RNGestureHandlerModule.State')”
- c++ - 基本 std::regex,将查询转换为有效掩码