ESPEASY的攀藤甲醛传感器代码

经验交流、创意讨论,请勿在此提问。
版面规则
经验交流、创意讨论,请勿在此提问。
回复
casatift
帖子: 2
注册时间: 周五 5月 26, 2017 10:02

ESPEASY的攀藤甲醛传感器代码

帖子 casatift »

测试需要,所以接了个攀藤的HCHO甲醛传感器在ESPEASY上,编了一个099的插件,欢迎大家使用,也可以直接下载固件:http://pan.baidu.com/s/1dE5H76T

代码: 全选

#define PLUGIN_099
#define PLUGIN_ID_099         99
#define PLUGIN_NAME_099       "PLANTOWER HCHO"
#define PLUGIN_VALUENAME1_099 "HCHO"
#define PLUGIN_READ_TIMEOUT   3000

boolean Plugin_099_init = false;

#include <SoftwareSerial.h>
SoftwareSerial *Plugin_099_SoftSerial;

// 9-bytes CMD HCHO read command
byte tcoCmdReadHCHO[7] = {0x42,0x4d,0x01,0x00,0x00,0x00,0x90};
byte tcoResp[9];    // 9 bytes bytes response


boolean Plugin_099(byte function, struct EventStruct *event, String& string)
{
  bool success = false;

  switch (function)
  {

    case PLUGIN_DEVICE_ADD:
      {
        Device[++deviceCount].Number = PLUGIN_ID_099;
        Device[deviceCount].Type = DEVICE_TYPE_DUAL;
        Device[deviceCount].VType = SENSOR_TYPE_SINGLE;
        Device[deviceCount].Ports = 0;
        Device[deviceCount].PullUpOption = false;
        Device[deviceCount].InverseLogicOption = false;
        Device[deviceCount].FormulaOption = true;
        Device[deviceCount].ValueCount = 1;
        Device[deviceCount].SendDataOption = true;
        Device[deviceCount].TimerOption = true;
        Device[deviceCount].GlobalSyncOption = true;
        break;
      }

    case PLUGIN_GET_DEVICENAME:
      {
        string = F(PLUGIN_NAME_099);
        break;
      }

    case PLUGIN_GET_DEVICEVALUENAMES:
      {
        strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_099));

        break;
      }

    case PLUGIN_INIT:
      {
        Plugin_099_SoftSerial = new SoftwareSerial(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex]);
        Plugin_099_SoftSerial->begin(9600);
        addLog(LOG_LEVEL_INFO, F("HCHO: Init OK "));

        timerSensor[event->TaskIndex] = millis();

        Plugin_099_init = true;
        success = true;
        break;
      }


    case PLUGIN_READ:
      {

        if (Plugin_099_init)
        {
          //send read HCHO command
          int nbBytesSent = Plugin_099_SoftSerial->write(tcoCmdReadHCHO, 7);
          if (nbBytesSent != 7) {
            String log = F("HCHO: Error, nb bytes sent != 9 : ");
              log += nbBytesSent;
              addLog(LOG_LEVEL_INFO, log);
          }


          memset(tcoResp, 0, sizeof(tcoResp));

          long start = millis();
          int counter = 0;
          while (((millis() - start) < PLUGIN_READ_TIMEOUT) && (counter < 9)) {
            if (Plugin_099_SoftSerial->available() > 0) {
              tcoResp[counter++] = Plugin_099_SoftSerial->read();
            } else {
              delay(2);
            }
          }
          if (counter < 7){
              addLog(LOG_LEVEL_INFO, F("HCHO: Error, timeout while trying to read"));
          }

          float hcho = 0;
          int i;
          signed int temp = 0;
          unsigned int s = 0;
          float u = 0;
          byte crc = 0;
          float hch=0;
          for (i = 2; i < 30; i++);

 if (tcoResp[0] == 0x42)  {

              //calculate CO2 HCHO
              unsigned int tcoRespHigh = (unsigned int) tcoResp[6];
              unsigned int tcoRespLow = (unsigned int) tcoResp[7];
              hch = (256*tcoRespHigh) + tcoRespLow;
               if(4==tcoResp[5])
         {hcho=hch/1000;}
         if(3==tcoResp[5])
         {hcho=hch/100;}
         if(2==tcoResp[5])
         {hcho=hch/10;}
         if(1==tcoResp[5])
         {hcho=hch;}
              
                success = true;

                UserVar[event->BaseVarIndex] = (float)hcho;


              String log = F("HCHO: ");



              // Log values in all cases
              log += F("HCHO value: ");
              log += hcho;
            
              addLog(LOG_LEVEL_INFO, log);
              break;

          }

        }
        break;
      }
  }
  return success;
}

