基于ESP8266做一个空气质量监测站
2018-10-043.6万
精华项目
AI 快速预览详细
本文介绍了如何使用ESP8266和空气质量传感器模组制作一个空气质量监测站。项目所需物料包括ESP8266板卡、空气质量传感器模组、LCD2004液晶屏等。通过详细的接线图和代码示例,用户可以轻松搭建并实现远程监控。特别适合家庭环境监测,尤其是新装修后的甲醛检测。
|
女朋友的寝室刚刚翻新好,味道很大 同学们都说,甲醛肯定超标 常言道,没数据说个(哔---) 那就测一测甲醛到底有多少 ----------【物料清单】---------- 外壳(3D打印) 空气质量传感器模组 ESP8266板卡(我用的是NodeMCU的) LCD2004液晶屏(I2C接口) Arduino板卡(可选) 杜邦线若干 XH2.54接插件制作套件(包括插头塑壳,簧片,冷压钳) 五金件(螺丝螺母铜柱)若干 --------------------------------------------------- 外壳:外壳这种嘛大家随意~ 空气质量传感器买的现成模组 是炜盛科技生产的 淘宝上直接有直营店铺 为了避免打广告嫌疑,就不说具体型号了,大家自己根据我的图对比下就知道了~ 这个模块是直接串口输出数据的,具体数据格式手册上已经说得很清楚了,也可以参考我的程序来移植 液晶屏我用的2004,刚好可以显示所有数据 如果手头只有1602的小伙伴也可以用哒 就是自己要稍微修改下显示界面,然后定期翻页 哦对,建议用I2C接口的液晶屏 淘宝上有原生I2C接口的,那种贼拉贵。直接买用转接板就行的 ![]() 就是这样的,转接板淘宝上四五块钱一个 其实我本来有一块原生的,然后刚好被同学顺走了,换用转接板的是一样的 I2C有一个好,就是线数少,真的是非常舒服了。 后面有个骚操作,不用Arduino直接用ESP8266做主控如果直接用原生的16pin接口,就算用4bit数据模式,IO口也会很捉急 传感器模组接口是6pin的XH2.54插座,我刚好有做XH2.54头子的全套家伙,所以直接剪了两根杜邦线,然后做成XH2.54头子 没条件的小伙伴,直接淘宝上买做好的线吧~ emmmm好像淘宝上这样的线很少,要定制。其实可以直接买6pinXH2.54头子的线,然后自己搞几根杜邦线,中间剪开接上。 ---------【V1.0版本】----------- ![]() 接线挺简单的。这一版本是用Arduino做主控,那么Arduino就需要用到两个串口,分别和ESP8266以及传感器模组通讯。正好手头有块Mega就用上了,用UNO或者nano一类的也行的,搞个软串口就是了~ Arduino的两个串口分别接传感器模组和ESP8266,I2C接口接液晶屏~so easy 然后此处要感慨一下DF真的良心,OBLOQ的固件映像在github上面有。 地址在这里 https://github.com/DFRobot/Obloq/tree/master/Firmware 我的ESP8266本来是NodeMCU的,然后刷了上面链接里的bin文件以后,成功变身OBLOQ~ 当然已经有OBLOQ的小伙伴就不用费事刷固件啦~ ---------【V2.0版本】----------- 1.0版本做完以后,我就在想,放着ESP8266这么强个处理器不用,还搞个Arduino也是有点浪费,于是就开始了一通骚操作~ 【此处省略焊接时的N多句粗口】【此处省略写bug的NaN字】 反正结果就是酱紫滴 ![]() 是不是简单了很多! 其实线路原理很简单,电源(5V)进来分三路,一路接到ESP8266板卡的VIN,一路接到传感器模组,一路接到液晶屏。 此处要注意,ESP8266是3.3V的,接5V会烧,所以一定要接到板卡的VIN引脚上,让5V通过板载的线性稳压器降到3.3V再供给8266 然后就是传感器模组接串口,液晶屏接I2C接口。 ![]() ![]() 具体引脚定义在这里了 ![]() ![]() 【焊接的真是差】【捂脸逃】 啊这边说明一下,ESP8266有线烧写代码时,也是通过串口的,所以会和传感器模组冲突。 所以我做了个拨码开关,在烧程序的时候断开串口和串口模组的连接~ 然后翻了一圈只有8位拨码开关,只能硬着头皮用了Orz 然后拨码开关上还接了一个IO口,可以用来启动OTA功能(无线烧写程序)。 当程序侦测到这个IO口为低电平(即拨码开关打开),就会启动OTA服务器 平时是关闭OTA服务器的,一方面防止恶意烧写,一方面也可以降低功耗。 具体的代码都附在后面啦~经测试稳健的一比~ 下面放图镇楼 ![]() ![]() ![]() ---------【碎碎念】----------- ESP8266的代码是用ArduinoIDE开发的,具体怎么部署开发环境就不多说了,论坛里有~ https://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=24368&fromuid=820173 云平台就是DF家的,真的好使~需要自己修改的几个地方:(在iot.h或者network.cpp里面) 自家wifi热点的ssid和密码 云平台上的账号密码 用来publish消息的topic 具体可以参照论坛上OBLOQ使用教程~ 有任何问题,欢迎回帖~我会尽力帮助~ 简略说一下OTA烧写法。拉低对应IO(就是打开拨码开关),然后复位板卡。确保你的电脑和板卡连接了同一wifi热点,然后打开浏览器,输入液晶屏提示的网址,然后把编译出来的bin文件通过网页上传上去。等板卡自动重启以后,恢复拨码开关,复位板卡。完成~ 对了,用Arduino做主控的话,就没有OTA功能啦~ 附件里包含了两个版本的代码,以及传感器模组的参考手册~ ps:欢迎转载,注明出处及作者即可~不得商用! 作者:XiaoFishGan |
-
-
409.55 KB, 下载次数: 49
售价: 30 创造力 [记录]














马上要试试你写的这个,感谢分享。
以下是我的测试码,如有空帮忙看看;P
[mw_shl_code=cpp,true]#include
SoftwareSerial ZPHS01_Serial(3,2);
byte readData[] = {0x11, 0X02, 0X01, 0X00, 0XEC};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
ZPHS01_Serial.begin(9600);
ZPHS01_Serial.write(readData,sizeof(readData));
delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
for (int i=0; i<14; i++) {
while(!ZPHS01_Serial.available()); // wait for a character
int incomingByte = ZPHS01_Serial.read();
Serial.print(incomingByte,HEX);
Serial.print(' ');
}
Serial.println();
delay(1000);
}[/mw_shl_code]
就是数据会莫名自己停掉
遇到这种情况,直接通过串口再发送一遍请求指令就行啦
我的代码里加了超时判断,一段时间没新数据来就发送一遍请求指令
你的代码没啥问题的~
其实从一开始UNO WIFI就感觉没什么存在感,各种社区支持也很少
价格贵不说,i2c也是个坑
官网上现在倒是有了个UNO WIFI REV2
不过用的是u-blox NINA-W13 Wi-Fi Module
价格也是挺感人的。。。
dalao也是从新人过来的呀
遇到问题欢迎提问,我会尽力帮你解答哒~
加油
而且Arduino也可以在3.3V运行的啊,改改BootLoader让MCU运行到8Mhz就行了
不过实测有些体质好的片子3.3V跑16M也没事
8266也不贵啊,你焊功可以的话,淘宝上邮票孔的那种模块,10块不到就能买一个。要么就是我用的这种,长得像Arduino nano的,也就十几二十块一个。。。