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

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

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

如何将您的 Raspberry Pi 变成网络监控工具

如何将您的 Raspberry Pi 变成网络监控工具

担心某些连接到您的网络的设备?想知道网络服务器何时离线?你需要一个网络监控工具。虽然有多种解决方案可用,但 Nagios 应该是您的第一个停靠港。尽管该软件的付费版本可用,但 Nagios 为 Raspberry Pi 提供了一个开源网络监…

今天起,重装(安装)系统不求人!

今天起,重装(安装)系统不求人!

你是否经历有过电脑蓝屏、垃圾软件变多的情况?又或者用腻了Win10、用不惯Win11,想重装电脑但又不会操作,售后离得又远也不方便出门……没关系,今天手把手教你搞定它!比如笔者,突然想升级到Win11玩一玩,于是从Win10 LTSC202…

Windows 12发布时间曝光!

Windows 12发布时间曝光!

[摘要]多方消息显示,微软正在准备发布 "突破性 "的以人工智能为中心的新一代Windows版本,内部代号 "Hudson Valley "(哈德逊河谷)。 快科技12月10日消息,多方消息显示,微…

游戏偏好揭晓:各国PS玩家爱玩哪些PG热门游戏?

游戏偏好揭晓:各国PS玩家爱玩哪些PG热门游戏?

在2023年,各国的PS主机玩家们最喜欢玩哪些PG SOFT电子游戏呢?Sony PlayStation官方特别设计了一张精美的世界地图,展示了在23国的PS玩家整年中最热衷游玩的前三名游戏。这个PG游戏库榜单揭晓了各国玩家对游戏类型的偏好…

《瘟疫传说:无罪》现已登陆Epic Games Store,尽情畅玩BB电子游戏精彩体验

《瘟疫传说:无罪》现已登陆Epic Games Store,尽情畅玩BB电子游戏精彩体验

Asobo Studio与Focus Home Interactive合作推出的《瘟疫传说:无罪》(A Plague Tale: Innocence)是一部于2019年问世的精彩电子游戏。游戏以14世纪法国黑死病的背景为舞台,讲述了年轻的艾…

苹果新品震撼登场:PG游戏库最期待的5款产品揭晓,iPhone 16跌至第四!

苹果新品震撼登场:PG游戏库最期待的5款产品揭晓,iPhone 16跌至第四!

2024年苹果市场预期将推出一系列令人期待的新品,为PG游戏库用户带来更多元化的体验。其中,备受瞩目的首款头戴式装置Vision Pro被视为迈向空间运算的里程碑产品,被外媒誉为苹果迎来的划时代明星,预计将在今年初首次登陆美国市场。这款头戴…