• 上海合作组织青岛峰会举行 2019-04-20
  • 遭遇隐形歧视 就业权益谁来维护 2019-04-20
  • 杨立新解读2018年天津市《政府工作报告》--天津频道--人民网 2019-04-19
  • 【北京海之沃车型报价】北京海之沃4S店车型价格 2019-04-19
  • 让个体诚信有力推动社会诚信 2019-04-13
  • 习近平会见巴基斯坦总统侯赛因 2019-04-13
  • 罗亦农:“残躯何足惜,大敌正当前” 2019-03-21
  • 由进口至出口再至走向世界,这一路着实不易,其中少不了无数位科研人员的奉献与牺牲。 2019-03-21
  • 查看: 5623|回复: 19
    打印 上一主题 下一主题

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

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

    ----------【物料清单】----------
    外壳(3D打印
    空气质量传感器模组
    ESP8266板卡(我用的是NodeMCU的)
    LCD2004液晶屏(I2C接口)
    Arduino板卡(可?。?br /> 杜邦线若干
    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开发的,具体怎么部署开发环境就不多说了,论坛里有~
    //www.vo-ed.com/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




    HCHO-IOT.rar

    409.55 KB, 下载次数: 40, 下载积分: 创造力 -1

    推荐

    FishGan  中级技师
     楼主|

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

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

    马上要试试 ...

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

    我的代码里加了超时判断,一段时间没新数据来就发送一遍请求指令
    你的代码没啥问题的~


    沙发

    rzyzzxw  版主

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

    哈哈,很棒的小伙。
    板凳

    俗人  初级技师

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

    厉害厉害666
    地板

    hnyzcj  超级版主

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

    不错的项目
    5#

    M_J  初级技师

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

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

    M_J  初级技师

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

    可以出个心愿单
    加油
    7#

    FishGan  中级技师
     楼主|

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

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

    mega没有联网功能呀~我1.0版本就是用的mega啊
    8#

    页里  初级技师

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

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

    范yJ  见习技师

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

    uno  wifi就有OTA
    10#

    gada888  版主

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

    不错的项目
    11#

    FishGan  中级技师
     楼主|

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

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

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

    FishGan  中级技师
     楼主|

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

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

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

    页里  初级技师

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

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

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

    M_J  初级技师

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

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

    因为是女朋友~
    15#

    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的控制器有歧视
    而且最重要的是
    我没钱买(其实是不想买)
    ESP8266
    16#

    FishGan  中级技师
     楼主|

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

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

    我倒是非常不喜欢5V电平

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

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

    M_J  初级技师

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

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

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

    话说最近买了个NANO玩
    18#

    OPPS  学徒

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

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

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

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

    [C++] 纯文本查看 复制代码
    #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);
    }
    20#

    OPPS  学徒

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

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

    感谢楼主,确实我加了一行再发送就好了
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    为本项目制作心愿单
    购买心愿单
    心愿单 编辑
    wifi气象站

    硬件清单

    btnicon
    我也要做!
    点击进入购买页面
    上海智位机器人股份有限公司 沪ICP备09038501号-4

    © 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

    浙江6加1开奖结果
  • 上海合作组织青岛峰会举行 2019-04-20
  • 遭遇隐形歧视 就业权益谁来维护 2019-04-20
  • 杨立新解读2018年天津市《政府工作报告》--天津频道--人民网 2019-04-19
  • 【北京海之沃车型报价】北京海之沃4S店车型价格 2019-04-19
  • 让个体诚信有力推动社会诚信 2019-04-13
  • 习近平会见巴基斯坦总统侯赛因 2019-04-13
  • 罗亦农:“残躯何足惜,大敌正当前” 2019-03-21
  • 由进口至出口再至走向世界,这一路着实不易,其中少不了无数位科研人员的奉献与牺牲。 2019-03-21