一、MQTT协议概述:

MQTT,一种基于发布/订阅(piblish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上。它可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。

该协议中有三种身份:发布者(Pbulish)、代理 / 服务器(Broker)、订阅者(Subscribe)。其中消息的发布者和订阅者都是客户端角色,消息代理是服务器,消息发布者可以同时是订阅者。

二、原理:

实现MTQQ协议需要:客户端和服务器端。

MTQQ传输的消息分为:主题(topic)和负载(payload)两部分。

  • Topic,可以理解为消息的类型,订阅者订阅后,就会受到该主题消息的消息内容。
  • Payload,可以理解为消息的内容,是指订阅者具体要用到的内容。

三、基于Arduino的智能灯控:

1、点灯:

目的:确保灯是否完好。

代码如下:


int relayInput =LED_BUILTIN;     //D4
int led= 4;                      //定义引脚编码void setup(){pinMode(relayInput,OUTPUT);    //初始化引脚,是一个库pinMode(led,OUTPUT);           //设置了引脚的输出模式
}void loop(){digitalWrite(relayInput,LOW);  //不断重复运行
}

若灯亮起,则说明灯没有问题,则继续下一步骤。

2,Arduino中编译上传代码:

智能灯控代码如下:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>//#define LED 4
uint8_t LED = 4;//Arduino连接网络,这里使用WiFi热点
const char *ssid = "123456";            // Enter your WiFi name
const char *password = "123456789...";  // Enter WiFi password//连接MTQQ代理
const char *mqtt_broker = "broker.emqx.io";    //代理名称,与MTQQX中创建的名称相同
const char *topic = "esp8266/led";             //主题名称,与MTQQX中创建的名称相同
const int mqtt_port = 1883;                    //与MTQQX中创建的名称相同//这里三项都使用了MTQQ的默认代理WiFiClient espClient;
PubSubClient client(espClient);void setup() {// Set software serial baud to 115200;Serial.begin(115200);//LED initialpinMode(LED, OUTPUT);digitalWrite(LED, HIGH);// connecting to a WiFi networkWiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.println("Connecting to WiFi..");      //提示连接WiFi中}Serial.println("Connected to the WiFi network"); //提示WiFi网络连接成功//connecting to a mqtt brokerclient.setServer(mqtt_broker, mqtt_port);client.setCallback(callback);while (!client.connected()) {String client_id = "esp8266-client-";client_id += String(WiFi.macAddress());Serial.println("Connecting to public emqx mqtt broker.....");  //提示连接服务器if (client.connect(client_id.c_str())) {Serial.println("Public emqx mqtt broker connected");       //提示连接成功} else {Serial.print("failed with state ");                        //提示连接失败Serial.print(client.state());delay(2000);}}// publish and subscribeclient.publish(topic, "hello emqx");client.subscribe(topic);
}void callback(char *topic, byte *payload, unsigned int length) {Serial.print("Message arrived in topic: ");Serial.println(topic);Serial.print("Message:");String message;               //向代理发送消息for (int i = 0; i < length; i++) {message = message + (char) payload[i];  // convert *byte to string}Serial.print(message);        //判断消息的内容:若为on,则是亮灯;若为off,则是熄灯。      if (message == "on") { digitalWrite(LED, LOW); }   // LED onif (message == "off") { digitalWrite(LED, HIGH); } // LED offSerial.println();Serial.println("-----------------------");
}void loop() {client.loop();

3,Arduino连接WiFi网络

编译上传代码成功后,打开串口查看是否连接WiFi网络成功。

串口如图示:

则说明WiFi网络连接成功。

4,MTQQX中创建连接和连接代理:

下载后打开MTQQX软件后,如图操作:

Client ID、Host和Port需与代码中填写一致。这里使用了默认的代理。

此时表示Arduino成功连接上代理

5,发布消息使Arduino亮灯

在MTQQX的消息框内输入on,并点击发送:

现象:串口收到亮灯消息(如下图),Arduino的灯亮起。

同理在MTQQX消息框中输入off并发送,则可观察到串口收到熄灯消息,Arduino灯熄灭。

以上便是全部内容,感谢阅览。

MQTT协议的智能灯控相关推荐

  1. 蓝牙模块智能灯控应用方案

    当今是信息高速发展的时代,经济.文化的流行与传播都离不开信息.信息的传递直接影响着人们生活的方方面面,信息的传递方式又各有不同,如有线传输.无线传输等:而无线传输还可按协议不同分为:蓝牙.WIFI.z ...

  2. ESP32在阿里云平台使用MQTT协议控制RGB灯

    ESP32在阿里云平台使用MQTT协议控制RGB灯 本章内容是在ESP-IDF的\examples\protocols\mqtt\tcp工程上进行修改,实现ESP32在阿里云平台使用MQTT协议控制R ...

  3. 优联智能灯控系统升级:NB-IoT将引领智慧照明新风潮

    随着5G布局的加快,各行各业积极布局物联网,万物互联时代加速来临,NB-IoT作为一种最新的低功耗窄带广域网通信技术能实现设备的海量连接,正成为物联网领域的一项革新性技术.NB-IoT加速了物联网的引 ...

  4. 智能灯控系统的介绍,它有什么优势

    随着智能家居行业的发展和产品的扩散,相信很多长期关注智能产业,在互联网环境下的积极消费者来说,一定都考虑过如何在现代家居中获得"解放感".而智能照明具有方便.美观.安全.节能的优点 ...

  5. 【毕业设计】基于ZigBee的智能灯控系统 -物联网 单片机 stm32

    文章目录 1 简介 2 系统结构 系统功能 相关器件 Zigbee芯片 CC2530 LED发光二极管 人体红外感应模块 光敏电阻传感器 3 实现效果 5 相关部分代码 6 最后 1 简介 Hi,大家 ...

  6. 智能灯控(基于ZigBee)

    时间:2017年12月 阶段:大二上学期 背景:单片机原理与应用课设 名称:智能灯控 摘要 本系统实现了多方式控灯功能,有按键控灯.串口指令控灯.点对点无线射频控灯.AI模式控灯.其中AI模式控灯是通 ...

  7. 基于单片机的智能灯控系统

    目录 实验四  简易路灯智能控制器 一.项目设计 1. 了解光敏电阻电气特性. 2. 学会在面包板上搭建光敏电阻电路测量环境光强度. 3. 学会使用PCF8591数模转换模块将光敏电阻两端电压转换为数 ...

  8. 【微信小程序控制硬件⑦ 进阶篇】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为心里全栈工程师梦想浇水。

    文章目录 一.前言: 二.涉及的技术点: 三.框架的运行原理: 四.框架代码流程: 4.1 主线程: 4.2 获取设备列表显示设备,以及订阅在线的设备: 4.3 点击某设备如何实现携带此设备信息到控制 ...

  9. 【安信可LoRa模组专题②】快速搭建远程控制灯LoRa智能灯控【51单片机篇】

    本LoRa模组系列博客学习由 安信可科技 - 官方博客 技术分享,如有疑问请留言或联系邮箱. [安信可LoRa模组专题①]安信可LoRa快速入门指南 [安信可LoRa模组专题②]快速搭建远程控制灯Lo ...

最新文章

  1. 回归评估+解释方差分
  2. trigger() --工作中问题nav样式
  3. HTML5 实现手机拍照上传
  4. SRM遇到的一个数论技巧——最大公约数和最小公倍数的关系
  5. 如何让网站建设实际效果比之前更好?
  6. OpenCV 升降维度
  7. 怎么解决线上CPU100%的问题
  8. 推荐系统CTR预估学习路线:引入注意力机制
  9. 《噬血代码》:一款轻度的魂Like游戏
  10. 科学数字_七年级数学上册:科学记数法、有效数字记住这点中考分可定拿得到...
  11. 使用jquery简化ajax开发
  12. unity中静态变量的使用
  13. delphi计算机语言排名,2020年3月TIOBE编程语言排行榜 Java继续蝉联榜首
  14. 细菌觅食算法(Bacteria Foraging Algorithm,BFA)
  15. 怎样在表格中选出同一类_如何让excel表格中的几列数据相同的名称数据排列
  16. Linux系统中如何查找大文件或目录文件夹的方法
  17. 实力悍将联想Z5s发布1398元起售,2019超旗舰Z5 Pro GT 855版惊世降临
  18. css鼠标放上按钮变色
  19. 操作系统理论的探索: (之三)
  20. viterbi算法实例及python实现

热门文章

  1. html调整表格位置上下左右,利用jquery实现在html的表格中使用上下左右键切换单元格,同时只限制单元格输入数字...
  2. 广告电商--------------
  3. 项目整合atomikos数据源
  4. 无损4K对齐实战教程及总结
  5. 西南交通大学计算机网络,西南交通大学计算机网络考试复习(3学分)汇总.docx
  6. 辅警文职计算机类,公安文职和辅警的区别
  7. C#并口热敏小票打印机打印位图
  8. java-入门 static静态类型(自学笔记)(郝斌)
  9. matlab plot多个窗口,Matlab在一个图形窗口里画多个图形的详细教程
  10. NUC980驱动595与165扩展输入输出接口