ESP8266读取SHT30温湿度触感器点灯科技小爱可查询-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3589|回复: 8

[分享] ESP8266读取SHT30温湿度触感器点灯科技小爱可查询

[复制链接]
发表于 2021-4-1 11:21 | 显示全部楼层 |阅读模式
功能介绍:1、通过Blinker读取和统计温湿度历史数据;2、小爱同学查询温湿度;
硬件:SHT30传感器、ESP8266
程序介绍:第一部分为blinker界面配置(可复制到blinker APP内,直接配置界面);第二部分为SHT3x.h库的内容;第三部分为arduino编译的程序(如果没有库,复制命名为SHT3x.h然后放在和arduino程序同一个文件夹里),第三部分为blinker界面配置(可复制到blinker APP内,直接配置界面)


界面配置:
{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨num¨¨t0¨¨温度¨¨ico¨¨fad fa-thermometer-three-quarters¨¨clr¨¨#389BEE¨¨min¨É¨max¨¤o¨uni¨¨°C¨¨bg¨É¨cols¨Í¨rows¨Ë¨key¨¨temp¨´x´É´y´Ñ¨speech¨|÷¨lstyle¨Ê}{ßAßBßC¨湿度¨ßE¨fad fa-humidity¨ßGßHßIÉßJ¢1cßK´%´ßMÉßNÍßOËßP¨humi¨´x´Í´y´ÑßR|÷ßSÊ}{ßA¨cha¨ßMɨsty¨¨line¨ßG¨#EA0909¨¨sty1¨ßY¨clr1¨¨#076EEF¨¨sty2¨ßY¨clr2¨ßHßNÑßOÍßPßQ´x´É´y´¤AßR|÷¨key2¨´´¨key0¨ßQßCßD¨t1¨ßT¨key1¨ßVßSÊ}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßl¨source_zh¨¨开关状态¨¨state¨|ßnßp÷¨state_zh¨|¨打开¨¨关闭¨÷}÷}

库文件:<SHT3x.h>

  1. /*
  2.         Arduino library for Sensirion temperature and humidity sensors SHT30, SHT31 & SHT35.
  3.         the heavy version.
  4.         Check for /examples for examples of different use cases.
  5.        
  6.         The datasheet I followed is:
  7.         https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/2_Humidity_Sensors/Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital.pdf
  8.         For more simple version check the SimpleSHT3x library.
  9.        
  10.         The constructor structure:
  11.         SHT3x(        int Address = 0x44, //I2C device address, 0x44 or 0x45
  12.                                 ValueIfError Value = Zero, //What to return in case of errors. Zero or PrevValue
  13.                                 uint8_t HardResetPin = 255, //Number of pin RESET connected to (input from 100 to 255 if not used)
  14.                                 SHT3xSensor SensorType = SHT30, //Sensor type, SHT30, SHT31 or SHT35.
  15.                                 SHT3xMode Mode=Single_HighRep_ClockStretch //Operation mode , look for "enum SHT3xMode"
  16.                                 );
  17.        
  18.         Supports:
  19.                 Temperature data at Celsius, Kelvin and Fahrenheit scales.
  20.                 Relative humidity data.
  21.                 Absolute humidity data at Torr, mm Hg, Pa, bar, technical and standard atmosphere, psi scales.
  22.                 Data integrity (by CRC8 algorithm) (datasheet/section 4.12).
  23.                 Temperature, relative and absolute humidity tolerances (in dependence from measured values)
  24.                 Calibration (linear) of temperature and humidity data by factors or by reverse sensor values (2 points)
  25.                 Heater On/Off (integrated to SHT3x sensor) (datasheet/section 4.10)
  26.                 Different sensor actions modes (datasheet/section 4.3)
  27.                 Reset: soft (I2C) and hard (by corresponding pin) (datasheet/section 4.9)
  28.                
  29.         Do not supports:
  30.                 Action in periodic mode (datasheet/section 4.5)
  31.                 Interrupts (datasheet/section 3.5)
  32.                
  33.                
  34.                
  35.         Note 1: by default, the data from sensor updates not faster, than 2 times a second.
  36.         For faster update use SetUpdateInterval(uint32_t UpdateIntervalMillisec); but do not exceed the datasheet values (10 measurments per second (100 ms)) because of sensor self-heating (datasheet/section 4.5, at the end of Table 9)
  37.        
  38.         Note 2: The sensor type affects the tolerance values only.
  39.        
  40.        
  41.         Created by Risele for everyone's use (profit and non-profit).

  42.         ALL THESE WOR_DS
  43.         ARE YOURS EXCEPT
  44.         RISELE
  45.         ATTEMPT NO
  46.         namechangING THERE
  47.         USE THEM TOGETHER
  48.         USE THEM IN PEACE
  49.        
  50. */


  51. #ifndef SHT3x_h
  52.         #define SHT3x_h
  53.        
  54.        
  55.         //Arduino standart libraries
  56.         #if defined(ARDUINO) && ARDUINO >= 100
  57.                 #include "Arduino.h"
  58.                 #else
  59.                 #include "WProgram.h"
  60.         #endif
  61.         //Arduino I2C/TWI library
  62.         #include <Wire.h>
  63.         //For calculating the tolerance of absolute humidity
  64.         #include <math.h>
  65.        
  66.        
  67.         class SHT3x
  68.         {
  69.         public:
  70.         enum ValueIfError //Define, what to return in case of error: Zero or previous value
  71.         {
  72.                 Zero,
  73.                 PrevValue
  74.         };
  75.         enum SHT3xMode
  76.         {
  77.                 Single_HighRep_ClockStretch,
  78.                 Single_MediumRep_ClockStretch,
  79.                 Single_LowRep_ClockStretch,
  80.                 Single_HighRep_NoClockStretch,
  81.                 Single_MediumRep_NoClockStretch,
  82.                 Single_LowRep_NoClockStretch       
  83.         };
  84.         enum SHT3xSensor
  85.         {
  86.                 SHT30,
  87.                 SHT31,
  88.                 SHT35
  89.         };
  90.         enum TemperatureScale
  91.         {
  92.                 Cel,
  93.                 Far,
  94.                 Kel
  95.         };
  96.         enum AbsHumidityScale
  97.         {
  98.                 mmHg,
  99.                 Torr,         //same as mm Hg
  100.                 Pa,
  101.                 Bar,
  102.                 At,                 //Techical atmosphere
  103.                 Atm,        //Standart atmosphere
  104.                 mH2O,
  105.                 psi,
  106.         };
  107.         struct CalibrationPoints
  108.         {
  109.                 float First;
  110.                 float Second;
  111.         };
  112.         struct CalibrationFactors
  113.         {
  114.                 CalibrationFactors():Factor(1.), Shift(0.){}
  115.                 float Factor;
  116.                 float Shift;
  117.         };
  118.        
  119.                 SHT3x(        int Address = 0x44,
  120.                                 ValueIfError Value = Zero,
  121.                                 uint8_t HardResetPin = 255,
  122.                                 SHT3xSensor SensorType = SHT30,
  123.                                 SHT3xMode Mode=Single_HighRep_ClockStretch);
  124.                
  125.                 void Begin();
  126.                 void UpdateData();
  127.                
  128.                 float GetTemperature(TemperatureScale Degree = Cel);
  129.                 float GetRelHumidity();
  130.                 float GetAbsHumidity(AbsHumidityScale Scale = Torr);
  131.                 float GetTempTolerance(TemperatureScale Degree = Cel, SHT3xSensor SensorType = SHT30);
  132.                 float GetRelHumTolerance(SHT3xSensor SensorType = SHT30);
  133.                 float GetAbsHumTolerance(AbsHumidityScale Scale = Torr, SHT3xSensor SensorType = SHT30);
  134.                
  135.                
  136.                 uint8_t GetError();
  137.                
  138.                 void SetMode(SHT3xMode Mode = Single_HighRep_ClockStretch);
  139.                 void SetTemperatureCalibrationFactors(CalibrationFactors TemperatureCalibration);
  140.                 void SetRelHumidityCalibrationFactors(CalibrationFactors RelHumidityCalibration);
  141.                 void SetTemperatureCalibrationPoints(CalibrationPoints SensorValues, CalibrationPoints Reference);
  142.                 void SetRelHumidityCalibrationPoints(CalibrationPoints SensorValues, CalibrationPoints Reference);

  143.                 void SoftReset();
  144.                 void HardReset();
  145.                
  146.                 void HeaterOn();
  147.                 void HeaterOff();
  148.                
  149.                 void SetAddress(uint8_t NewAddress);
  150.                 void SetUpdateInterval(uint32_t UpdateIntervalMillisec);
  151.                 void SetTimeout(uint32_t TimeoutMillisec);
  152.                
  153.                

  154.                 private:
  155.                 float _TemperatureCeil;
  156.                 float _RelHumidity;
  157.                 bool _OperationEnabled         = false;
  158.                 uint8_t _HardResetPin;
  159.                 ValueIfError _ValueIfError;
  160.                 uint8_t _MeasLSB;         //Data read command, Most Significant Byte
  161.                 uint8_t _MeasMSB;         //Data read command, Most Significant Byte
  162.                 uint8_t _Address;
  163.                 SHT3xSensor _SensorType;
  164.                 uint32_t _UpdateIntervalMillisec = 500;
  165.                 uint32_t _LastUpdateMillisec = 0;
  166.                 uint32_t _TimeoutMillisec = 100;
  167.                 void SendCommand(uint8_t MSB, uint8_t LSB);
  168.                 bool CRC8(uint8_t MSB, uint8_t LSB, uint8_t CRC);
  169.                 float ReturnValueIfError(float Value);
  170.                 void ToReturnIfError(ValueIfError Value);
  171.                 CalibrationFactors _TemperatureCalibration;
  172.                 CalibrationFactors _RelHumidityCalibration;
  173.                
  174.                 /*
  175.                         *         Factors for poly for calculating absolute humidity (in Torr):
  176.                         *        P = (RelativeHumidity /100%) * sum(_AbsHumPoly[i]*T^i)
  177.                         *        where P is absolute humidity (Torr/mm Hg),
  178.                         *        T is Temperature(Kelvins degree) / 1000,
  179.                         *         ^ means power.
  180.                         *        For more data, check the NIST chemistry webbook:
  181.                         *        http://webbook.nist.gov/cgi/cbook.cgi?ID=C7732185&Units=SI&Mask=4&Type=ANTOINE&Plot=on#ANTOINE
  182.                 */
  183.                 float _AbsHumPoly[6] ={-157.004, 3158.0474, -25482.532, 103180.197, -209805.497, 171539.883};
  184.                
  185.                 enum Errors
  186.                 {
  187.                         noError                 = 0,
  188.                         Timeout                 = 1,
  189.                         DataCorrupted         = 2,
  190.                         WrongAddress        = 3,
  191.                         //I2C errors
  192.                         TooMuchData         = 4,
  193.                         AddressNACK         = 5,
  194.                         DataNACK                 = 6,
  195.                         OtherI2CError         = 7,
  196.                         UnexpectedError = 8
  197.                 } _Error;
  198.                 void I2CError(uint8_t I2Canswer);
  199.                
  200.         };
  201. #endif //SHT3x_h
复制代码


arduino编译程序:
  1. /*
  2. *SHT30 通过I2C接口测量温湿度,ESP8266的D1与SHT30的SCL相连、D2与SDA相连
  3. */
  4. #define BLINKER_WIFI
  5. #define BLINKER_ESP_SMARTCONFIG    //Smartconfig手机配网用这段,代码写入注释这一条
  6. #define BLINKER_WITHOUT_SSL //非SSL加密通信接入,省堆栈
  7. #define BLINKER_MIOT_SENSOR

  8. #include <Blinker.h>
  9. #include <SHT3x.h>
  10. SHT3x Sensor;  //默认传感器类型为SHT30

  11. char auth[] = "Blinker APP key";  //blinker账户生产的密码,小爱同学必须选用阿里云
  12. //代码配网用下面这两段
  13. //char ssid[] = "WIFI ssid";   //WiFi账号
  14. //char pswd[] = "WiFi pswd";   //WiFi密码

  15. //定义blinker软件内数据组件键名分别为:humi、temp
  16. BlinkerNumber HUMI("humi");
  17. BlinkerNumber TEMP("temp");


  18. float humi_read, temp_read;

  19. //小米小爱状态回调函数
  20. void miotQuery(int32_t queryCode)
  21. {
  22.     BLINKER_LOG("MIOT Query codes: ", queryCode);
  23.     int hVal = humi_read;    //多次测试湿度须为整数型

  24.     switch (queryCode)
  25.     {
  26.       case BLINKER_CMD_QUERY_ALL_NUMBER :
  27.            BLINKER_LOG("MIOT Query All");
  28.            BlinkerMIOT.temp(temp_read);
  29.            BlinkerMIOT.humi(hVal);
  30.            BlinkerMIOT.print();
  31.            break;

  32.       default :
  33.            BlinkerMIOT.temp(100);
  34.            BlinkerMIOT.humi(100);
  35.            BlinkerMIOT.print();
  36.            break;
  37.     }
  38. }

  39. void heartbeat()
  40. {
  41.     TEMP.print(temp_read);
  42.     HUMI.print(humi_read);
  43. }

  44. void dataStorage()
  45. {
  46. Blinker.dataStorage("temp", temp_read);
  47. Blinker.dataStorage("humi", humi_read);
  48. }
  49. void setup()
  50. {
  51.     //调试程序
  52.     Serial.begin(115200);
  53.     BLINKER_DEBUG.stream(Serial);

  54.     Sensor.Begin();   //初始化温湿度传感器

  55.     pinMode(LED_BUILTIN, OUTPUT);
  56.     digitalWrite(LED_BUILTIN, LOW);

  57.     Blinker.begin(auth);              //手机配网用这段
  58.     //Blinker.begin(auth, ssid, pswd); //代码配网用这段
  59.     Blinker.attachHeartbeat(heartbeat);
  60.     Blinker.attachDataStorage(dataStorage);

  61.     //注册小爱同学状态回调函数
  62.     BlinkerMIOT.attachQuery(miotQuery);
  63. }

  64. void loop()
  65. {
  66.     Blinker.run();
  67.     Sensor.UpdateData();  //更新传感器数据
  68.     temp_read = Sensor.GetTemperature();  //读取温度
  69.     humi_read = Sensor.GetRelHumidity();

  70.     //调试窗口输出
  71.     if (isnan(temp_read) || isnan(humi_read))
  72.     {
  73.       BLINKER_LOG("Failed to read from SHT sensor!");
  74.     }else
  75.     {
  76.       BLINKER_LOG("Humidity: ", humi_read, " %");
  77.       BLINKER_LOG("Temperature: ", temp_read, " °C");
  78.     }
  79.     Blinker.delay(1000);

  80. }
复制代码


app界面

app界面
发表于 2021-12-16 15:50 | 显示全部楼层
怎样设置头文件在libraries
发表于 2022-1-2 14:17 | 显示全部楼层
应该怎么训练小爱呢
发表于 2022-1-20 21:01 | 显示全部楼层
只有sht3x.h是没用的,必须有sht3x.cpp, 不然也不能正常显示
发表于 2022-2-15 13:29 | 显示全部楼层
为啥我的编译不过去
发表于 2022-2-15 13:29 | 显示全部楼层
bird_144 发表于 2022-1-20 21:01
只有sht3x.h是没用的,必须有sht3x.cpp, 不然也不能正常显示

我的为啥编译失败,库也加了
发表于 2022-3-7 10:31 | 显示全部楼层
cwm157454311 发表于 2022-2-15 13:29
我的为啥编译失败,库也加了

换成别的SHT3X的头文件吧,比如<adafruit sht31.h>
发表于 2022-8-16 13:41 | 显示全部楼层
cwm157454311 发表于 2022-2-15 13:29
我的为啥编译失败,库也加了

重新换一个低版本的ARDUINO iDE试一试
发表于 2022-8-16 13:44 | 显示全部楼层
cwm157454311 发表于 2022-2-15 13:29
我的为啥编译失败,库也加了

我刚开始用“sht3x.h”也不行,后来换了一个"adafruit sht30.h",成功了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:54 , Processed in 0.082659 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表