Ich habe versucht, JSON-Daten von arduino Mega mit ESP8266 als WLAN-Schild zu senden, und ich habe node.js als Socket-Server verwendet. Das Problem ist, dass ein Server keine Daten erhalten hat. hier mein CodeSende JSON von arduino und esp8266 an node.js Socket-Server
#include <ArduinoJson.h>
#include "SoftwareSerial.h"
String ssid ="ssid";
String password="pwd";
//SoftwareSerial esp(22,23);// RX, TX
String data;
String server = "server ip";
byte objlength;
String url = "";
String temp,hum,weight;
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
//String uri = "yourURI";
void reset() {
Serial2.println("AT+RST");
delay(1000);
if(Serial2.find("OK")) Serial.println("Module Reset");
}
void connectWifi() {
String cmd = "AT+CWJAP=\"" +ssid+"\",\"" + password + "\"";
Serial2.println(cmd);
delay(4000);
if(Serial2.find("OK")) {
Serial.println("Connected!");
Serial2.println("AT+CIPSTATUS");
delay(300);
while(Serial2.available()){Serial.print(Serial2.read());}
}
else {
connectWifi();
Serial.println("Cannot connect to wifi"); }
}
void setup() {
delay(5000);
// put your setup code here, to run once:
Serial2.begin(115200);
Serial.begin(115200);
reset();
connectWifi();
}
void loop() {
temp = 25.60;
hum = 65.3;
weight = 65.3;
root["weight"] = weight;
root["light"] = temp;
root["humid"] = hum;
objlength = root.measureLength();
senddata();
delay(10000);
}
void senddata()
{
int objlength = root.measureLength();
Serial2.println("AT+CIPSTART=\"TCP\",\"" + server + "\",1336");//start a TCP connection.
delay(500);
if(Serial2.find("OK")) {
Serial.println("TCP connection ready");
}
else
{
Serial.println("can't establish TCP connection");
}
String sendCmd = "AT+CIPSEND=";//determine the number of caracters to be sent.
Serial2.println(sendCmd);
delay(200);
Serial2.println(objlength);
delay(500);
if(Serial2.find(">"))
{
Serial.println("Sending..");
root.printTo(Serial2);
root.printTo(Serial);
//Serial.println(postRequest);
delay(2000);
if(Serial2.find("SEND OK"))
{
Serial.println("Packet sent");
delay(200);
while (Serial2.available()) {
String tmpResp = Serial2.readString();
Serial.println(tmpResp);
}
// close the connection
}
//delay(1000);
Serial2.print("+++");
delay(1200);
Serial2.println("AT+CIPCLOSE");
delay(50);
Serial.println("Closed");
}
}
Hier ist mein node.js
var net = require('net');
var server = net.createServer(function(socket){
socket.write('SEND OK');
//
socket.pipe(socket);
socket.on('data',function(data){
//if(typeof data != 'string'){
var jsontest = JSON.parse(data);
console.log('Received: ' + data);
console.log(jsontest.weight);
console.log(jsontest.light);
console.log(jsontest.humid);
//}
});
socket.on('listening',function(){
console.log(listen);
});
});
/*server.getConnections(function(err,count){
console.log(count);
});*/
server.listen(1336, '10.42.0.1');
Ich denke, dass Esp8266 eine Verbindung mit einem Server herstellen können, aber ich weiß nicht, warum die Daten nicht zeigen. Vielleicht geht es um esp8266 Reaktionszeit? screenshot Wie Sie aus diesem Screenshot sehen können, ich node.js Server und Arduino, aber Daten werden nicht auf der Serverseite angezeigt. Aus diesem Grund bin ich mir nicht sicher, wo die Probleme liegen, die das verursachen.
Ich sehe keine POST-Anfrage. Sendet das 'JsonObject' es? Was ist Ihre Arduino-Ausgabe? Wo versagt es? –
Ich habe die HTTP-Methode nicht zum Senden der Daten verwendet. Daten werden über TCP-Socket zwischen Arduino und Node.js Server gesendet, nachdem ich AT + CIPSEND-Befehl verwenden, aber Esp8266 reagiert nicht auf SENDEN OK. Plus node.js Server druckt die Daten nicht aus. Auch wenn arduino eine Verbindung zu einem Server herstellen kann, da in einem seriellen Monitor "TCP-Verbindung bereit" angezeigt wird, Daten jedoch nicht auf einem Server angezeigt werden. Daher bin ich mir nicht wirklich sicher, wo ich das reparieren soll. –
Oh, tut mir leid. Ich glaube, ich habe vergessen, meinen Funktionsnamen zu ändern. Ich habe die http-Methode zuerst verwendet, daher war mein Funktionsname httppost(). –