CC2530/ESP32+传感器+ZigBee+MQTT+MYSQL+Springboot+Vue+Echarts的老人卫生间防摔倒自动报警系统

写在前言

这是第一次发布也是我第一次制作一个软硬件结合的小系统。分为两个版本,一种是使用esp32作为开发板,使用红外、触控、温湿度、蜂鸣器等作为传感器获取数据。通过MQTT将数据发送,使用python接收并保存到mysql数据库中,后端使用Springboot,前端使用vue结合echarts制作了一个可视化大屏。另一个版本使用CC2530作为开发板,使用激光测距传感器、红外传感器、温湿度传感器、光敏传感器等获取数据,并使用zigbee协议进行组网,将整个感知层分为4个节点和一个协调器,个节点负责采集数据,使用zigbee将数据传送到协调器,协调器通过esp8266使用mqtt将数据发送出去。后面数据获取、保存、前后端展示和esp32模块相同。下文分为一代和二代进行讲解。内容很长,希望你能看完。

运行效果展示

废话不多说,先看运行效果。演示视频录得有点草率,请多包涵,将就着看。
演示视频

一代版本

一代版本使用了3个ESP32开发板,分别获取卫生间、马桶和淋浴的信息。整体架构图如下:
系统架构图

ESP32+MQTT读取红外传感器

首先使用红外传感器判断老人是否使用卫生间。引脚连接图如下:
在这里插入图片描述

代码如下:

#include <WiFi.h>
#include <PubSubClient.h>
// WiFi名及密码
const char* ssid = ""; //WiFi名
const char* password = ""; //WiFi密码
const char* mqtt_server = "broker.emqx.io"; //mqtt服务器ip地址
const int buzzpin = 16; //定义蜂鸣器16号引脚
const int ledpin = 2;//红外引脚
int infrared_value = 0;//红外传感器值
int infrared_hight = 0;//红外高电平
int infrared_low = 0;//红外低电平
int flag = 0;
boolean infrared_flag = false;//红外检测卫生间使用状态false表示无人、true表示有人

char attributes[1000];
#define LED_BUILTIN 13 //灯 13引脚

WiFiClient espClient; // 定义wifiClient实例
PubSubClient client(espClient); // 定义PubSubClient的实例

void setup_wifi() {
    //初始化WiFi
  delay(10);  // 板子通电后要启动,稍微等待一下让板子点亮
  Serial.println();  // 准备连接WiFi
  Serial.print("连接: ");
  Serial.println(ssid);  //输出连接WiFi名

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
   
    delay(500);
    Serial.print(".");
  }
  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi连接成功!");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
   
  Serial.print("消息来自: [");
  Serial.print(topic); // 打印主题信息
  Serial.print("] 主题,内容:");
  char str[100];
  for (int i = 0; i < length; i++) {
   
    Serial.print((char)payload[i]);  // 打印主题内容
    str[i] = (char)payload[i];
  }
  Serial.println();

  if (strcmp(topic, "light_linfeng") == 0) {
    //判读信息来源主题
    if (strcmp(str, "开灯") == 0) {
    //判断命令
      digitalWrite(LED_BUILTIN, HIGH);   // 开灯
    } else if (strcmp(str, "关灯") == 0) {
   
      digitalWrite(LED_BUILTIN, LOW);   // 关灯
    }
  } else if (strcmp(topic, "alarm_linfeng") == 0) {
    //判读信息来源主题
    if (strcmp(str, "开始") == 0) {
   
      digitalWrite(buzzpin, HIGH); // 开始报警
    } else if (strcmp(str, "关闭") == 0) {
   
      digitalWrite(buzzpin, LOW); // 关闭报警
    }
  }
}

void reconnect() {
   
  while (!client.connected()) {
    // 保持连接mqtt
    Serial.print("尝试MQTT连接…");
    String clientId = "ESP8266Client-";    // 创建随机的客户端ID
    clientId += String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
       // 尝试连接
      Serial.println("连接成功!");
      client.subscribe("linfeng_data"); //订阅消息
      client.subscribe
  • 22
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值