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

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

ただいまの
回答率

90.84%

  • Node.js

    1680questions

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

  • teratail

    399questions

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

  • マイコン

    65questions

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

  • UDP

    53questions

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

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

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 400

makomako7

score 2

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • sakura_hana

    2017/12/16 11:58

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

    キャンセル

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

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Node.js

    1680questions

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

  • teratail

    399questions

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

  • マイコン

    65questions

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

  • UDP

    53questions

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