ESP8266连接MQTT服务器并实现点灯操作

因为工创Ⅲ的缘故不得不重新学习原来大一所学的ESP8266和MQTT服务器相关的知识,但是本人记性实在是非常的差,为了重新学习又在网上搜集了很久的知识,这里为了防止以后出现类似的情况,这里就写一篇博客记录一下。

1|0前置准备

我们首先需要在windows自带的商店中装上ubuntu虚拟机(用于配置服务器)和MQTTBox软件(用于测试服务器)。Ubuntu有很多种类型,具体选择的型号选择下图所示的这一种:

Ubuntu下载好了之后,进去进行基础配置。(密码因为奇怪的原因输入的时候不会显示,大家记住自己的密码输的是什么就好!)

然后下面进行的就是在Ubuntu上安装其配置EMQX服务器的操作,具体操作可以去看:

官方文档

配置好了以后,一般只需要记住以下三条常用指令:

启动emqx服务器

sudo emqx start

关闭emqx服务器

sudo emqx stop

在浏览器输入localhost:18083即可访问服务器的Dashboard,密码为默认密码。

2|0测试

打开emqx服务器后测试需要使用mqttbox,打开mqttbox,点击上方Create MQTT Client

protocol选择mqtt/tcp,Host填入服务器所在Ipv4地址,可以使用cmd输入ipconfig获得。第一个ClientName随便填一个即可。

然后点击save。

如图,如果上述按钮变为绿色显示connected,说明连接服务器成功,测试成功!

3|0ESP8266连接并控制其上的LED灯

控制代码如下(有详细注释):

#include <ESP8266WiFi.h> #include <PubSubClient.h> // 设置wifi接入信息(请根据您的WiFi信息进行修改) const char* ssid = "************";//WiFi名称 const char* password = "*********";//WiFi密码 const char* mqttServer = "***********";//服务器地址 // 如以上MQTT服务器无法正常连接,请前往以下页面寻找解决方案 // http://www.taichi-maker.com/public-mqtt-broker/ WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); const byte ledPin = LED_BUILTIN; // 需要控制的led灯 void setup() { Serial.begin(9600); //设置ESP8266工作模式为无线终端模式 WiFi.mode(WIFI_STA); // 连接WiFi connectWifi(); // 设置MQTT服务器和端口号 mqttClient.setServer(mqttServer, 1883); // 连接MQTT服务器 connectMQTTServer(); mqttClient.setCallback(callback); // 设置回调,控制led灯 pinMode(ledPin,OUTPUT); } void loop() { if (mqttClient.connected()) { // 如果开发板成功连接服务器 mqttClient.loop(); // 保持客户端心跳 } else { // 如果开发板未能成功连接服务器 connectMQTTServer(); // 则尝试连接服务器 } } void connectMQTTServer(){ // 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名) String clientId = "esp8266-" + WiFi.macAddress(); // 连接MQTT服务器 if (mqttClient.connect(clientId.c_str())) { //设置mqtt主题的id //连接成功后就订阅主题 mqttClient.subscribe("hopeful");//订阅主题 Serial.print("订阅主题成功!!"); } else { Serial.println(mqttClient.state()); delay(3000); } } // ESP8266连接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(""); } //回调函数 void callback(char* topic, byte* payload, unsigned int length) { // Serial.print("Message arrived ["); // Serial.print(topic); // Serial.print("] "); for (int i=0;i<length;i++) { char receivedChar = (char)payload[i]; if (payload[length-1] == '1') { // 收到消息是 '1' 点亮LED灯 digitalWrite(ledPin,HIGH); Serial.print(receivedChar); // 打印mqtt接收到消息 } if (payload[length-1] == '0') // 收到消息是 '0' 关闭LED灯 digitalWrite(ledPin, LOW); } Serial.println(); }

在上述基础上,我们通过MQTTBOX订阅hopeful主题,并且在主题中输入1或者0,可以发现ESP8266开发板上的LED灯受到控制,证明实验板成功连上服务器,实验成功!


__EOF__

本文作者Mudrobot
本文链接https://www.cnblogs.com/mudrobot/p/15924914.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Mudrobot  阅读(2223)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示