基于ESP8266的NODEMCU气象站OLED显示,附源码

基于ESP8266的NODEMCU气象站OLED显示,程序用LUA写成。话不多说上源码,有什么不懂的地方可以给我留言。或者关注我的公众号,会不定时推送一些东西。


OUTtemp=""
city=""
wea=""
lasttime =""
IO_BLINK = 4

TMR_WIFI = 4
TMR_BLINK = 5

gpio.mode(IO_BLINK, gpio.OUTPUT)
---------------------
-- blink
---------------------
blink = nil


print('Setting up WIFI...')
wifi.setmode(wifi.STATIONAP )
file.open("zhanghu.txt", "r")

mingzi=file.readline(1)
mingzi=string.sub(mingzi, 1, -2)

mima=file.readline(2)
mima=string.sub(mima, 1, -2)
file.close()
print(mingzi)
print(mima)
station_cfg={}
station_cfg.ssid=mingzi
station_cfg.pwd=mima
wifi.sta.config(station_cfg)

wifi.sta.autoconnect(1)

status=nil

-- http
---------------------
dofile('httpServer.lua')
httpServer:listen(80)

httpServer:use('/config', function(req, res)
    if req.query.ssid ~= nil and req.query.pwd ~= nil then
    station_cfg={}
station_cfg.ssid=req.query.ssid
station_cfg.pwd=req.query.pwd
wifi.sta.config(station_cfg)
file.open("zhanghu.txt", "w+")
file.writeline(req.query.ssid)
file.writeline(req.query.pwd)

file.close()
      --  wifi.sta.config(req.query.ssid, req.query.pwd)

        status = 'STA_CONNECTING'
        status_sleep=0
        tmr.alarm(TMR_WIFI, 1000, tmr.ALARM_AUTO, function()
            status_sleep=status_sleep+1

            if(status_sleep==10) then
                   res:type('application/json')
                res:send('{"status":"timeout"}')
                tmr.stop(TMR_WIFI)    
             end
            
            if status ~= 'STA_CONNECTING'  then
                res:type('application/json')
                res:send('{"status":"' .. status .. '"}')
                tmr.stop(TMR_WIFI)                
            end
            
        end)
    end
end)

-- Get json
httpServer:use('/scanap', function(req, res)

  wifi.sta.getap(function(table)
        local aptable = {}
        for ssid,v in pairs(table) do
            local authmode, rssi, bssid, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]+)")
            aptable[ssid] = {
                authmode = authmode,
                rssi = rssi,
                bssid = bssid,
                channel = channel
            }
        end
        res:type('application/json')
        res:send(sjson.encode(aptable))  
    end)
end)

---------get tianqiwendu
tmr.alarm(3, 15000, tmr.ALARM_AUTO,function() --每15秒获取天气信息conn=net.createConnection(net.TCP, 0) 
conn:connect(80,"api.thinkpage.cn")
conn:on("receive", function(conn, payload)
--print("weather get"..payload) 

--city=string.sub(payload,string.find(payload,"name")+7,string.find(payload,"country")-4)
wea=string.sub(payload,string.find(payload,"text")+7,string.find(payload,"code")-4)
OUTtemp=string.sub(payload,string.find(payload,"temperature")+14,string.find(payload,"last_update")-5)
lasttime=string.sub(payload,string.find(payload,"GMT")-9,string.find(payload,"GMT")-2)
--print("CITY:"..city.."\r\n")
print("WEATHER:"..wea)
print("TEMP:"..OUTtemp)
--print("TIME:"..lasttime.."\r\n")
hour=string.sub(lasttime,1,2)+8
minints=string.sub(lasttime,4,5)

nowtime=hour..":"..minints---..":"..seconds
print(nowtime)

end )
conn:on("connection", function(conn, payload)
conn:send("GET /v3/weather/now.json?key=lkvdhpaemyl8vgme&location=xian&language=en".." HTTP/1.1\r\n".."Host: ".."api.thinkpage.cn".. "\r\n".."Connection: close\r\n\r\n")

end
)

end)
-----------------get pm2.5
tmr.alarm(5, 30000, tmr.ALARM_AUTO,function() 
conn1=net.createConnection(net.TCP, 0) 
conn1:connect(80,"www.pm25.in")
conn1:on("receive", function(conn, payload1)
--print("pm25get"..payload1) 

 ii=string.find(payload1,"pm2")

if ii~=nil then
--print("pm weishu is:"..ii)
pm25=string.sub(payload1,ii+7,ii+9)
print("PM25:"..pm25.."\r\n")
end

end )
conn1:on("connection", function(conn, payload1)
conn1:send("GET /api/querys/aqi_details.json?city=xian&token=5j1znBVAsnSf5xQyNQyq&stations=no".." HTTP/1.1\r\n".."Host: ".."www.pm25.in".. "\r\n".."Connection: close\r\n\r\n")

end
)

end)

------------------------
tmr.alarm(2, 1000, tmr.ALARM_AUTO,
     
   function()
if wifi.sta.getip()~= nil then
dofile("script2.lua")
tmr.stop(2)
else
print("wait connect..")
end
end)

这是init文件的内容。其中用到两个LUA文件,一个是dofile('httpServer.lua')。一个是dofile("script2.lua"),第二个文件是OLED显示用的,用来驱动0.96的oled显示器采用SPI驱动,接线可以看我其他简书有相关内容,pin6驱动DHT11采集温湿度信息。显示数据。下面是oled驱动文件源代码:script2.lua

cs  = 8 
dc  = 2 -- D2
res = 0 -- D0
pin=6
--require"init"
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
gpio.mode(8, gpio.INPUT, gpio.PULLUP)
disp = u8g.ssd1306_128x64_hw_spi(cs, dc, res)
disp:setFont(u8g.font_6x10)


 
str = "AIRSTAION"

function task()    
   
    status,temp,humi,temp_dec,humi_dec=dht.read11(pin)
    if status == dht.OK then    
        print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
          math.floor(temp),
          temp_dec,
          math.floor(humi),
          humi_dec
        ))
        temp1=math.floor(temp)
        humi1=math.floor(humi)
        elseif status == dht.ERROR_CHECKSUM then
        print("DHT Checksum error.")
    elseif status ==dht.ERROR_TIMEOUT then
      --  print("DHT timed out.")
   
    end    
end

function draw()    
    task()
 
      if  wifi.sta.getip()~= nil then
      disp:drawStr(0, 60, "Net OK")
      else 
      disp:drawStr(0, 60, "NO Net")
      end
    disp:drawStr(0, 15, str)
     disp:drawStr(0, 30,"OutAir:")
  
   if wea~=nil and OUTtemp~=nil then
    disp:drawStr(43, 30,wea)
   disp:drawStr(96, 30,OUTtemp.." C")
   end
   if nowtime~=nil then
   disp:drawStr(80, 60,nowtime)
   end
   disp:drawStr(0,40,"InAir:")
    disp:drawStr(43, 40,temp1.." C")
    disp:drawStr(80, 40,humi1.." %")
     disp:drawStr(0, 50, "PM2.5:")
     if pm25~=nil then
      disp:drawStr(45, 50, pm25)
      end
end

tmr.alarm(6, 3000, tmr.ALARM_AUTO, function()
    
    disp:firstPage()
    while (disp:nextPage())
    do 
        draw()
    end
end)

有不懂可以问我,或者关注我的个人公众号“老沈物联”,一起交流
405D9B1E696546CA41CD8D40B0A7B5A3.png

后附RAR文件下载

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容