嗨,我一直在尝试使用 stm 和 esp-01 并与 firebase 和后端服务器进行通信。我的后端服务器js是这样的:
const express = require('express');
const app = express();
const firebaseAdmin = require('firebase-admin');
const serviceAccount = require('.myFirebaseAdminSDK.json');
firebaseAdmin.initializeApp({
credential: firebaseAdmin.credential.cert(serviceAccount),
databaseURL: 'myFirebaseURL'
});
app.use(express.json());
app.post('/sendData', (req, res) => {
const { temperature } = req.body;
const db = firebaseAdmin.database();
db.ref('bme280').push({ temperature })
.then(() => {
res.send('Data sent successfully');
})
.catch(error => {
console.error('Error sending data:', error);
res.status(500).send('Error sending data');
});
});
const PORT = process.env.PORT || 6355;
app.listen(PORT, () => {
console.log(`Server started on port ${PORT}`);
});
我发送AT命令
AT+CIPSTART="TCP","192.168.1.38",6355
AT+CIPSEND=113
POST /sendData
Host: 192.168.1.38
Content-Type: application/json
Content-Length: 20
{"temperature":"25"}
但是我从 ESP-01 收到了这个
AT+CIPSTART="TCP","192.168.1.38",6355
CONNECT
OK
AT+CIPSEND=113
OK
>
Recv 113 bytes
SEND OK
+IPD,47:HTTP/1.1 400 Bad Request
Connection: close
CLOSED
我通过 windowsshell 检查我的服务器是否正常工作 这也适用于我的 firebase 实时数据库 所以我无法弄清楚。 我发现这个使用AT命令将Json数据发送到服务器 但我已经这样发送了。 为什么我使用后端服务器?因为 Firebase 切换到 TLS 1.2 并且 AT 固件不支持它。 如果您有更好的解决方案,请告诉我。
AT+CIPSTART="TCP","192.168.1.38",6355
192.168.1.38
是您的本地域,它不是 Firebase 域。443
而不是 6355
,协议也需要是“SSL”而不是“TCP”。AT+CIPSTART="SSL","url",443
阅读ESP8266 SSL 用户指南了解更多详细信息。