使用Arduino做一个座位检测器

前段时间买了一个超便宜的Wemos D1 Mini开发板,浅浅做一个座位传感器吧。

步骤 1:准备硬件

  • ESP8266开发板(如NodeMCU或Wemos D1 Mini)
  • 红外传感器模块(如GP2Y0A21YK0F)
  • USB线

步骤 2:安装软件和库

  1. 下载并安装Arduino IDE(https://www.arduino.cc/en/software)。

  2. 在Arduino IDE中,打开 文件 -> 首选项,在”附加开发板管理器URL”中添加:

    https://arduino.esp8266.com/stable/package_esp8266com_index.json

  3. 进入 工具 -> 开发板 -> 开发板管理器,安装 “esp8266 by ESP8266 Community”。

  4. 在  -> 管理库 中,安装以下库:

    • ESP8266WiFi
    • PubSubClient

步骤 3:编写代码

将以下代码复制到Arduino IDE中,并根据实际情况修改以下变量:

  • ssid:你的Wi-Fi网络名称
  • password:Wi-Fi网络密码
  • mqttServer:你的MQTT服务器地址
  • client_ID:你的MQTT客户端ID
  • mqttUserName 和 mqttPassword:MQTT服务器的用户名和密码(如果需要)

cpp

#include <ESP8266WiFi.h>

#include <PubSubClient.h>



const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASSWORD";

const char* mqttServer = "YOUR_MQTT_SERVER_IP";



WiFiClient wifiClient;

PubSubClient mqttClient(wifiClient);



const char* client_ID = "YOUR_CLIENT_ID";  

const char* mqttUserName = "YOUR_MQTT_USERNAME";

const char* mqttPassword = "YOUR_MQTT_PASSWORD";  



char dataTemplate[] = "{\"座位状态\": %.2f}";

char attrData[] = "{\"deviceName\": \"座位传感器\"}";

char postData[50];



char topic[] = "v1/devices/me/telemetry";  

char attrTopic[] = "v1/devices/me/attributes";



#define IRpin D7



float state;



void reconnect() {

  while (!mqttClient.connected()) {

    if (mqttClient.connect(client_ID, mqttUserName, mqttPassword)) {

      mqttClient.subscribe(attrTopic, 0);

      mqttClient.publish(attrTopic, attrData, strlen(attrData));

      break;

    }

    delay(1000);

  }

}



void setup() {

  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(115200);



  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {}



  mqttClient.setServer(mqttServer, 1883);

  reconnect();

}



void loop() {

  if (!mqttClient.connected()) {

    reconnect();

  }



  mqttClient.loop();



  long now = millis();

  if (now - lastMsg > 1000) {

    state = digitalRead(IRpin);

    snprintf(postData, 50, dataTemplate, state);

    mqttClient.publish(topic, postData, strlen(postData));

    lastMsg = now;

  }

}

步骤 4:连接红外传感器

连接红外传感器的输出引脚到ESP8266的D7(GPIO13)引脚。

步骤 5:上传代码

  1. 使用USB线连接ESP8266到电脑。
  2. 在Arduino IDE中选择正确的开发板型号和端口。
  3. 点击 上传 按钮将代码上传到ESP8266。

步骤 6:测试与监控

  1. 通过串行监视器(工具 -> 串口监视器)查看连接和数据发布状态。
  2. 将物体靠近或远离红外传感器,观察座位状态数据是否正确发送到MQTT服务器。

步骤 7:配置MQTT服务器

确保你的MQTT服务器已配置好订阅 "v1/devices/me/telemetry" 主题以接收数据,并设置相应的设备属性和响应主题。

现在你已经创建了一个简单的座位状态监测系统,可以通过MQTT协议将数据发送到云端进行进一步处理和分析。