2016-05-23 111 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}或者它可能会返回某些看不见但无效字符。