轻松构建联网温湿度传感器
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
为了监测主房间或婴儿房的温度,您可以轻松创建和开发自己的联网温度传感器。
我们将按照以下步骤创建一个联网温度传感器。为此,我们将使用 ESP8266 微控制器和两个扩展板。ESP8266
是一款类似于 Arduino 的微控制器,但它集成了 Wi-Fi 模块。
扩展板是一种可以添加到主板上以扩展其功能的电路板。扩展板的优势在于设置和使用极其简便。
目前,ESP8266 D1 Mini 已有 20 款扩展板可供选择。
因此,我们只需将扩展板相互连接,编写少量代码,即可轻松创建各种物联网项目。
本项目中使用的物品
- 一款基于 ESP8266 的 Wemos D1 mini。它是主要的迷你 Wi-Fi 开发板。
- SHT30扩展板,它是一个温湿度传感器模块。我建议你选择V2版本,因为它精度更高,而且不受ESP8266发热的影响。本文中,我将使用该模块的V1版本。
- OLED显示屏扩展板。它是一个可以显示温度的屏幕。
要求
- 最新版本的Arduino IDE
- 添加 ESP8266 开发板:在板载管理器中安装 ESP8266时,添加此 URL: https://arduino.esp8266.com/stable/package_esp8266com_index.json
Arduino/Preferences/Additional Boards Manager URLsTools/Board/Board Manager - 添加以下库
Tools/Manage Libraries:Adafruit_SHT31Adafruit_SSD1306BlynkSimpleEsp8266
更改配置Tools:
- 木板 :
LOLIN(WEMOS) D1 mini lite - 端口:
/dev/cu.wchusbserial…适用于 Mac - 上传速度:
921600 - 点击
Serial Monitor
步骤 1 - 读取温度值
目前,我们将把 SHT30 扩展板连接到 ESP8266 上。通过以下代码,我们将每四秒钟把房间的温度和湿度数据反馈到控制台。
#include "Adafruit_SHT31.h"
Adafruit_SHT31 sht30 = Adafruit_SHT31();
void setup() {
Serial.begin(9600);
while (!Serial)
delay(10);
// will pause until serial console opens
Serial.println("SHT30 test");
if (! sht30.begin(0x45)) {
Serial.println("Couldn't find SHT30");
while (1) delay(1);
}
}
void loop() {
float t = sht30.readTemperature();
float h = sht30.readHumidity();
if (! isnan(t)) { // check if 'is not a number'
Serial.print("Temp *C = "); Serial.println(t);
} else {
Serial.println("Failed to read temperature");
}
if (! isnan(h)) { // check if 'is not a number'
Serial.print("Hum. % = "); Serial.println(h);
} else {
Serial.println("Failed to read humidity");
}
Serial.println();
delay(4000);
// wait 4 seconds before coming back into the loop
}
通过以下代码,我们将每四秒钟将房间的温度和湿度显示在控制台上。
步骤二:在屏幕上显示消息
让我们把OLED显示扩展板连接到ESP8266上,然后发布一条简单的消息。
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(-1);
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// initialize with the I2C addr 0x3C (for the 64x48)
// set the text size and color
display.setTextSize(2);
display.setTextColor(WHITE);
}
void loop() {
display.setCursor(0,0);
display.println("Hello");
display.display();
delay(1000);
display.clearDisplay();
display.setCursor(0,24);
display.println("World");
display.display();
delay(1000);
display.clearDisplay();
}
我们现在知道如何显示文本以及如何清除屏幕。
步骤 3 - 在屏幕上显示温度
既然温度值可以读取并在屏幕上显示文本,下一步我们将显示温度和湿度值。
#include "Adafruit_SHT31.h"
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(-1);
Adafruit_SHT31 sht30 = Adafruit_SHT31();
void setup() {
Serial.begin(9600);
if (! sht30.begin(0x45)) {
Serial.println("Couldn't find SHT30");
while (1) delay(1);
}
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// initialize with the I2C addr 0x3C (for the 64x48)
// set the text size and color
display.setTextSize(2);
display.setTextColor(WHITE);
display.clearDisplay();
}
void loop() {
float t = sht30.readTemperature();
float h = sht30.readHumidity();
display.setCursor(0,0);
display.sprintf("%.1fC", t);
display.setCursor(0,25);
display.printf("%.0f%%\n", h);
display.display();
delay(5000);
display.clearDisplay();
}
步骤 4 - 连接到 Blynk 应用
拥有温度和湿度数据固然不错,但直接查阅并不方便。因此,我们将把温度传感器连接到互联网,以便将数据上传到云端,并在我们使用 Blynk 构建的应用程序中接收这些数据。
Blynk是一款免费应用程序,适用于像我们这样的小型应用程序。它是最流行的物联网平台,可将您的设备连接到云端,并方便我们设计应用程序。
您可以点击此链接查看如何在应用程序中创建新项目的详细说明。➡️
http://docs.blynk.cc/#getting-started-getting-started-with-the-blynk-app
#define BLYNK_PRINT Serial
#include "Adafruit_SHT31.h"
#include <Adafruit_SSD1306.h>
#include <BlynkSimpleEsp8266.h>
Adafruit_SSD1306 display(-1);
Adafruit_SHT31 sht30 = Adafruit_SHT31();
char auth[] = "BLYNK_API_KEY";
char ssid[] = "WIFI_NAME";
char pass[] = "WIFI_PASSWORD";
void setup() {
Serial.begin(9600);
Serial.println("Starting");
// connect to the WiFi
Blynk.begin(auth, ssid, pass);
if (! sht30.begin(0x45)) {
Serial.println("Couldn't find SHT30");
while (1) delay(1);
}
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(2);
display.setTextColor(WHITE);
display.clearDisplay();
}
void loop() {
// start blynk
Blynk.run();
float t = sht30.readTemperature();
float h = sht30.readHumidity();
display.setCursor(0,0);
display.printf("%.1fC", t);
// send the temp value on the virtual pin 1 (V1)
Blynk.virtualWrite(1, t);
display.setCursor(0,25);
display.printf("%.0f%%\n", h);
// send the humidity value on the virtual pin 2 (V2)
Blynk.virtualWrite(2, h);
display.display();
delay(5000);
display.clearDisplay();
}
现在您可以通过设置如下图中所示的 2 个带标签的值,在 Blynk 上配置您的应用程序。
你可以利用应用程序中提供的模块进行一些有趣的尝试。我用它制作了一个图表,用来表示温度和湿度的值。
恭喜,您已成功制作出联网温度传感器。👏
原文发表于https://henaff.io。
文章来源:https://dev.to/monsieur_riz/easily-build-a-connected-Temperature-and-humidity-sensor-22g5