上次由 casatift 在 周一 7月 03, 2017 22:41,总共编辑 2 次。
blindlight
帖子: 98
注册时间: 周四 3月 30, 2017 00:03

Re: ESPEASY的攀藤甲醛传感器代码

帖子 blindlight »

屁股多了个[ code ]
casatift
帖子: 2
注册时间: 周五 5月 26, 2017 10:02

Re: ESPEASY的攀藤甲醛传感器代码

帖子 casatift »

多点了以下,然后只删了头……
blindlight
帖子: 98
注册时间: 周四 3月 30, 2017 00:03

Re: ESPEASY的攀藤甲醛传感器代码

帖子 blindlight »

casatift 写了: 周三 6月 28, 2017 09:34 多点了以下,然后只删了头……
你这是给小白挖坑啊 :twisted:
hackerftp
帖子: 2
注册时间: 周日 7月 09, 2017 22:42

Re: ESPEASY的攀藤甲醛传感器代码

帖子 hackerftp »

作者你好,你的固件我刷完以后搜不到wifi了,也连不上电脑了,试了一晚上了,刷回官方easy固件后就可以正常用,想问问你怎么单独安装这个插件!
hackerftp
帖子: 2
注册时间: 周日 7月 09, 2017 22:42

Re: ESPEASY的攀藤甲醛传感器代码

帖子 hackerftp »

刷进去以后把pms5003的插件给挤没了
jascai
帖子: 3
注册时间: 周三 7月 12, 2017 11:36

Re: ESPEASY的攀藤甲醛传感器代码

帖子 jascai »

大神,能否指点一下如何修改原有的pmsx003插件代码为pms5003t所用?尝试过只是修改变量数量的话,导致所有变量无法读取,不知道何解。十分感谢!
zonezz
帖子: 5
注册时间: 周二 7月 04, 2017 14:59

Re: ESPEASY的攀藤甲醛传感器代码

帖子 zonezz »

大神救救我啊,刷了你的固件就不能启动了,只能刷回以前的,还有你的那代码怎么使用呢? :o :o :o :o
openxbmc
帖子: 3
注册时间: 周三 9月 20, 2017 09:45

Re: ESPEASY的攀藤甲醛传感器代码

帖子 openxbmc »

jascai 写了: 周二 7月 18, 2017 14:23 大神,能否指点一下如何修改原有的pmsx003插件代码为pms5003t所用?尝试过只是修改变量数量的话,导致所有变量无法读取,不知道何解。十分感谢!
兄弟搞定了么?我也遇到了同样的问题,官方默认支持PMS5003,我的是PMS5003S,多了甲醛检测,你这个的模块是带温度的吧,我也修改了,但是不好用。
arctg
帖子: 6
注册时间: 周日 9月 10, 2017 15:21

Re: ESPEASY的攀藤甲醛传感器代码

帖子 arctg »

5003和5003S的数据格式完全一样的,对PLUGIN_053稍微修改一下就可以了。
下面这个是我改好的。传回domoticz时,传回的是四个参数而不是原来的三个,依次是pm1,pm2.5,pm10,HCHO。HCHO的单位是mg/m3
_P053_PMSx003.rar
支持5003S的代码
(2.4 KiB) 已下载 1649 次
gkbdigital
帖子: 1
注册时间: 周二 9月 26, 2017 19:48

