2015-12-07 25 views
2

我有2個nodeMCU模塊,我想要連接到MQTT代理並每隔5秒發送一些數據。使用節點MCU的Wifi網狀網絡

我想實現的拓撲結構是某事像[路由器] < == [nodeMCU#1] < == [nodeMCU#2]

它看起來像[nodeMCU#1]是WiFi擴展,但在工作中,我們正在計劃使用多個節點MCU來以類似網狀的方式用於物聯網應用程序。

他們兩個我閃,我使用nodeMCU-閃光從這裏https://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704下載最新的(浮動)的釋放。

對於這個項目寫了2個lua腳本,我已經將它們上傳到使用ESPlorer的模塊中。

它在STATIONAP模式連接到我的工作的WiFi,並創建自己的SSID爲nodeMCUwifi網絡,10個字符「1234567890」一個基本的密碼第一個模塊。連接腳本後,將隨機值發送到MQTT主題。

對於第二模塊連接到nodeMCUwifi正確,它被分配一個IP地址,但它不能連接到MQTT代理。

當我嘗試使用我的智能手機連接到nodeMCUwifi(只是爲了測試連接,我無意使用此係統用於沉重的互聯網負載,只有MQTT消息),我收到消息「身份驗證錯誤發生」,即使我已經正確鍵入密碼,或者(在極少數情況下)它會連接但立即斷開連接。

我希望有任何想法來解決這個問題。謝謝。

編輯:在AP配置我增加了AUTH參數設置爲3,我貼的下面我的代碼的一部分。

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

現在我的筆記本電腦和我的智能手機連接到模塊創建的wifi,但仍然沒有連接到互聯網。我可以ping通模塊,但無法ping通8.8.8.8或MQTT代理IP或其他任何東西。

+0

你應該嘗試的第一件事是不使用任何過時的二進制發佈但建立固件自己。請參閱https://github.com/nodemcu/nodemcu-firmware/issues/788和https://github.com/nodemcu/nodemcu-firmware/issues/719。 –

+0

增加SOFTAP的信標間隔,例如3000毫秒 –

+0

@MertGülsoy我仍然面臨同樣的問題 – evgi9

回答

3

據我瞭解,[nodeMCU#1]創建一個名爲nodeMCUwifi WiFi網絡。然後其他人正試圖連接到nodeMCUwifi。正如你說:

現在我的筆記本電腦和智能手機連接到由模塊創建的無線網絡,但仍然沒有連接到互聯網。我可以ping通模塊,但無法ping通8.8.8.8或MQTT代理IP或其他任何東西。

我假設您的筆記本電腦和智能手機連接到nodeMCUwifi網絡。現在你想要這個[nodeMCU#1]就像第2層交換機或類似路由器一樣(因爲SOFTAP創建了自己的IP網絡)。

由於手頭所有這些信息,我可以說,你想達到目的是不可能的ESP。由於esp沒有足夠的資源來執行交換或類似操作。另外(目前)沒有軟件在esp中實現。

但是;如果只希望系統通過某個協議(,如UDP)傳輸某些類型的流量(,例如MQTT),則可能會有類似於網狀結構的消息,但這樣可以單向運行只要。在這種配置中,節點將更像中繼器,但在OSI的上層。對於這種想法我不能提供樣品的代碼,但我將在下面提供的僞代碼:

配置

>每個節點必須被配置爲建立一個鏈結構。這意味着每個SOFTAP節點應該有不同的SSID或TCP設置。例如:

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

>每個節點必須根據設置有TARGET IP地址。這意味着每個節點都會將MQTT消息發送到該地址。

>如果一個節點被配置爲SOFTAP,這意味着這個系統是一個TARGET,並且必須監聽特定的端口。

>如果軟AP節點接收正在收聽時,應立即發送數據的端口(或緩衝)上的某些數據到其TARGET節點。

>作爲鏈接操作的結果,無論消息源是什麼,消息都會到達鏈的末尾。

CODE:軟AP

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

CODE:STATION

...station config... 
...Do some logic... 
data=gather.data() 
create.conn:TARGET 
send(data) 
close.conn:TARGET