背景

前阵子树莓派由于没外壳不小心短路烧掉了。最近得手nodeMCU的板子,不仅便宜还支持串口交互式调试,很是方便。寻思着实现个自动化控制玩玩。自从“穹顶之下”的信息被普及,不仅要出门带口罩,还要家里开空气净化器。于是照着知乎也DIY了一个。但作为一个程序员,不捣鼓一点硬件软件怎么可以,于是花了两三天捣鼓了lua,顺便配了个web端的语音播报,软硬件组合达到了期望的效果。(顺便吐槽一下tinyOS的组件式编程,文档也少得可怜)

实现思路

硬件:

MQ烟雾/可燃气体传感器

dth温湿度传感器

空气颗粒物(pm1.0,pm2.5,pm10)传感器

继电器*4(用来控制 取暖器,加湿器,净化器,烟雾报警装置)

软件:

万能的web(html js jq)

php(负责爬天气预报和空气质量,以及和nodeMCU通讯)

用socket拼接http去获取天气,结果写完发现它的socket接受发送最大1440字节,本来想直接写进MCU做个lua server。可惜了,于是控制规则干脆写到前端,php做大量的数据获取支持。

用的空气颗粒物传感器接TX口,init.lua加载前会根据D3 D4 TX 来判断是否进入烧写模式,之前接继电器总是上电乱跳,最终把data out 的2口放到D3 D4,解决了这个问题。

效果图

nodeMCU代码(init.lua)

--家庭空气质量管家

--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 do

gpio.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

--网络

wifi.setmode(wifi.STATION)

wifi.sta.config("SSID","PASSWORD")

--串口监听

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")then

for key,value in pairs(Air) do

buf=buf..key..":"..value..","

end

elseif(_GET.action == "write")then

gpio.write(_GET.pin,_GET.level)

elseif(_GET.action == "debug")then

node.input(_GET.data)

end

client:send(buf.."error:0}")

client:close()

collectgarbage()

end)

end)

源码

爬空气质量MySQL,nodeMCU自动化控制实现空气质量管家相关推荐

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

    背景 前阵子树莓派由于没外壳不小心短路烧掉了.最近得手nodeMCU的板子,不仅便宜还支持串口交互式调试,很是方便.寻思着实现个自动化控制玩玩.自从"穹顶之下"的信息被普及,不仅要 ...

  2. python爬取某城市各监测站点历史空气质量数据

    python爬取某城市各监测站点历史空气质量数据 引言 正文 一.安装Web driver 二.安装selenium 三.数据爬取 引言 由于要使用某地各监测站点的空气质量数据做数据预测,因此需要去网 ...

  3. 可靠性测试设备技术含量_电气自动化控制设备的可靠性测试(1)

    龙源期刊网 http://www.qikan.com.cn 电气自动化控制设备的可靠性测试 作者:彭波 来源:<消费电子 · 理论版> 2013 年第 10 期 摘 要:近年来电气自动化控 ...

  4. 计算机自动控制论文,电气自动化控制人工智能技术研究-人工智能论文-计算机论文.docx...

    电气自动化控制人工智能技术研究-人工智能论文-计算机论文 --文章均为WORD文档,下载后可直接编辑使用亦可打印-- 摘要:随着我国社会快速发展,各行业都加快了发展步伐,借助于信息化技术发展,人工智能 ...

  5. 自动化学科领域高质量科技期刊T1级期刊

    自动化学科领域高质量科技期刊T1级期刊 控制理论与控制工程方向 序号 期刊名称 T1-01 IEEE Transactions on Automatic Control T1-02 Automatic ...

  6. Expect自动化控制简单介绍

    telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等.该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制:也可利用Tk工具,将交互程序包装在X11的 ...

  7. 浅析强化学习及使用Policy Network实现自动化控制

    来源:极客头条 概要:强化学习已经有几十年的历史,但是直到最近几年深度学习技术的突破,强化学习才有了比较大的进展. 浅析强化学习 一个强化学习问题包含三个主要概念,即环境状态(Environment  ...

  8. python 控制库_python中实现自动化控制pyautogui库使用方法介绍

    大家在使用电脑中,有时候需要电脑进行一些繁锁的程序化操作.Python中有一个第三方库,能够帮助大家实现自动化控制电脑完成指定任务.这个库叫pyautogui库.今天,咿哑呀就简单地教大家怎样使用这个 ...

  9. 2020-12-29 Matlab自动化控制-Adrc自抗扰控制参数调节

    Matlab自动化控制-Adrc自抗扰控制参数调节 上篇参看:https://blog.csdn.net/qingfengxd1/article/details/111830762 以最简单的线性组合 ...

最新文章

  1. 修改完 字符串单词首字母大写
  2. hive表 合并字段_hive 两字段合并成 一个字段 例如:字段a和字段b合并成a-b,请问如何实现、...
  3. 关于feign调用时,session丢失的解决方案
  4. win_redis【win下安装使用redis】
  5. 探索Julia(part13)--多分派
  6. python开发stm32软件_ADB+Python+STM32 实现 微信跳一跳辅助
  7. 最近在搞react redux react-router等,
  8. C#高级编程 第十五章 反射
  9. vim python一键执行、高亮等一键安装
  10. Exadata是什么?
  11. 年度盘点和预测:数说汽车互联网市场
  12. 浏览器连不上 Flink WebUI 8081 端口
  13. 老徐WEB:CSS伪类和伪元素详解
  14. 移动web学习(一) --- 流式布局, 视口viewpoint ,2倍图和3倍图, less
  15. textureview 缩放_TextureView实现视频播放详解
  16. 获取网页上没有下载链接的视频音频资源 火狐浏览器插件 Video DownloadHelper
  17. 申报高新技术企业需要注意的问题
  18. iOS10.3.3 iPhone5使用爱思助手越狱后安装完openssl,afc2失效的解决办法
  19. npx:调用项目内部安装的模块
  20. linux从光盘制作.iso,Linux(ubuntu)使用dd从iso制作win7安装光盘(读卡器一样)

热门文章

  1. Android编译错误——Duplicate class android.support.v4.os.ResultReceiver$1 found in modules jetified-and...
  2. 电脑城逐渐衰退甚至消失,究竟是好是坏?
  3. Hibernate的一对多关联关系(单向和双向)
  4. k8s——kubernetes使用rook部署ceph集群
  5. 智能电器控制板EMC仿真与优化
  6. 硬盘检测(无需安装任何三方检测软件)
  7. lnmp一键安装包 安装php-fpm,LNMP一键安装包常用命令及配置文件路径
  8. 读材料专业的你后来都怎样了?
  9. linux怎么强制重启不了,Linux强制重启
  10. 小福利,排序不等式和切比雪夫不等式,平方和不等式的运用