Re: ESPEASY的攀藤甲醛传感器代码

帖子 gkbdigital »

Arduino:1.8.4 (Windows 7), 开发板:"Olimex MOD-WIFI-ESP8266(-DEV), 80 MHz, Serial, 115200"

Archiving built core (caching) in: C:\Users\LOVEON~1\AppData\Local\Temp\arduino_cache_339108\core\core_esp8266_esp8266_modwifi_CpuFrequency_80,UploadTool_esptool,UploadSpeed_115200_b77e76b1e9527dd90f33b1b1d5156af5.a
C:\Users\LOVEON~1\AppData\Local\Temp\arduino_build_485162/arduino.ar(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x4): undefined reference to `setup'

C:\Users\LOVEON~1\AppData\Local\Temp\arduino_build_485162/arduino.ar(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x8): undefined reference to `loop'

C:\Users\LOVEON~1\AppData\Local\Temp\arduino_build_485162/arduino.ar(core_esp8266_main.cpp.o): In function `loop_wrapper':

C:\Users\Loveonline\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\cores\esp8266/core_esp8266_main.cpp:97: undefined reference to `setup'

C:\Users\Loveonline\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\cores\esp8266/core_esp8266_main.cpp:97: undefined reference to `loop'

collect2.exe: error: ld returned 1 exit status

exit status 1
为开发板 Olimex MOD-WIFI-ESP8266(-DEV) 编译时出错。

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
苯大虾
帖子: 1
注册时间: 周四 12月 21, 2017 00:28

Re: ESPEASY的攀藤甲醛传感器代码

帖子 苯大虾 »

想问楼主,程序获得的甲醛数值单位是什么?PPM还是mg/m³
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

Re: ESPEASY的攀藤甲醛传感器代码

帖子 DT27 »

苯大虾 写了: 周四 12月 21, 2017 00:30 想问楼主,程序获得的甲醛数值单位是什么?PPM还是mg/m³
mg/m3
rayborng
帖子: 10
注册时间: 周一 12月 18, 2017 10:10

Re: ESPEASY的攀藤甲醛传感器代码

帖子 rayborng »

arctg 写了: 周六 9月 23, 2017 00:28 5003和5003S的数据格式完全一样的,对PLUGIN_053稍微修改一下就可以了。
下面这个是我改好的。传回domoticz时,传回的是四个参数而不是原来的三个,依次是pm1,pm2.5,pm10,HCHO。HCHO的单位是mg/m3

_P053_PMSx003.rar
真的零基础填坑太痛苦了。求大神解答。购买的是pms5003s,甲醛读不出。改espeasy插件,卡在Arduino刷机。如何把改好的插件刷进nodemcu,只刷_P053_PMSx003.ino这一个文件吗?验证总报错。能否出个espeasy增加插件和修改插件Arduino刷机的文章!中文资料真心太少了。万分感谢!
错误信息:
-------------------------------------
Arduino:1.8.1 (Windows 7), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

构建选项已变更,全部重新构建
C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_785419/arduino.ar(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x4): undefined reference to `setup'

C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_785419/arduino.ar(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x8): undefined reference to `loop'

C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_785419/arduino.ar(core_esp8266_main.cpp.o): In function `loop_wrapper':

C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_main.cpp:110: undefined reference to `setup'

C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_main.cpp:110: undefined reference to `loop'

collect2.exe: error: ld returned 1 exit status

exit status 1
为开发板 Generic ESP8266 Module 编译时出错。
----------------------------------------------------------------
头像
Admin
网站管理员
帖子: 122
注册时间: 周六 2月 25, 2017 12:47
Gender:

Re: ESPEASY的攀藤甲醛传感器代码

帖子 Admin »

