NodeMCU(ESP8226)在线查询天气 - 21IC中国电子网

湖北快3

NodeMCU ESP8226 查询天气

NodeMCU(ESP8226)在线查询天气

2018-10-15
80次浏览

一、硬件
NodeMCU开发板一块(20块钱),USB线1根


二、开发环境
ESPlorer,Lua脚本语言


三、获取天气的接口
免费的心知天气接口,链接:
得到的数据格式为JSON格式,中英文可选,如下图

{
"results":
[{
"location":{"id":"WWMT5Q64CR3G","name":"青岛","country":"CN","path":"青岛,青岛,山东,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},
"now":{"text":"多云","code":"4","temperature":"19"},
"last_update":"2018-10-15T15:35:00+08:00"
}]
}




四、源代码
刚开始接触Lua脚本,主要是调用各种函数,参考信息出处:
注意首先得把带sjon的固件刷入MCU,对着参考文档学习,官方参考文档如下:

https://nodemcu.readthedocs.io/en/master/en/modules/sjson/#sjsondecode

代码比较简单,
1、配置Wifi
2、创建链接获取天气数据;
3、使用sjson解析数据,串口打印
源代码回复可见
[hide]lighton=0
pin=4
gpio。mode(pin,gpio。OUTPUT)
print('Setting up WIFI...')
wifi.setmode(wifi.STATION)
station_cfg={}
station_cfg.ssid="21ic"
station_cfg。pwd="12345678"
station_cfg.save=true
wifi.sta.config(station_cfg)
tmr。alarm(0, 1000, tmr。ALARM_AUTO, function()
    if wifi.sta.getip() == nil then
        print('Waiting for IP 。。。')
    else
        print('IP is ' 。。 wifi。sta。getip())
    tmr.stop(0)
   end
end)

tmr.alarm(1, 5000, tmr.ALARM_AUTO, function()
    if wifi.sta.getip() ~= nil then
        srv=net.createConnection(net.TCP,0)
        if lighton==0 then
            lighton=1
            gpio。write(pin,gpio。HIGH)
        else
            lighton=0
            gpio.write(pin,gpio.LOW)
        end
        srv:on("receive", function(sck, c)
--        print(c)
        --value = sjson.decode(pl)
        i,j=string.find(c, "{")
        sjson_str=string.sub(c, i)
        --print(sjson_str)
        local sjson = require("sjson");
        local json = sjson.decode(sjson_str);
        print("City: " 。。json。results[1]["location"]["name"])
        print("Weather: " ..json.results[1]["now"]["text"])
        print("Code: " 。。json。results[1]["now"]["code"])
        print("Temperature: " 。。json。results[1]["now"]["temperature"] 。。" C \n")   
        end)
        
        srv:on("connection", function(sck, c)
        sck:send("GET /v3/weather/now.json?key=cinm0okk7gzgtujn&location=qingdao&language=en&unit=c HTTP/1.1\r\nHost: api.seniverse.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
        end)
        srv:connect(80,"api.seniverse.com")
   end
end)
[/hide]

四、效果


目前是串口打印天气,之后准备使用OLED显示屏显示,效果会更好。


等我学会了Lua脚本下驱动显示屏,有前辈知道的也可以指导下,免得走弯路






我要点评

福建快3 内蒙古快3 江西快3 福建快3 江西快3 河南快3 河北快3 贵州快3 甘肃快3 广西快3