风筝
发表于: 2020-2-28 12:27:16 | 显示全部楼层

温湿度传感器有各种各样的型号,例如DHT11和HTU21D。但是,由于精度和灵敏度等参数,它们都不适合工业级温度和湿度监测。它们的准确性和灵敏度均较差。因此,本文中我们将使用SHT31温度/湿度传感器。它们是您可以获得的最好和最高精度的器件。采用I2C接口的数字传感器,可轻松读取湿度和温度。 SHT31传感器在大多数情况下具有出色的±2%相对湿度和±0.3°C温度精度。


在本篇文章中,我们将把SHT31温度/湿度传感器连接到Nodemcu ESP8266开发板,然后将数据发送到Thingspeak服务器。 ThingSpeak是一个开源的物联网应用程序,通过提供的API,用户通过网络使用HTTP和MQTT协议从物联网存储和检索数据。


所需的组件

●    Nodemcu ESP8266开发板

●    SHT31传感器

●    Micro-USB数据线

●    连接导线。


SHT31湿度温度传感器

SHT31是Sensirion的下一代温度和湿度传感器。与之前的产品相比,SHT31具有更高的智能性、可靠性和改进的精度指标。它的功能包括增强的信号处理、温度和湿度,可以使用I2C通信读取。以下这款I2C迷你模块使用标准化的传感器封装可以轻松读取温度和湿度。插入接口模块,以便从世界任何地方访问云。

SHT31-Sensor.jpg


所有I2C迷你模块均设计为在5V DC下工作。使用方便的4针排针,可以将器件以菊花链方式连接到I2C总线,从而无需焊接。只需将下一个自动化应用程序所需的设备连接在一起。


SHT31与Nodemcu ESP8266连接的原理图

以下是将SHT31湿度温度传感器与Nodemcu ESP8266连接的示意图。

circuit.jpg


将SHT31的VCC引脚连接到ESP8266的3.3V,并将GND连接到GND。如上图所示,将SHT31的SCL和SDA引脚分别连接到ESP38266的SCL(D1)和SDA(D2)引脚。

Nodemcu-SHT31.jpg


设置Thingspeak

1.  转到网页https://thingspeak.com/,如果没有账户,请新建一个帐户并登陆。


2.  单击创建按钮创建一个新频道。输入频道的基本详细信息,例如字段1和字段2。然后向下滚动并保存频道。


3.  然后转到API密钥,然后将此密钥复制并粘贴到单独的记事本文件中。稍后在编程时将需要它。


源代码

下面给出了SHT31与NodeMCU ESP8266连接的源代码。您可以复制该代码并将其上传到ESP8266开发板。但是在此之前,您需要SHT31 Sensor的库。因此,请从下面的链接下载库。

●    下载SHT31库

  1. #include <ESP8266WiFi.h>
  2. #include <Arduino.h>
  3. #include <Wire.h>
  4. #include "Adafruit_SHT31.h"

  5. String apiKey = "PW3AKTNO270BFQGT";    // Enter your Write API key from ThingSpeak
  6. const char *ssid = "BYNARK";          // replace with your wifi ssid and wpa2 key
  7. const char *pass = "bynark@123";
  8. const char* server = "api.thingspeak.com";
  9. WiFiClient client;

  10. Adafruit_SHT31 sht31 = Adafruit_SHT31();

  11. void setup()
  12. {
  13. Serial.begin(115200);

  14.   while (!Serial)
  15.   delay(10);             // will pause Zero, Leonardo, etc until serial console opens

  16. Serial.println("Connecting to ");
  17. Serial.println(ssid);
  18. WiFi.begin(ssid, pass);
  19. while (WiFi.status() != WL_CONNECTED)
  20. {
  21.   delay(500);
  22.   Serial.print(".");
  23. }
  24.   Serial.println("");
  25.   Serial.println("WiFi connected");

  26. Serial.println("SHT31 test");
  27. if (! sht31.begin(0x44))        // Set to 0x45 for alternate i2c addr
  28. {
  29. Serial.println("Couldn't find SHT31");
  30. while (1) delay(1);
  31. }
  32. }

  33. void loop()
  34. {
  35.   float t = sht31.readTemperature();
  36.   float h = sht31.readHumidity();


  37. if (client.connect(server,80))   //   "184.106.153.149" or api.thingspeak.com
  38.       {  
  39.        String sendData = apiKey+"&field1="+String(t)+"&field2="+String(h)+"\r\n\r\n";
  40.       
  41.        //Serial.println(sendData);

  42.        client.print("POST /update HTTP/1.1\n");
  43.        client.print("Host: api.thingspeak.com\n");
  44.        client.print("Connection: close\n");
  45.        client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
  46.        client.print("Content-Type: application/x-www-form-urlencoded\n");
  47.        client.print("Content-Length: ");
  48.        client.print(sendData.length());
  49.        client.print("\n\n");
  50.        client.print(sendData);
  51.       }

  52. if (! isnan(t))      // check if 'is not a number'
  53. {
  54. Serial.print("Temp *C = ");
  55. Serial.println(t);

  56. }
  57. else
  58. {
  59. Serial.println("Failed to read temperature");
  60. }

  61. if (! isnan(h))      // check if 'is not a number'
  62. {
  63. Serial.print("Hum. % = ");
  64. Serial.println(h);

  65. }
  66. else
  67. {
  68. Serial.println("Failed to read humidity");
  69. }
  70. Serial.println();
  71. delay(1000);
  72. }
复制代码

在Thingspeak上监视数据

上传后,打开串口监视器,设置波特率为115200。按下ESP8266的复位按钮。 wifi连接状态应与湿度和温度值一起打印在串口监视器中。

serial-monitor.png

现在,您可以转到Thingspeak网页在线检查数据。 15秒间隔后,数据将更新到Thingspeak服务器。

SHT31-Thingspeak.jpg


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 10:01 , Processed in 0.057274 second(s), 10 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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