FishGan 发表于 2018-10-4 13:53:39

基于ESP8266做一个空气质量监测站

女朋友的寝室刚刚翻新好,味道很大
同学们都说,甲醛肯定超标
常言道,没数据说个(哔---)
那就测一测甲醛到底有多少

----------【物料清单】----------
外壳(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




FishGan 发表于 2019-1-2 20:06:31

本帖最后由 FishGan 于 2019-1-2 21:23 编辑

OPPS 发表于 2019-1-2 19:18
师兄你太厉害了,我也是买了这个传感器,自己写了个测试代码,但开了半小时后数据就停掉了

马上要试试 ...
这个传感器的确是有bug
就是数据会莫名自己停掉
遇到这种情况,直接通过串口再发送一遍请求指令就行啦
{:5_153:}
我的代码里加了超时判断,一段时间没新数据来就发送一遍请求指令
你的代码没啥问题的~


OPPS 发表于 2019-1-2 19:18:05

师兄你太厉害了,我也是买了这个传感器,自己写了个测试代码,但开了半小时后数据就停掉了:'(

马上要试试你写的这个,感谢分享。

以下是我的测试码,如有空帮忙看看;P

#include <SoftwareSerial.h>

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);
}

FishGan 发表于 2018-10-14 00:46:18

M_J 发表于 2018-10-12 20:57
表示对3.3V的控制器有歧视
而且最重要的是
我没钱买


我倒是非常不喜欢5V电平{:5_123:}

而且Arduino也可以在3.3V运行的啊,改改BootLoader让MCU运行到8Mhz就行了
不过实测有些体质好的片子3.3V跑16M也没事{:5_130:}

8266也不贵啊,你焊功可以的话,淘宝上邮票孔的那种模块,10块不到就能买一个。要么就是我用的这种,长得像Arduino nano的,也就十几二十块一个。。。

rzyzzxw 发表于 2018-10-4 14:39:49

哈哈,很棒的小伙。{:5_148:}

俗人 发表于 2018-10-4 14:47:19

厉害厉害666

hnyzcj 发表于 2018-10-4 15:03:27

不错的项目

M_J 发表于 2018-10-7 18:11:39

这种事情,给我一个MEGA就够了

M_J 发表于 2018-10-7 18:12:26

可以出个心愿单
加油

FishGan 发表于 2018-10-8 11:02:22

M_J 发表于 2018-10-7 18:11
这种事情,给我一个MEGA就够了

mega没有联网功能呀~我1.0版本就是用的mega啊{:5_179:}

页里 发表于 2018-10-8 17:13:16

这个很实用啊,感谢分享,就是我作为一个刚接触的人做起来可能费一些时间,希望自己能完成

范yJ 发表于 2018-10-9 06:26:58

unowifi就有OTA

gada888 发表于 2018-10-9 10:40:46

不错的项目

FishGan 发表于 2018-10-10 00:08:47

范yJ 发表于 2018-10-9 06:26
unowifi就有OTA

UNO WIFI已经凉了Orz在官网上是Retired
其实从一开始UNO WIFI就感觉没什么存在感,各种社区支持也很少
价格贵不说,i2c也是个坑
官网上现在倒是有了个UNO WIFI REV2
不过用的是u-blox NINA-W13 Wi-Fi Module
价格也是挺感人的。。。

FishGan 发表于 2018-10-10 00:11:54

页里 发表于 2018-10-8 17:13
这个很实用啊,感谢分享,就是我作为一个刚接触的人做起来可能费一些时间,希望自己能完成 ...

哈哈~加油!
dalao也是从新人过来的呀{:5_132:}
遇到问题欢迎提问,我会尽力帮你解答哒~

页里 发表于 2018-10-11 21:27:41

FishGan 发表于 2018-10-10 00:11
哈哈~加油!
dalao也是从新人过来的呀
遇到问题欢迎提问,我会尽力帮你解答哒~ ...

哇,收到回复好感动!我要先学习到无压力能看懂然后要是做的过程中有问题再请教您!

M_J 发表于 2018-10-12 20:52:09

FishGan 发表于 2018-10-8 11:02
mega没有联网功能呀~我1.0版本就是用的mega啊

因为是女朋友~{:5_132:}

M_J 发表于 2018-10-12 20:57:20

本帖最后由 M_J 于 2018-10-16 20:03 编辑

FishGan 发表于 2018-10-8 11:02
mega没有联网功能呀~我1.0版本就是用的mega啊
表示对3.3V的控制器有歧视{:5_124:}
而且最重要的是
我没钱买(其实是不想买)
ESP8266{:5_199:}

M_J 发表于 2018-10-16 20:01:47

FishGan 发表于 2018-10-14 00:46
我倒是非常不喜欢5V电平

而且Arduino也可以在3.3V运行的啊,改改BootLoader让MCU运行到8Mhz就 ...

话说最近买了个NANO玩{:5_120:}

OPPS 发表于 2019-1-2 22:08:36

FishGan 发表于 2019-1-2 20:06
这个传感器的确是有bug
就是数据会莫名自己停掉
遇到这种情况,直接通过串口再发送一遍请求指令就行啦


感谢楼主,确实我加了一行再发送就好了:handshake

leovs 发表于 2019-5-15 20:49:54

是不是用了这个模块,代码串口调试就不能用了呢?
页: [1] 2
查看完整版本: 基于ESP8266做一个空气质量监测站