当前位置:首页 > 技术分享 > 正文内容

MQTT-ESP8266远程控制LED,8266端代码

lmwmm1年前 (2024-12-30)技术分享1000
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// 自己的无线名称
const char* ssid = "XXX";
// 自己的无线密码
const char* password = "XXX";
// mqtt服务器地址,服务器地址
const char* mqttServer = "so.lmwmm.com";

WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

int GPIO = 4;
//8266使用接口

void setup() {
   // 设置串口
   Serial.begin(115200);
   // 设置内置LED引脚为输出模式
   pinMode(GPIO, OUTPUT);
 
   // 连接WiFi
   WiFi.mode(WIFI_STA);
   connectWifi();

   // 设置MQTT服务器和端口号
   mqttClient.setServer(mqttServer, 1883);
   mqttClient.setCallback(receiveCallback);

   // 连接MQTT服务器
   connectMQTTServer();
}

void loop() {
  // 开发板成功连接服务器    
  if (mqttClient.connected()) {
    // 保持客户端心跳
    mqttClient.loop();          
  } else {
    // 尝试连接服务器                  
    connectMQTTServer();    
  }
}

void connectMQTTServer(){
  // 避免与其它ESP8266设备重名 需要修改-----------
  String clientId = "connect_all_esp8266_mqtt_led_client" + WiFi.macAddress();

  // 连接MQTT服务器
  if (mqttClient.connect(clientId.c_str())) { 
    Serial.println("MQTT Connected.");
    // 订阅指定主题
    subscribeTopic();
  } else {
    Serial.print("MQTT Server Connect Failed. Client State:");
    Serial.println(mqttClient.state());
    delay(3000);
  }  
}

// 收到信息
void receiveCallback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message Received [");
  Serial.print(topic);
  Serial.print("] ");
 
  if ((char)payload[0] == '1') {     // 如果收到的信息以“1”为开始
    digitalWrite(GPIO, HIGH);  // 则点亮LED。
    Serial.println("LED ON");
  } else {                          
    digitalWrite(GPIO, LOW); // 否则熄灭LED。
    Serial.println("LED OFF");
  }
}

// 订阅指定主题
void subscribeTopic(){
  // topicString与前端代码中发送topic一致 需要修改---------------
  String topicString = "connect_all_esp8266_mqtt_led_topic";
  char subTopic[topicString.length() + 1];  
  strcpy(subTopic, topicString.c_str());
 
  // 通过串口监视器输出是否成功订阅主题以及订阅的主题名称
  if(mqttClient.subscribe(subTopic)){
    Serial.println("Subscrib Topic:");
    Serial.println(subTopic);
  } else {
    Serial.print("Subscribe Fail...");
  }  
}

// 连接wifi
void connectWifi(){

  WiFi.begin(ssid, password);
 
  // 等待WiFi连接
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected!");  
  Serial.println("");
}


扫描二维码推送至手机访问。

版权声明:本文由点度点度金讯时代-BLOG发布,如需转载请注明出处。

本文链接:https://lmwmm.com/post/4411.html

分享给朋友:

“MQTT-ESP8266远程控制LED,8266端代码” 的相关文章

【树莓派基础系列教程】1、配置和初始化树莓派

【树莓派基础系列教程】1、配置和初始化树莓派

从这周开始,给新手朋友们发布一些树莓派的基础教程~今天是第一课,简单介绍一下什么是树莓派,以及拿到树莓派后第一件要做的事情——配置和初始化树莓派! 什么是树莓派 树莓派的简介,看这里:树莓派是什么?能吃吗 树莓派基础外观图 树莓派外设图树莓…

编辑Hosts文件的方法

编辑Hosts文件的方法

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系…

苹果电脑MacBook使用谷歌浏览器翻译的方法

苹果电脑MacBook使用谷歌浏览器翻译的方法

自从上次写了《解决Chrome浏览器翻译无法使用》,有不少苹果MacBook电脑的用户加我微信,咨询我怎么在MacBook上正常使用谷歌翻译的方法,下面就详细说明一下。谷歌翻译终于退出中国,访问原本谷歌翻译的本地化域名,会提示收藏新的网址,…

【讲座预告】火爆全网的ChatGPT应用实训,人人可学!点击报名!

【讲座预告】火爆全网的ChatGPT应用实训,人人可学!点击报名!

随着以自然语言处理为代表的人工智能的发展,OpenAI公司的最新成果ChatGPT近来“火出圈”。 TA不仅能和任何人“对答如流”,擅长写策划方案和调研报告,还能翻译文章、撰写邮件、创作脚本、编写代码,甚至能通过谷歌L3程序员面试和…

chatGPT解析人生八字 2

chatGPT解析人生八字 2

留言区留下你的出生、性别、地址, 隔天,公式分析你的八字人生全系,每日解析按顺序,编排。 由于都是AI机器人智能回答,大家可以作为参考,务必全信,古话说的好,信而不迷,则人生。 命主姓名:某人,广东省-河源…

ChatGPT访问量再创新高:百度的60%,谷歌的2%

ChatGPT访问量再创新高:百度的60%,谷歌的2%

梦晨 发自 凹非寺量子位 | 公众号 QbitAIChatGPT上月全球访问量 17.6 亿次,已达到谷歌的2%! 根据SimilarWeb统计,已超越必应、鸭鸭走DuckDuckGo等其他国际搜索引擎。 挡在前面的除了谷歌…