ESP8266采集HC-SR501人体红外感应模块接入ThingsPanel
发布日期:
这个教程的目的是通过ESP8266开发板接入HC-SR501人体红外传感器并实现,监测现场是否有人/无人。
HC-SR501人体红外传感器是基于红外线技术的自动控制模块,采用LH1788探头设计,灵敏度高,可靠性强,低电压工作模式,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品。
需要准备
● ESP8266开发板
● HC-SR50人体红外传感器
接线
- 电源接5V
- GND接GND
- 中间的数据线接IO14(参考图片)
- 将USB接入到电脑
在ThingsPanel创建设备
创建设备时,记下MQTTUser,并粘贴到代码中。
刷写代码
使用的是Arduino IDE,可自行搜索下载。
在设置里【附加板卡管理网址】中添加8266
选择开发板,确保刷写到正确的板子上,当然错误了你也刷写不进去,如果你只有一块板子,那很好选择。
然后安装库:
● pubsubclient
● ArduinoJson
ESP-12F 开发板代码
如下三个信息要改成自己的:
- const char* ssid = "Redmi";
- const char* password = "123456789";
- const char* mqttUser = "ec9b554f-9ffa-4c69-3f09-6f7517a15935";
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// WiFi设置
const char* ssid = "Redmi";
const char* password = "123456789";
// MQTT服务器设置
const char* mqttServer = "dev.thingspanel.cn";
const int mqttPort = 1883;
const char* mqttUser = "ec9b554f-9ffa-4c69-3f09-6f7517a15935";
const char* mqttPassword = ""; // 密码为空
const char* mqtt_topic = "device/attributes"; // MQTT主题
// HC-SR501连接的GPIO
const int pirPin = 14; // IO14 对应于 ESP-12F 的 P2
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
pinMode(pirPin, INPUT);
// 连接WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// 设置MQTT服务器并连接
client.setServer(mqttServer, mqttPort);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP8266Client", mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT");
} else {
delay(5000);
}
}
}
void loop() {
// 检查WiFi和MQTT连接状态
if (WiFi.status() != WL_CONNECTED) {
reconnectWiFi();
}
if (!client.connected()) {
reconnectMQTT();
}
client.loop(); // 处理MQTT的incoming messages
int pirState = digitalRead(pirPin);
if (pirState == HIGH) {
Serial.println("Motion detected!");
sendMQTTMessage(1);
} else {
Serial.println("No motion detected.");
sendMQTTMessage(0);
}
delay(1000); // 检查间隔,可以根据需要调整
}
void reconnectWiFi() {
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Reconnecting to WiFi...");
WiFi.begin(ssid, password);
delay(5000);
}
Serial.println("Connected to WiFi");
}
void reconnectMQTT() {
while (!client.connected()) {
Serial.println("Reconnecting to MQTT...");
if (client.connect("ESP8266Client", mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT");
} else {
delay(5000);
}
}
}
void sendMQTTMessage(int motionStatus) {
StaticJsonDocument<100> doc;
doc["Motiondetect"] = motionStatus;
char jsonBuffer[100];
serializeJson(doc, jsonBuffer);
// 打印发送的JSON报文到串口监视器
Serial.print("Sending MQTT message: ");
Serial.println(jsonBuffer);
client.publish(mqtt_topic, jsonBuffer);
}
刷写完程序之后,打开串口监视器,皆可看到输出:
在ThingsPanel上查看监控: