当我使用Firebase CLI将数据发送到Arduino UNO以云计算Firestore数据库时,我得到404错误
我想使用Sim808 GPRS模块和Arduino UNO将数据发送到云Firestore数据库 我上传到Arduino的代码如下:当我使用Firebase CLI将数据发送到Arduino UNO以云计算Firestore数据库时,我得到404错误,firebase,arduino,google-cloud-firestore,google-cloud-functions,sim800,Firebase,Arduino,Google Cloud Firestore,Google Cloud Functions,Sim800,我想使用Sim808 GPRS模块和Arduino UNO将数据发送到云Firestore数据库 我上传到Arduino的代码如下: #include <DFRobot_sim808.h> #include <SoftwareSerial.h> #define PIN_TX 10 #define PIN_RX 11 SoftwareSerial mySerial(PIN_TX,PIN_RX); DFRobot_SIM808 sim80
#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
#define PIN_TX 10
#define PIN_RX 11
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,
char http_cmd[] = "GET /add?lat=45.23164&long=42.45737&date=29.01.2020 HTTP/1.0\r\n\r\n";
char buffer2[512];
void setup(){
mySerial.begin(9600);
Serial.begin(9600);
//******** Initialize sim808 module *************
while(!sim808.init()) {
delay(1000);
Serial.print("Sim808 init error\r\n");
}
delay(3000);
//*********** Attempt DHCP *******************
while(!sim808.join(F("cmnet"))) {
Serial.println("Sim808 join network error");
delay(2000);
}
//************ Successful DHCP ****************
Serial.print("IP Address is ");
Serial.println(sim808.getIPAddress());
//*********** Establish a TCP connection ************
if(!sim808.connect(TCP,"us-central1-myprojectname.cloudfunctions.net", 80)) {
Serial.println("Connect error");
}else{
Serial.println("Connect mbed.org success");
}
//*********** Send a GET request *****************
Serial.println("waiting to fetch...");
sim808.send(http_cmd, sizeof(http_cmd)-1);
while (true) {
int ret = sim808.recv(buffer2, sizeof(buffer2)-1);
if (ret <= 0){
Serial.println("fetch over...");
break;
}
buffer2[ret] = '\0';
Serial.print("Recv: ");
Serial.print(ret);
Serial.println(" bytes: ");
Serial.println(buffer2);
break;
}
//************* Close TCP or UDP connections **********
sim808.close();
//*** Disconnect wireless connection, Close Moving Scene *******
sim808.disconnect();
}
void loop(){
}
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const express = require('express');
const app = express();
admin.initializeApp();
var fs = admin.firestore();
app.get("/",(req,res)=>{
var lat = req.param("lat");
var long = req.param("long");
var date = req.param("date");
fs.collection("locations").add({
"date":date,
"lat":lat,
"long":long
}).then(()=>{
res.send("Location :"+lat+","+long);
return null;
}).catch((err)=>{
console.log(err);
res.send("Error");
});
});
exports.add = functions.https.onRequest(app);
然后使用“firebase deploy”命令获得一个链接。项目控制台链接如下所示:
“”
最后,我在串口屏幕上观看Arduino UNO。但我得到404(未找到)错误
注意:当我使用浏览器转到链接时,我可以向Firestore数据库添加新记录。
为什么会出现404(未找到)错误?你能帮助我吗?提前感谢。您的客户请求有点过于简单。您基本上使用这一行作为HTTP协议实现:
GET /add?lat=45.23164&long=42.45737&date=29.01.2020 HTTP/1.0
这对于大多数使用DNS别名在单个IP地址后面承载多个站点的托管服务不起作用。服务器实际上不知道您指的是哪个云功能项目
理想情况下,您应该找到并使用适当的HTTP客户端库,该库知道如何向现代HTTP服务发出请求。但是,如果您确实无法做到这一点,您至少应该在请求中发送一个主机头,以便云功能可以使用分配给您的项目的DNS主机识别您的项目:
GET /add?lat=45.23164&long=42.45737&date=29.01.2020 HTTP/1.0
Host: us-central1-myprojectname.cloudfunctions.net