ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MQTT协议的智能灯控

2021-06-26 13:33:16  阅读:299  来源: 互联网

标签:LED Arduino 灯控 WiFi mqtt 智能 MQTT client Serial


一、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 initial
    pinMode(LED, OUTPUT);
    digitalWrite(LED, HIGH);
    // connecting to a WiFi network
    WiFi.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 broker
    client.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 subscribe
    client.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 on
    if (message == "off") { digitalWrite(LED, HIGH); } // LED off
    Serial.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灯熄灭。

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

标签:LED,Arduino,灯控,WiFi,mqtt,智能,MQTT,client,Serial
来源: https://blog.csdn.net/SumubeiFZ/article/details/118243601

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有