質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

0回答

723閲覧

ESP8266をアクセスポイントにし、PC間とデータの送受信を行いたいです。

makomako7

総合スコア6

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

1クリップ

投稿2017/12/15 06:56

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

のように表示されてしまいます。

自分なりに調べてみましたが、知識不足もありわかりません。
お知恵をお貸し頂きたくしました。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2017/12/16 02:58

teratailとは無関係な質問かと思いますので、該当タグは外して頂けますでしょうか? また、ソースコードは「```」で囲んで頂けると見やすいです。(詳しくはヘルプをご覧ください)
matobaa

2019/10/11 05:25

> ESP8266側で受信時のポート番号 残念ながら、これは確認観点としては的外れです(Windowsの場合、UDP送信元のポート番号は49152以上のランダムになるのが一般的であって、この結果はおかしくないです)。なにかほかの原因があるはず。 たとえば Windows Defender ファイヤウォールなどで node.js の 8889 を開けられていない、とかの可能性が考えられます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問