在这个项目中,我们设计了一个无线传感器集线器,利用ESP32和Arduino通过NRF24L01收发器连接。
您可以从JLCMC获得所有组件。
特性和功能
ESP32中心:
•菜单配置与按钮:选择传感器节点,切换警报模式,查看系统状态,设置开关定时器。
•开关控制:通过物理开关拨动连接的继电器/灯/电器。
•OLED UI:实时显示传感器数据和系统状态。
•NRF24通信:无线接收来自多个节点的传感器告警。
Arduino(ATMEGA328P) -实时监控
Arduino板作为专用警报节点,负责监控关键的安全和自动化组件:
•门传感器:使用簧片开关检测打开/关闭状态,以监控未经授权的访问或进入。
•气体泄漏传感器:使用mq系列传感器连续检查气体泄漏(例如,LPG,甲烷)。
•自动门铃:检测存在使用PIR或按钮按下,触发门铃警报。
•LED指示灯:根据触发的传感器(例如,门,气体,运动)点亮四个LED。
•蜂鸣器警报:当任何传感器检测到故障或存在时,一个响亮的蜂鸣器会激活。
该节点将所有警报无线传输到ESP32,实现快速和集中的显示或操作。
由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