用自己的mqtt服务器实现家居控制和监测

博主搭建了自己的MQTT服务器,并利用Node-RED实现了家居数据的可视化采集和设备控制。此外,还开发了手机APP进行远程操作,逐步将家居设备接入,目标是打造全家居智能化。虽然过程漫长,但已取得初步成果。

设备接入mqtt服务器,实现红外遥控器设计和数据监测

这一章在前面的onenet接入mqtt上加以改进,利用我闲置的服务器做了一个自己的mqtt服务器,彻底抛弃onenet服务器,并在我的服务器上搭建了node-red,支持在线可视化编程,实现家居数据采集的可视化和设备控制,同时开发手机端app同步数据。代码就不贴了太多了,直接演示效果吧!

搭建自己得mqtt服务器 实现家中设备控制和监测

视频忘记录app操控了。。。

下面贴一下app界面,至于操作和电脑端一致,只是方便了许多。

在这里插入图片描述
点击电视机进入遥控器界面
在这里插入图片描述
这是通过emq搭建的mqtt服务器界面和物联网监测控制界面

使用MQTT协议实现远程控制监测可从以下几个方面着手: ### 智能家居领域 在智能家居设备远程控制与状态监测中,MQTT协议RESTful API相互结合。MQTT协议用于设备间的通信,实现数据的实时传输订阅;RESTful API用于设备管理与控制实现设备的配置、控制监控 [^1]。 ### 智慧农业领域 - **设备连接与通信**:通过使用WiFi模块(如ESP8266)连接Arduino到互联网,借助MQTT(Message Queuing Telemetry Transport)协议进行通信,可实现可靠的消息传递订阅/发布模式,以达成远程控制实时数据传输。用户能通过手机应用程序或Web界面发送控制指令,无需直接接触Arduino设备即可进行远程操作 [^2]。 - **实时反馈**:Arduino可利用MQTT协议将灌溉系统的状态信息、传感器数据等实时反馈给用户端,方便用户随时监测控制灌溉系统的运行状态 [^2]。 ### 灯光控制领域 - **程序设置**:程序实现了通过MQTT协议远程控制灯光的功能。在`setup()`函数中,通过`pinMode()`函数将灯光引脚设置为输出模式;使用WiFi库连接到无线网络,并检查WiFi连接状态;使用PubSubClient库设置MQTT客户端,设置MQTT服务器的地址端口,并设置回调函数`callback()` [^4]。 - **消息处理**:在`loop()`函数中,通过`mqttClient.loop()`函数处理MQTT消息。当接收到MQTT消息时,回调函数`callback()`将触发。若接收到的消息是"ON",则将灯光引脚设置为高电平;若接收到的消息是"OFF",则将灯光引脚设置为低电平,从而实现灯光的控制。同时,通过`reconnect()`函数实现MQTT客户端的连接与重连,并在连接成功后订阅指定的主题 [^4]。 ### 单片机领域 在ESP8266MOD(ESP12F)以及STM32 MCU上实现MQTT协议(分别使用了pubsubclientpaho - mqtt库),统一传感器数据上传接口,在单片机上实现简易终端,可通过mqtt下发指令完成复杂功能 [^5]。 ### 代示例(以灯光控制为例) ```cpp #include <WiFi.h> #include <PubSubClient.h> // WiFiMQTT服务器信息 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqttServer = "your_MQTT_SERVER"; const int mqttPort = 1883; // 灯光引脚 const int ledPin = 2; WiFiClient espClient; PubSubClient mqttClient(espClient); // 回调函数 void callback(char* topic, byte* payload, unsigned int length) { String message; for (int i = 0; i < length; i++) { message += (char)payload[i]; } if (message == "ON") { digitalWrite(ledPin, HIGH); } else if (message == "OFF") { digitalWrite(ledPin, LOW); } } // 重连函数 void reconnect() { while (!mqttClient.connected()) { if (mqttClient.connect("ESP8266Client")) { mqttClient.subscribe("ledControl"); } else { delay(5000); } } } void setup() { pinMode(ledPin, OUTPUT); Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); } mqttClient.setServer(mqttServer, mqttPort); mqttClient.setCallback(callback); } void loop() { if (!mqttClient.connected()) { reconnect(); } mqttClient.loop(); } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值