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上查看监控:

Github
Gitee
微信交流群
QQ交流群
商务咨询
北京极益科技有限公司 版权所有 ICP:京ICP备15045763号-12