2016-05-23 41 views
-1

如何接收和顯示從本地服務器發送的JSON數據?我的意思是Lua中的腳本在ESP8266版本01上發射。最終,我想通過I2C在附加的LCD 2x16到ESP8266上顯示數據。ESP8266-01 NodeMCU在Lua中讀取JSON

我想將ESP-01連接到一個webapi服務器,該服務器使用JSON動態地發送包含不同信息的數據。我希望將這些信息顯示在連接到ESP的LCD上。我不知道如何解碼JSON數據。服務器地址是192.168.1.8:8057/api

好的。我試試這個:

sk=net.createConnection(net.TCP, 0) 
sk:on("receive", function(sck, c) 
d = c 
end) 
sk:connect(8095,"192.168.1.8") 
sk:send("GET /api/ HTTP/1.1\r\nHost: 192.168.1.8\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") 

print(d) 

,並顯示結果:

{"lowVersion":1,"highVersion":3} 

如果我嘗試:

sk=net.createConnection(net.TCP, 0) 
sk:on("receive", function(sck, c) 
d = c 
end) 
sk:connect(8095,"192.168.1.8") 
sk:send("GET /api/ HTTP/1.1\r\nHost: 192.168.1.8\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") 

local t = cjson.decode(d) -- this is line 10 
print(t.lowVersion) 

是顯示:

​​

如何顯示值「 lowVersion「或」highVersion「來自JSON?

+2

StackOverflow是關於向特定問題提出具體問題。你的方式是廣泛的。做一些研究並在遇到困難時詢問具體問題。你使用哪個模塊?沒有像ESP8266-01那樣的東西。有ESP-01(僅2個引腳)或NodeMCU開發工具包v1.0 - [還有更多](http://frightanic.com/iot/comparison-of-esp8266-nodemcu-development-boards/)。 –

+0

看看這裏:http://lua-users.org/wiki/JsonModules –

+0

請再看看我的帖子。請幫忙。 – Rafik73

回答

0

因此,這整個問題歸結爲爲什麼你的cjson.decode()失敗?這是因爲你的服務器似乎沒有返回有效的JSON。

以下兩個示例都適用於dev分支的最新NodeMCU固件。

local t = cjson.decode('{"lowVersion":1,"highVersion":3}') 
print(t.lowVersion) 

http.get("http://httpbin.org/get", nil, function(code, data) 
    if (code < 0) then 
     print("HTTP request failed") 
    else 
     local t = cjson.decode(data) 
     for k,v in pairs(t) do print(k,v) end 
    end 
    end) 

息率

1 

args table: 3fff0618 
url http://httpbin.org/get 
origin xxx.71.91.xxx 
headers table: 3fff0a88 

所以,你的服務器似乎並不一致地返回{"lowVersion":1,"highVersion":3}或者它可能會返回某些看不見但無效字符。