基础入门篇——使用ESP8266连接MQTT.fx客户端

使用ESP8266连接MQTT.fx客户端
  • ESP8266的Arduino开发环境里有多个MQTT库,使用的库为主流的PubSubClient库

  • 库的获取:

    注意选择 作者名为Nick O’Leary的库

    1. 官网地址:https://pubsubclient.knolleary.net/
    2. GitHub:https://github.com/knolleary/pubsubclient/
    3. 百度网盘下载: https://pan.baidu.com/s/12MHGbdfiOdwOGip5RMSSEQ 提取码: sizy
    4. ArduinoIDE中自带的库管理器安装
  • 库的安装教程:为Arduino IDE安装添加库 – 太极创客 (taichi-maker.com)

  • ESP8266程序:

/*
  # 程序目的:实现ESP8266连接MQTT服务器端()然也物理网
  # 创建时间:2022-12-24
  # 函数:
  ## wifi对象:WiFi.SSID();WiFi.localIP(); WiFi.macAddress(); WiFi.mode(WIFI_STA);  ## mqttClient对象:mqttClient.setServer(网站, 端口号); mqttClient.connected(); mqttClient.loop(); 	mqttClient.connect(订阅者的ID.c_str()); mqttClient.state();
  # 程序思路:串口初始化->连接wifi->设置MQTT服务器和端口号->连接MQTT服务器(自建函数)->loop函数中检查是否连接->保持客户端			心跳
  */
  #include <ESP8266WiFi.h>
  #include <PubSubClient.h>
  #include <ESP8266WiFiMulti.h>
  
  ESP8266WiFiMulti My_WifiMulti;  //wifi连接对象
  
  WiFiClient My_wifiClient;                      //Wifi对象 只有在建立mqttClient对象参数时候有用
  PubSubClient mqttClient(My_wifiClient);        //建立订阅者
  const char* mqttServerSite = "test.ranye-iot.net";  //连接的服务器 注意:不能用string类型
  
  //函数声明
  int WiFi_Connect();
  void My_connectMQTTServer();
  
  void setup() {
    Serial.begin(9600);
  
    //设置ESP8266工作模式为无线终端模式
    WiFi.mode(WIFI_STA);
  
    //wifi连接
    WiFi_Connect();
  
    //设置MQTT服务器和端口号
    mqttClient.setServer(mqttServerSite, 1883);
  
    //连接MQTT服务器
    My_connectMQTTServer();
  }
  
  void loop() {
  
    if (mqttClient.connected())  //监测是否处于连接状态
    {
      mqttClient.loop();  //为了保持客户端心跳
    } else {
      My_connectMQTTServer();
    }
  }
  
  /*
  客户端连接服务器端函数
  注意:需要提前建立mqttClient对象
  */
  void My_connectMQTTServer()
  {
    // 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名)
    String clientID="ESP8266-" + WiFi.macAddress();//获取ESP8266的MAC地址
    //连接MQTT服务器
    if(mqttClient.connect(clientID.c_str()))//注意:这里的String.c_str是对字符串的处理
    {
      Serial.println("MQTT Server Connected.");
      Serial.print("Server Address: ");
      Serial.println(mqttServerSite);
      Serial.print("ClientId:");
      Serial.println(clientID);
      Serial.print("Client State:");
      Serial.println(mqttClient.state());
    }
    else
    {
      Serial.print("MQTT Server Connect Failed. Client State:");
      Serial.println(mqttClient.state());
      delay(3000);
    }
  }
  
  /*
  wifi连接函数
  需引 ESP8266WiFiMulti.h 库  并建立ESP8266WiFiMulti对象
  */
  int WiFi_Connect() {
    My_WifiMulti.addAP("TPLINK2.4G", "@@@@@@@@");  // Wifi1
    My_WifiMulti.addAP("username2", "password");   // Wifi2
    My_WifiMulti.addAP("username3", "password");   // Wifi3
  
    int i = 0;
    Serial.print("\n-------------Connected Time:-------------\n");
    while (My_WifiMulti.run() != WL_CONNECTED) {
      i += 1;
      Serial.print(i);
      Serial.println("->");
      delay(1000);
      if (i > 15) {
        Serial.print("\n-------------WIFI connected failed!-------------\n");
        return 0;
      }
    }
  
    Serial.println("\n-------------WIFI connected successful!-------------\n");
    Serial.println("\n-------------WIFI Name:-------------");
    Serial.println(WiFi.SSID());
    Serial.println("\n-------------ESP8266 IP address:-------------");
    Serial.println(WiFi.localIP());
      Serial.println("\n-------------------------------------------");
    return 1;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值