ESP8266+ArduinoIDE实现MQTT发布功能学习笔记

一、硬/软件条件

硬件:

1、ESP8266-01S模块

2、USB TO TTL串口工具

3、ESP8266-01S最小配置电路

在这里插入图片描述

软件:

1、ArduinoIDE

在这里插入图片描述

2、串口调试助手(ArduinoIDE自带)

在这里插入图片描述

3、EMQ X Broker (MQTT 服务器)

在这里插入图片描述

EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。
EMQ X Broker 在全球物联网市场广泛应用。无论是产品原型设计、物联网创业公司、还是大规模的商业部署,EMQ X Broker 都支持开源免费使用。

4、MQTT Client Tool

在这里插入图片描述

二、ESP8266开发板及库文件安装

在这里插入图片描述
.打开首选项界面,配置如上图所示,开发板管理器网址 https://github.com/esp8266/Arduino/releases/download/2.7.2/package_esp8266com_index.json

打开 开发板管理器,输入过滤条件“ESP8266” 如图所示推荐选择较低版本安装。
在这里插入图片描述

开发板安装完成后,打开库管理器,安装图示示例
在这里插入图片描述
库文件和开发板安装完成后,将硬件电路连接正确后,准备进行编程

三、创建新的info文件

选择”工具“栏,配置如图所示
在这里插入图片描述
打开示例 文件->示例->Antares ESP8266 MQTT->AntaresMQTTPublish做为参考
这是我移植过来的,初始版本程序

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


#define WIFISSID "WIFI 名称"                                  /* WIFI 名称 */
#define PASSWORD "WIFI 密码"                           /* WIFI 密码 */



char *mqttServer = "MQTTserver";
int mqttPort = 1883;

String subscriptionTopic;


bool WifiConnect(String SSID, String wifiPassword)
{
    WiFi.begin(SSID, wifiPassword);
    Serial.print("Trying to connect to " + SSID + "...\r\n");

    for (unsigned char count=0;count<20;count++)
    {
      delay(500);
      Serial.print(".");
    }

    if(WiFi.status() != WL_CONNECTED) {
        Serial.print("Could not connect to " + SSID + ".\r\n");
        return false;
    }
    else {
        WiFi.setAutoReconnect(true);
        Serial.print("\n WiFi Connected!\n");
        Serial.print("IP Address: ");
        Serial.println(WiFi.localIP());
        return true;
    }  
}

WiFiClient esp8266Client;
PubSubClient client1(esp8266Client);
void SetMqttServer(char *mqttServer, unsigned int  mqttPort)
{
    if(WiFi.status() != WL_CONNECTED) 
    {
      Serial.print("[ANTARES] Unable to connect to MQTT server.\r\n");
    }
    else 
    {
        Serial.print("Setting MQTT server \"" + String(mqttServer) + "\" on port " + String(mqttPort) + "\r\n");
        client1.setServer(mqttServer, mqttPort);
    }  
}

void CheckMqttConnection() {
    subscriptionTopic = "test";

    if(!client1.connected()) {
        while(!client1.connected()) {
            Serial.print(" Attempting MQTT connection...\n");

            String clientId = "ESP8266-11";

            char clientIdChar[clientId.length() + 1];
            clientId.toCharArray(clientIdChar, clientId.length() + 1);

            if(client1.connect(clientIdChar)) {
                Serial.print("Connected! Client ID:");
                Serial.print(clientIdChar);
                Serial.print("\n");
                char subscriptionTopicChar[subscriptionTopic.length() + 1];
                subscriptionTopic.toCharArray(subscriptionTopicChar, subscriptionTopic.length() + 1);

                Serial.println();
                Serial.print("Topic: ");
                Serial.println(subscriptionTopicChar);

                client1.publish(subscriptionTopicChar, "connect!");
                client1.subscribe(subscriptionTopicChar);
            }
            else {
                Serial.print(" Failed, rc=" + String(client1.state()) + ", Will try again in 5 secs.\n");
                delay(5000);
            }
        }
    }
    client1.loop();
}

void setup() {
  Serial.begin(115200);
  WifiConnect(WIFISSID, PASSWORD);

  SetMqttServer(mqttServer, mqttPort);
}

void loop() {
  CheckMqttConnection();
  client1.publish("test", "dsadadsad");

  delay(5000);
}

四、程序上传

首先将ESP8266模块GPIO0引脚拉低上电,使其进入程序下载模式,在程序编译成功的前提下点击如图所示的上传按钮
在这里插入图片描述
程序上传成功
在这里插入图片描述
将GPIO0引脚拉高上电,ESP8266模块进入运行模式,打开串口助手观察现象;
在这里插入图片描述
乱码部分是因为模块在程序初始化之前默认波特率是74880,打印出的模块信息为乱码,不用理会
可以看到,WIFI MQTT都连接成功发布的Topic为test
切换到服务器监控界面,可以看到主题
在这里插入图片描述
现在打开MQTT Client Tool,订阅Topic

在这里插入图片描述

通过串口助手发布一条讯息 “TEST Message”,MQTT Client Tool上可以看到信息已经收到。在这里插入图片描述

五、结语

ArduinoIDE编程方式相对于安可信开发环境编程而言,简单应用上手要快,烧录方式也更简单方便。在较复杂的应用上,个人没有使用过安可信开发环境,就ArduinoIDE而言,有丰富的例程做支持,但是需要一定的C++/C基础。笔者水平有限,疏漏之处望不吝指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ATC Working

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值