2017-07-28 79 views
1


我有一個項目要使用兩個NodeMCUs和LUA。一個NodeMCU(服務器)託管一個簡單的Web服務器,對特定的URL參數做出反應。例如,我在我的瀏覽器中訪問:http://192.168.1.179/?pin=ON1,它的LED亮起等。我想通過按下按鈕來重新創建與其他NodeMCU(客戶端)的操作。唯一支持我的部分是這個HTTP GET請求。NodeMCU,一個簡單的GET請求是相當的挑戰

首先,我想簡單地使用HTTP模塊..但模塊中不存在可用的最新固件版本。我不知道這是爲什麼?我不打算建立最新的 - 最新的。 2版本差異那裏...我提交了一個自定義構建。

要求( 'HTTP')
stdin中:1:模塊的 'http' 未找到:
沒有場package.preload [ 'HTTP']
沒有文件 'http.lc'
沒有文件 'http.lua'

顯然還有其他的,年紀大了,意味着這樣的:

conn=net.createConnection(net.TCP, false) 
    conn:on("receive", function(conn, pl) print(pl) end) 
    conn:connect(80,"192.168.1.179") 
    conn:send("GET /?pin=ON1 HTTP/1.1\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") 

我一直在試圖讓它工作。 DNS以完整路徑失敗。因爲它只是爲打印部分輸出0。請注意,這是本地服務器,它的地址是直接指定的。我從路由器獲得DHCP,並嘗試了一個靜態IP。我很茫然,不知道還有什麼要做。這是完成這個項目的最後一步,因此它讓我瘋狂!任何幫助,將不勝感激。我應該注意到我丟失了服務器的腳本,所以我不能引用它。它雖然工作。 X_X」

回答

1

https://github.com/nodemcu/nodemcu-firmware#releases您不能下載最新的二進制文件了(一直想,對於> 2Y)。最簡單的方法是去https://nodemcu-build.com/併爲您製作一個二進制文件。確保你選擇了HTTP模塊。

但是,請注意,HTTP模塊是一個HTTP客戶端

至於製作簡單的GET請求與該HTTP模塊,我建議看看https://nodemcu.readthedocs.io/en/latest/en/modules/http/#httpget

http.get("http://httpbin.org/get?paul=muller", nil, function(code, data) 
    if (code < 0) then 
     print("HTTP request failed") 
    else 
     print(code, data) 
    end 
    end) 

這就產生了這樣的事情:

200 { 
    "args": { 
    "paul": "muller" 
    }, 
    "headers": { 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "ESP8266" 
    }, 
    "origin": "xxx.xxx.xxx.xxx", 
    "url": "http://httpbin.org/get?paul=muller" 
} 

要建立你所需要的網絡服務器模塊和net.createServer(net.TCP)。我們在https://nodemcu.readthedocs.io/en/latest/en/modules/net/#example_6有一些例子。

我勸不過來不建立自己的服務器,但使用https://github.com/marcoskirsch/nodemcu-httpserver/而是超越平凡的項目什麼。

+0

其中很多方面都在原文中提到。只是背後的故事。我只需要使用URL PARAMETERS進行GET請求。我已經收到我與http的構建。現在我得到:HTTP客戶端:httpbin.org代碼的DNS失敗:-1 data:無HTTP請求失敗。我無法ping客戶端NodeMCU,就像服務器NodeMCU一樣。 –

+0

感謝您更新您的答案。我很早就嘗試過這種簡單的方法,因爲它很簡單。僅僅爲了提問信息,我得到了一個與請求的LUA選項-1錯誤。該請求會失敗,我對當時的錯誤一無所知。在Arduino中,我也得到-1錯誤,但是請求成功。也許這是一個糟糕的服務器實現,或者服務器在超時之前沒有響應http狀態碼。 –

0

該系統使用Arduino的ESP8266WiFi & ESP8266HTTPClient圖書館工作的罰款。我將要解決這個問題,因爲我拒絕再處理LUA http選項。