DIY无线传感器集线器

2025-04-21

在这个项目中,我们设计了一个无线传感器集线器,利用ESP32和Arduino通过NRF24L01收发器连接。

DIY无线传感器集线器 (https://ic.work/) 工控技术 第1张

您可以从JLCMC获得所有组件。

特性和功能

ESP32中心:

•菜单配置与按钮:选择传感器节点,切换警报模式,查看系统状态,设置开关定时器。

•开关控制:通过物理开关拨动连接的继电器/灯/电器。

•OLED UI:实时显示传感器数据和系统状态。

•NRF24通信:无线接收来自多个节点的传感器告警。

DIY无线传感器集线器 (https://ic.work/) 工控技术 第2张

Arduino(ATMEGA328P) -实时监控

Arduino板作为专用警报节点,负责监控关键的安全和自动化组件:

•门传感器:使用簧片开关检测打开/关闭状态,以监控未经授权的访问或进入。

•气体泄漏传感器:使用mq系列传感器连续检查气体泄漏(例如,LPG,甲烷)。

•自动门铃:检测存在使用PIR或按钮按下,触发门铃警报。

•LED指示灯:根据触发的传感器(例如,门,气体,运动)点亮四个LED。

•蜂鸣器警报:当任何传感器检测到故障或存在时,一个响亮的蜂鸣器会激活。

该节点将所有警报无线传输到ESP32,实现快速和集中的显示或操作。

DIY无线传感器集线器 (https://ic.work/) 工控技术 第3张

由JLCMC赞助:您的机械零件首选合作伙伴!

介绍JLCMC,值得信赖的JLC家族的最新成员,以市场上最优惠的价格提供高质量的机械零件。凭借JLCPCB建立的卓越传统,JLCMC在这里为您的所有机械需求提供可靠且价格合理的解决方案。

为什么选择JLCMC?

一个值得信赖的名字:JLCMC建立在JLC服务的基础上,JLC是PCB制造和原型设计的全球领导者。他们对质量和客户满意度的承诺体现在他们的机械零件服务中。

无与伦比的价格:忠实于JLC的传统,JLCMC以行业领先的价格提供机械零件,确保您的项目在不影响质量的情况下保持预算。

广泛的产品范围:从精密工程组件到定制解决方案,JLCMC拥有将您的想法变为现实所需的一切,无论您是业余爱好者还是专业人士。

全球信任:JLC的服务赢得了全球数百万制造商的信任。有了JLCMC,你就有了同样的可靠性,现在是在机械部件领域。

代码


#include


#include


#include


#define CE 9


#define CSN 10


#define BUZZER A0


#define DOOR_STATUS_LED 8


RF24 radio(CE, CSN); // CE, CSN


const byte address[6] = "10001";


// Define data structure


struct data {


uint8_t nodeId;


uint8_t nodeState;


uint8_t doorState;


};


unsigned long previousMillis = 0;


bool buzzerState = false;


// bool wasDisconnected = false; // Flag to track disconnection state


void setup() {


Serial.begin(115200);


Serial.println("\nInitializing...");


pinMode(DOOR_STATUS_LED, OUTPUT);


pinMode(BUZZER, OUTPUT);


NRF24_Init();


}


void loop() {


if (radio.available()) {


struct data receiveData;


radio.read(&receiveData, sizeof(receiveData));


Serial.print("ID: ");


Serial.print(receiveData.nodeId);


Serial.print(", Status: ");


Serial.print(receiveData.nodeState);


Serial.print(", Door: ");


Serial.println(receiveData.doorState);


digitalWrite(DOOR_STATUS_LED, receiveData.doorState);


// digitalWrite(BUZZER, receiveData.doorState == 1 ? HIGH : LOW);


buzzer(receiveData.doorState, 100);


}


}


void NRF24_Init() {


if (!radio.begin()) {


Serial.println("❌ NRF24L01 Initialization Failed!");


return;


}


radio.openReadingPipe(1, address);


radio.setPALevel(RF24_PA_MIN);


radio.startListening();


Serial.println("✅ NRF24L01 Initialized Successfully!");


}


void buzzer(int signal, int delayTime) {


if (signal == 1) {


if (millis() - previousMillis >= delayTime) {


previousMillis = millis();


buzzerState = !buzzerState;


digitalWrite(BUZZER, buzzerState);


}


} else {


digitalWrite(BUZZER, LOW);


}


}


本文编译自hackster.io

文章推荐

相关推荐