日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nodeMCU自动化控制实现空气质量管家

發(fā)布時(shí)間:2025/3/20 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nodeMCU自动化控制实现空气质量管家 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

前陣子樹莓派由于沒外殼不小心短路燒掉了。最近得手nodeMCU的板子,不僅便宜還支持串口交互式調(diào)試,很是方便。尋思著實(shí)現(xiàn)個(gè)自動化控制玩玩。自從“穹頂之下”的信息被普及,不僅要出門帶口罩,還要家里開空氣凈化器。于是照著知乎也DIY了一個(gè)。但作為一個(gè)程序員,不搗鼓一點(diǎn)硬件軟件怎么可以,于是花了兩三天搗鼓了lua,順便配了個(gè)web端的語音播報(bào),軟硬件組合達(dá)到了期望的效果。(順便吐槽一下tinyOS的組件式編程,文檔也少得可憐)

實(shí)現(xiàn)思路

硬件:

  • MQ煙霧/可燃?xì)怏w傳感器
  • dth溫濕度傳感器
  • 空氣顆粒物(pm1.0,pm2.5,pm10)傳感器
  • 繼電器*4(用來控制 取暖器,加濕器,凈化器,煙霧報(bào)警裝置)

軟件:

  • 萬能的web(html js jq)
  • php(負(fù)責(zé)爬天氣預(yù)報(bào)和空氣質(zhì)量,以及和nodeMCU通訊)

  • 用socket拼接http去獲取天氣,結(jié)果寫完發(fā)現(xiàn)它的socket接受發(fā)送最大1440字節(jié),本來想直接寫進(jìn)MCU做個(gè)lua server。可惜了,于是控制規(guī)則干脆寫到前端,php做大量的數(shù)據(jù)獲取支持。
  • 用的空氣顆粒物傳感器接TX口,init.lua加載前會根據(jù)D3 D4 TX 來判斷是否進(jìn)入燒寫模式,之前接繼電器總是上電亂跳,最終把data out 的2口放到D3 D4,解決了這個(gè)問題。

效果圖

nodeMCU代碼(init.lua)

--家庭空氣質(zhì)量管家 --sensor為傳感器data口 --power為繼電器控制口 --D0 CH1 0 --D1 CH2 0 --D2 CH4 0 --D3 MQ-DATA 1 --D4 DHT-DATA 0 --D5 CH3 0 --D6 DHT-VCC 1 --RX PM-TX Air={pm010=0,pm025=0,pm100=0,temp=0,humi=0,smoke=1,gpio_pm=0,gpio_temp=0,gpio_humi=0,gpio_smoke=0,humi_power=0, pm_power=1,smoke_power=2, mq_sensor=3,dht_sensor=4, temp_power=5 } --引腳初始化 for pi=0,6,1 dogpio.mode(pi, gpio.OUTPUT,(pi==6)and gpio.PULLUP or gpio.FLOAT)gpio.write(pi,(pi==3 or pi==6)and gpio.HIGH or gpio.LOW) end --網(wǎng)絡(luò) wifi.setmode(wifi.STATION) wifi.sta.config("SSID","PASSWORD") --串口監(jiān)聽 uart.setup( 0, 9600, 8, 0, 1, 0 ) uart.on("data",function(data)if(string.len(data)==32 and string.byte(data)==66) then--顆粒Air.pm010=tonumber(string.byte(data,11))*256+tonumber(string.byte(data,12))Air.pm025=tonumber(string.byte(data,13))*256+tonumber(string.byte(data,14))Air.pm100=tonumber(string.byte(data,15))*256+tonumber(string.byte(data,16))--溫濕度_,Air.temp,Air.humi, _, _ =dht.read(Air.dht_sensor)--煙霧Air.smoke=gpio.read(Air.mq_sensor)--繼電器Air.gpio_pm,Air.gpio_temp,Air.gpio_humi,Air.gpio_smoke=gpio.read(Air.pm_power),gpio.read(Air.temp_power),gpio.read(Air.humi_power),gpio.read(Air.smoke_power)end end, 0) --http srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive", function(client,request) local buf = "{"local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP")if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP")end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end if(_GET.action == "read")thenfor key,value in pairs(Air) dobuf=buf..key..":"..value..","endelseif(_GET.action == "write")thengpio.write(_GET.pin,_GET.level)elseif(_GET.action == "debug")thennode.input(_GET.data)end client:send(buf.."error:0}")client:close()collectgarbage()end) end)

源碼

https://github.com/Seasonley/...

總結(jié)

以上是生活随笔為你收集整理的nodeMCU自动化控制实现空气质量管家的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。