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

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

lmwmm2年前 (2024-12-30)技术分享1516
#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端代码” 的相关文章

Adobe Photoshop 2020「Ps 2020」破解版

Adobe Photoshop 2020「Ps 2020」破解版

      ps 2020破解版是一款由Adobe公司推出的非常优秀的图像编辑处理工具,ps2020破解版有图像制作、图像扫描、编辑修改、广告创意、图像输入等功能。ps 2020破…

Windows 11 23H2 新增"系统组件"中心

Windows 11 23H2 新增"系统组件"中心

微软正在 Windows 11 23H2 中测试新的"系统组件"页面,这一功能最终也将抵达 22H2。设置"中的"系统组件"页面是一种管理默认应用程序、扩展程序、编解码器和其他被认为与 Wi…

下一代Switch的策略:迭代升级还是开启CQ9电子新时代?

下一代Switch的策略:迭代升级还是开启CQ9电子新时代?

业界预计任天堂下一代Switch将在2024年发布。知名游戏分析CQ9 Gaming猜测该主机不会有大的革新,而是更像是性能的增强,整体上与现有Switch相似。他认为,任天堂依然坚持掌机游戏模式,其中最主要的原因是宝可梦系列对掌机市场的重…

微软Xbox Series S造型烤吐司机,玩转PG美时美刻游戏情怀!

微软Xbox Series S造型烤吐司机,玩转PG美时美刻游戏情怀!

微软在2021推出了备受PG SOFT电子游戏迷瞩目的Xbox Series X造型冰箱,现在他们与美国零售商Walmart合作,推出了Xbox Series S造型烤面包机。这款特殊的烤面包机看起来酷似Xbox Series S游戏主机,…

PG游戏库的热点传言:TH推测PS5 Pro或将在第三季度末震撼发布

PG游戏库的热点传言:TH推测PS5 Pro或将在第三季度末震撼发布

科技产品展会CES 2024即将于1月9日举行,许多期待的PG游戏玩家猜测索尼或许会在此次展会上揭晓PS5的升级版主机。然而,游戏泄露消息的专家Tom Henderson在平台上提出了不同观点,认为索尼可能会打破以往的时间规律,不在CES上…

手机回归BBIN实体按键:专为iPhone设计的电子按键保护壳

手机回归BBIN实体按键:专为iPhone设计的电子按键保护壳

英国新兴企业Clicks即将在2024年CES展会上展示一款专为iPhone用户设计的保护套,满足那些寻求实体按键感需求的BB Games电子游戏玩家。这款配件允许用户在下方的实体按键来输入文内容或玩BB热门游戏。类似的设计在过去曾有过,B…