3

MQTT ブローカーに接続し、5 秒ごとにデータを送信する 2 つの nodeMCU モジュールがあります。

私が達成しようとしているトポロジは、[router]<==[nodeMCU#1]<==[nodeMCU#2] のようなものです。

[nodeMCU#1] は wifi エクステンダーのようですが、仕事では複数の nodeMCU を使用して IoT アプリケーション用のメッシュのような方法で使用することを計画しています。

両方で、 nodeMCU-flasher を使用してhttps://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704からダウンロードした最新の (float) リリースをフラッシュしました。

このプロジェクトでは、2 つの lua スクリプトを作成し、ESPlorer を使用してそれらをモジュールにアップロードしました。

最初のモジュールでは、STATIONAP モードで職場の wifi に接続し、10 文字の基本パスワード「1234567890」を使用して、SSID nodeMCUwifi で独自のネットワークを作成します。接続後、スクリプトはランダムな値を MQTT トピックに送信します。

2 番目のモジュールは nodeMCUwifi に正しく接続され、IP アドレスが割り当てられますが、MQTT ブローカーに接続できません。

スマートフォンを使用して nodeMCUwifi に接続しようとすると (接続をテストするためだけに、インターネットの負荷が高い場合にこのシステムを使用するつもりはなく、MQTT メッセージのみ)、パスワードを入力したにもかかわらず、「認証エラーが発生しました」というメッセージが表示されます。または(まれに)接続してもすぐに切断されます。

この問題を解決するためのアイデアをいただければ幸いです。ありがとうございました。

編集: AP 構成で auth パラメータ セットを 3 に追加しました。コードの一部を以下に貼り付けています。

cfg.ssid="ESP8266_"..node.chipid(); 
cfg.pwd="1234567890"
cfg.auth=3
wifi.ap.config(cfg);

これで、ラップトップとスマートフォンがモジュールによって作成された Wi-Fi に接続されますが、インターネットにはまだ接続されていません。モジュールに ping を実行できますが、8.8.8.8 や MQTT ブローカー IP などに ping を実行できません。

4

1 に答える 1

4

私が理解しているように、[nodeMCU#1]という名前のwifiネットワークを作成しますnodeMCUwifi。次に、他の人が に接続しようとしていnodeMCUwifiます。あなたが述べたように:

これで、ラップトップとスマートフォンがモジュールによって作成された Wi-Fi に接続されますが、インターネットにはまだ接続されていません。モジュールに ping を実行できますが、8.8.8.8 や MQTT ブローカー IP などに ping を実行できません。

ラップトップとスマートフォンがnodeMCUwifiネットワークに接続されていることを前提としています。ここで[nodeMCU#1]、レイヤー 2 スイッチまたはルーターのような機能が必要になります (SOFTAP が独自の IP ネットワークを作成するため)。

このすべての情報が手元にあるので、達成しようとしている目的は esp では不可能であると言えます。esp には、スイッチなどのように機能するのに十分なリソースがないためです。また、(現在)それを達成するためにespに実装されているソフトウェアはありません。

でも; システムに特定のタイプのトラフィック ( MQTT など) を特定のプロトコル ( UDP など)で転送させたい場合は、メッシュ構造のようにメッセージを中継することができますが、これは一方向にしか機能しません。この構成では、ノードはリピータのように動作しますが、OSI の上位層で動作します。このアイデアについては、サンプル コードを提供することはできませんが、以下に疑似コードを提供します。

構成

>各ノードは、チェーン構造を構築するように構成する必要があります。つまり、各 SOFTAP ノードには異なる SSID または TCP 設定が必要です。例えば:

router(192.168.0.0)<----[NODE#1(SOFTAP0)]<----[NODE#2(SOFTAP1)]<---...
...
...
...<----[NODE#n(STATION)]

>各ノードには、セットアップに従ってTARGET IP アドレスが必要です。これは、すべてのノードが MQTT メッセージをそのアドレスに送信することを意味します。

>ノードが SOFTAP として構成されている場合、これはこのシステムが TARGET であり、特定のポートをリッスンする必要があることを意味します。

> SOFTAP ノードがリッスンしているポートで何らかのデータを受信した場合、そのデータをすぐに (またはバッファリングして) そのTARGETノードに送信する必要があります。

>この連鎖操作の結果、メッセージは、ソースが何であれ、連鎖の終わりに到達します。

コード: ソフトタップ

...soft ap config...
listento.port: udp.965
on("receive"):
    create.conn:TARGET
    send(DATA_RECEIVED)
    close.conn:TARGET

コード : ステーション

...station config...
...Do some logic...
data=gather.data()
create.conn:TARGET
send(data)
close.conn:TARGET
于 2015-12-12T11:52:22.447 に答える