ESP8266をアクセスポイントにし
PC間でデータの送受信したいと思っています。
(最終的にはセンサーで読み取ったデータを、リアルタイムでPCのフォルダにテキストとして保存したいです)
ネットで調べた所、こちらのサイト様に掲示されているソース
(ESP8266とnode.js間でUDPデータ送受信)を
http://4009.jp/post/2016-04-25-esp-wroom-02/
そのまま使用させて頂き、試してみました。
###発生している問題・エラーメッセージ
ESP8266側ではデータを受信し、シリアルに表示されましたが
逆にESP8266側から送信しようとしても、node.js側では受信できませんでした。
###該当のソースコード
//ESP8266
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
//Access Point Setting
const char *APSSID = "esp";
const char *APPASS = "12345678";
unsigned int localPort = 8888;
WiFiUDP UDP;
char packetBuffer[255];
static const char *udpReturnAddr = "192.168.4.2";
static const int udpReturnPort = 8889;
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.softAP(APSSID, APPASS);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
UDP.begin(localPort);
}
void loop() {
int packetSize = UDP.parsePacket();
if (packetSize) {
int len = UDP.read(packetBuffer, packetSize); //終端文字設定 if (len > 0) packetBuffer[len] = '\0'; Serial.print(UDP.remoteIP()); Serial.print(" / "); Serial.println(packetBuffer); UDP.beginPacket(udpReturnAddr, udpReturnPort); UDP.write("ok"); UDP.endPacket();
}
}
//--------------------------------------------------
//Node.js
/*
Send Message To ESP-WROOM-02
*/
var ESP_HOST = '192.168.4.1';
var ESP_PORT = 8888;
var dgram = require('dgram');
var sender = dgram.createSocket('udp4');
var message = new Buffer('test message');
sender.send(message, 0, message.length, ESP_PORT, ESP_HOST, function(err, bytes) {
if (err) throw err;
sender.close();
});
/*
Receive Message From ESP-WROOM-02
*/
var NODE_HOST = '192.168.4.2';
var NODE_PORT = 8889;
var receiver = dgram.createSocket('udp4');
receiver.on('message', function (message, remote) {
console.log('From ESP_Module Message : ' + message);
});
receiver.bind(NODE_PORT, NODE_HOST);
###試したこと
試しに、ESP8266側で受信時のポート番号をシリアルに表示してみた所
node.js側でbindしたポート番号と異なる値が表示されました。
//ESP8266
Serial.print(UDP.remoteIP()); Serial.print(" / "); Serial.println(packetBuffer); UDP.beginPacket(udpReturnAddr, udpReturnPort);
↓↓↓↓↓↓↓に変更
Serial.print(UDP.remoteIP());
Serial.print(" / ");
Serial.print(UDP.remotePort());
Serial.print(" / ");
Serial.println(packetBuffer);
UDP.beginPacket(UDP.remoteIP(), UDP.remotePort());
//シリアルモニタ
192.168.4.2 / 49467 / test message
192.168.4.2 / 52538 / test message
192.168.4.2 / 52105 / test message
192.168.4.2 / 63614 / test message
また、Node.js側でbindした値を変えてしましたが
var NODE_HOST = '127.0.0.1';
var NODE_PORT = 50000;
シリアルモニタでは、
192.168.4.2 / 49467 / test message
192.168.4.2 / 52538 / test message
のように表示されてしまいます。
自分なりに調べてみましたが、知識不足もありわかりません。
お知恵をお貸し頂きたくしました。
よろしくお願いいたします。
あなたの回答
tips
プレビュー