rayborng 写了: 周四 12月 28, 2017 14:36
arctg 写了: 周六 9月 23, 2017 00:28 5003和5003S的数据格式完全一样的,对PLUGIN_053稍微修改一下就可以了。
下面这个是我改好的。传回domoticz时,传回的是四个参数而不是原来的三个,依次是pm1,pm2.5,pm10,HCHO。HCHO的单位是mg/m3

_P053_PMSx003.rar
真的零基础填坑太痛苦了。求大神解答。购买的是pms5003s,甲醛读不出。改espeasy插件,卡在Arduino刷机。如何把改好的插件刷进nodemcu,只刷_P053_PMSx003.ino这一个文件吗?验证总报错。能否出个espeasy增加插件和修改插件Arduino刷机的文章!中文资料真心太少了。万分感谢!
错误信息:
-------------------------------------
Arduino:1.8.1 (Windows 7), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

构建选项已变更,全部重新构建
C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_785419/arduino.ar(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x4): undefined reference to `setup'

C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_785419/arduino.ar(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x8): undefined reference to `loop'

C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_785419/arduino.ar(core_esp8266_main.cpp.o): In function `loop_wrapper':

C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_main.cpp:110: undefined reference to `setup'

C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_main.cpp:110: undefined reference to `loop'

collect2.exe: error: ld returned 1 exit status

exit status 1
为开发板 Generic ESP8266 Module 编译时出错。
----------------------------------------------------------------
你需要这个教程:https://www.letscontrolit.com/wiki/inde ... evelopment
简单说下流程,
1、安装Atom编辑器,然后安装platformio-ide扩展,图文教程:https://www.letscontrolit.com/wiki/inde ... Platformio
2、下载espeasy源码,解压后用Atom打开:https://github.com/letscontrolit/ESPEas ... e/mega.zip
3、把你编辑的插件ino文件放到源码src目录。
4、Atom里按F7键选择要编译的版本,PIO Build(normal_xxxx)是编译,不上传,PIO Upload(normal_1024)是编译并上传到ESP模块。图文教程:https://www.letscontrolit.com/wiki/inde ... ct_version
5、如果上传失败看看是不是串口设置有问题,按Alt+Shift+M键打开串口配置,图文教程:https://www.letscontrolit.com/wiki/inde ... monitoring
Over!
rayborng
帖子: 10
注册时间: 周一 12月 18, 2017 10:10

Re: ESPEASY的攀藤甲醛传感器代码

帖子 rayborng »

谢谢 管理员! 此坑已填。中文资料少,英文要硬着头皮吭。
库文件一定要齐全,重复的库还要删除。
github上的很多插件代码有些还需要修改。编译报错太多。
总算填上了,感谢大家!
头像
Admin
网站管理员
帖子: 122
注册时间: 周六 2月 25, 2017 12:47
Gender:

Re: ESPEASY的攀藤甲醛传感器代码

帖子 Admin »

rayborng 写了: 周四 12月 28, 2017 23:56 谢谢 管理员! 此坑已填。中文资料少,英文要硬着头皮吭。
库文件一定要齐全,重复的库还要删除。
github上的很多插件代码有些还需要修改。编译报错太多。
总算填上了,感谢大家!
用不着的插件直接删掉就行了。
flying_dog
帖子: 2
注册时间: 周二 3月 27, 2018 00:24

Re: ESPEASY的攀藤甲醛传感器代码

帖子 flying_dog »

arctg 写了: 周六 9月 23, 2017 00:28 5003和5003S的数据格式完全一样的,对PLUGIN_053稍微修改一下就可以了。
下面这个是我改好的。传回domoticz时,传回的是四个参数而不是原来的三个,依次是pm1,pm2.5,pm10,HCHO。HCHO的单位是mg/m3

_P053_PMSx003.rar
大侠求助,我调整好后,本地能够显示,但远程传输到domoticz还是只有3个值,是否还需要在哪里配置
回复