`
hanbaohong
  • 浏览: 388203 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用ESP8266NodeMCU开发物联应用

阅读更多

因为开发板可能会在不同的WIFI环境中便用,所以不能把Wifi名和密码写入代码,可利用BGWiFiConfig库把开发板设置成AP模式,用手机或电脑连接开发板热点,填写Wifi名和密码,自动写入开发板的FLASH闪存中,即可完成开发板的配网设置。重启开发板,自动连接WIFI、连接MQTT服务器,即可控制物联网设备。

 

另外,下面的代码,利用开发板上FLASH按钮D3,可清除配网信息,重启开发板后,进行配网模式AP。

 

#include <BGWiFiConfig.h>
#include <PubSubClient.h>
BGWiFiConfig wifipw;

const char* mqttServer = "test.ranye-iot.net"; // 免费MQTT服务器地址

WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

void setup(){
   Serial.begin(115200);
   pinMode(D4, OUTPUT);     // LED灯,也可用LED_BUILTIN
   pinMode(D3, INPUT);      // 设置板载的FLASH按钮为输入模式
   
   mblink(D4,500);
   wifipw.begin();   //开始联网

   // 设置MQTT服务器和端口号
   mqttClient.setServer(mqttServer, 1883);
   mqttClient.setCallback(receiveCallback);
}

void loop() {
  wifipw.Loop();
  if (!digitalRead(D3)){
    mblink(D4,100);
    Serial.println("开始清除配网信息...");
    wifipw.clearWiFi();
    Serial.println("配网信息清除成功,请重启开发板!");
    mblink(D4,100);
    delay(3000);
  }
  
  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服务器连接成功!");
    Serial.println();
    // 订阅指定主题
    subscribeTopic();
  } else {
    Serial.print("MQTT服务器连接失败. 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') {
    digitalWrite(D4, LOW);  // 则点亮LED。
    Serial.println("LED ON");
  } else if ((char)payload[0] == '0') {                           
    digitalWrite(D4, HIGH); // 否则熄灭LED。
    Serial.println("LED OFF");
  }else {
    Serial.println((char)payload[0]);
  }
}

// 订阅指定主题
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...");
  }  
}

void mblink(int pin,int shijian) {
  int i;
  for (i = 0; i <= 3; i++) {
    digitalWrite(pin, HIGH);
    delay(shijian);
    digitalWrite(pin, LOW);
    delay(shijian);
  }
}

 

相关资料分享:https://pan.baidu.com/s/1J18qAifp53qLXUrqbof4dg?pwd=r75t 

 

免费的在线 MQTT服务器介绍https://www.emqx.com/zh/mqtt/public-mqtt5-broker

接入信息如下:

Broker:broker-cn.emqx.io

TCP 端口:1883

Websocket 端口:8083

TCP/TLS 端口:8883

Websocket/TLS 端口:8084

CA 证书文件:broker.emqx.io-ca.crt

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics