私はarduinoメガからJSONデータを無線LANシールドとしてESP8266を使用して送信しようとしていましたが、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接続準備完了」と表示されているため、サーバーにデータが表示されないため、サーバーに接続できます。だからどこを修正すべきかわからない。 –
ああ、すみません。私は自分の関数名を変更するのを忘れたと思う。最初にhttpメソッドを使用したので、関数名はhttppost()でした。 –