ICode9

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

ESP8266智能灯控

2021-06-26 17:32:44  阅读:179  来源: 互联网

标签:LED ESP8266 灯控 WiFi char 智能 mqtt client Serial


一,MQTT协议

1、MQTT协议可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

2、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用 TCP/IP 提供网络连接。

3、实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。在这里插入图片描述
4、MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)。
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
在这里插入图片描述
二、以ESP8266为例子,利用wifi控制led开关灯

1、下载好arduino与建好开发环境,下载mqttx软件

arduino网盘链接:https://pan.baidu.com/s/17JssunSXxiyJYVaCRy7Mng
提取码:qtzs
mqttx软件链接:https://pan.baidu.com/s/10OlkgaQaYIwpxcIj4abD-w
提取码:qtzs

2、确保灯是正常的:通过上传以下代码,若灯亮起则没问题。

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

3、通过输出on/off来控制灯的开关

(1)上传代码

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// GPIO 5 D1
//#define LED 2
uint8_t LED = 2;
//这里使用 WiFi热点,简便即打开手机热点
const char *ssid = "111"; // Enter your WiFi name(wifi名称)
const char *password = "12345678";  // Enter WiFi password(wifi密码)

// MQTT Broker(连接MQTT代理)
const char *mqtt_broker = "broker.emqx.io";//1.代理名称,与MTQQX中创建的名称相同
const char *topic = "esp8266/led";//2.主题名称,与MTQQX中创建的名称相同
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;//3.与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: ");//表示mqttx与设备订阅
    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

(2)上传后查看窜口监视器显示内容
Connected to the WiFi network :表示wifi连接成功
Public emqx mqtt broker connected :表示成功连接到服务器

(3)打开mqttx软件

首先点击“ + ”号添加网络

内容:name、Client ID任意
Host、Port与以上代码相同(通常已默认)

最后点击connet创建连接

在这里插入图片描述
查看窜口监视器存在“Message arrived in topic :esp8266/led (订阅的主题)”
表示mqttx控制端与服务端(代理/mqttx)订阅成功

(4)创建完成后在消息框发送on/off,则led灯会开/关在这里插入图片描述

标签:LED,ESP8266,灯控,WiFi,char,智能,mqtt,client,Serial
来源: https://blog.csdn.net/m0_57396609/article/details/118250723

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

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

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

ICode9版权所有