저는 arduino 메가에서 ESP8266을 wifi 방패로 사용하여 JSON 데이터를 보내려고했지만 node.js를 소켓 서버로 사용했습니다. 문제는 서버가 데이터를받지 못하는 것입니다. 여기에 내 코드Arduino 및 esp8266에서 node.js 소켓 서버로 json 보내기
#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");
}
}
입니다 여기 내 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');
내가 esp8266가 서버와의 연결을 설정할 수 있다고 생각하지만 데이터가 표시되지 않습니다 이유를 모르겠어요. 어쩌면 esp8266 응답 시간일까요? screenshot 이 스크린 샷에서 알 수 있듯이 node.js 서버와 arduino를 실행했지만 데이터가 서버 측에 표시되지 않습니다. 이 때문에, 나는 이것이 어디에서 발생하는 문제인지 확실하지 않습니다.
POST 요청이 표시되지 않습니다. 'JsonObject'가 전송합니까? Arduino 출력은 무엇입니까? 실패한 곳은 어디입니까? –
나는 데이터를 보내기 위해 http 방법을 사용하지 않았다. 데이터는 AT + CIPSEND 명령을 사용하면 arduino와 Node.js 서버 사이의 TCP 소켓을 통해 전송되지만 Esp8266은 SEND OK로 응답하지 않습니다. Plus node.js 서버는 데이터를 인쇄하지 않습니다. arduino는 직렬 모니터에 "TCP 연결 준비"를 표시하지만 서버에 데이터가 표시되지 않기 때문에 서버에 연결할 수 있습니다. 따라서 나는 정말로 어디에서 고칠 지 확신하지 못한다. –
오, 미안 해요. 내 함수 이름을 바꾸는 걸 깜박 했어. 내 함수 이름이 httppost()이기 때문에 처음에는 http 메소드를 사용했다. –