2

アップグレードされたファームウェアで NodeMCU (ESP8266-E を使用) を使用しています。基本的なコマンドはすべて問題なく動作しますが、1 つ問題があります。

私は、UDP サーバーのような動作を持つ独立したアクセス ポイントを作成したいと考えていました。つまり、他のアクセス ポイントに直接接続する必要はありません。ソフト AP のような単純な UDP サーバー。

私は次の手順に従いました:

  1. 新しいファームウェアを NodeMCU にアップロードしました。
  2. NodeMCU での作業を改善するために ESPlorer をダウンロードしました。
  3. 以下にソースコードをアップロードしました。
  4. デスクトップの NodeMCU アクセス ポイントに接続しました。
  5. Java UDP クライアント プログラムを使用して、いくつかの文字列を NodeMCU に送信しました。
  6. ESPlorer のメッセージを確認しました。
  7. NodeMCU はそのような文字列を受信して​​いません。

--

print("ESP8266 Server")
wifi.setmode(wifi.STATIONAP);
wifi.ap.config({ssid="test",pwd="12345678"});
print("Server IP Address:",wifi.ap.getip())

-- 30s timeout for an inactive client
srv = net.createServer(net.UDP, 30)
-- server listens on 5000, if data received, print data to console
srv:listen(5000, function(sk)
  sk:on("receive", function(sck, data) 
    print("received: " .. data)
  end)
  sk:on("connection", function(s)
    print("connection established")
  end)
end)

Javaアプリでメッセージを送ろうとしたところ、ESPlorerに変化はありませんでした。Hercules プログラム (TCP、UDP 通信用の優れたプログラム) を使用してメッセージを送信しようとしたときでさえありません。

おそらく間違ったIPアドレスになると思います。ステーションの IP アドレスではなく、AP の IP アドレスを使用しています。

つまり、UDP サーバーへの接続にwifi.ap.getip()はこのアドレスではなく、このアドレスを使用しています。wifi.sta.getip()しかしsta.getip()、nil オブジェクトを返します。本当に私は知りません。

アドバイスをいただければ幸いです。

どうもありがとうございました。

4

2 に答える 2

3

わかりました、質問を更新したので、これを再開しましょう。最初のヒントを出す前に頭のスイッチを入れておくべきでした。申し訳ありません。

UDP はコネクションレスであるため、もちろんありませんs:on("connection")。結果として、ソケットではなくサーバー自体にコールバックを登録することはできません。ドキュメントに記載されていますが、見落としがちです。

これでうまくいくはずです:

wifi.setmode(wifi.STATIONAP)
wifi.ap.config({ ssid = "test", pwd = "12345678" })
print("Server IP Address:", wifi.ap.getip())

srv = net.createServer(net.UDP)
srv:listen(5000)
srv:on("receive", function(s, data)
    print("received: " .. data)
    s:send("echo: " .. data)
end)

これをブランチのファームウェアに対して実行しdev、コマンドラインから次のようにテストしました

$ echo "foo" | nc -w1 -u 192.168.4.1 5000
echo: foo

ESPlorer は、「received: foo」も正しく出力しました。

于 2016-04-21T12:42:55.600 に答える