使用ArduinoIDE烧写ESP8266实现MQTT通讯 及出现的问题(未使用USB转TTL)

包括以下部分:

1、接线
2、烧写Arduino
3、烧写ESP8266
4、实现MQTT通讯

接线

ESP8266的3V3/VCC 接到 3.3V
ESP8266的EN 串联一个10k电阻 接到3.3V
ESP8266的RX 接到 Arduino的RX0
ESP8266的TX 接到 Arduino的TX1
ESP8266的GND 接地
烧写时,ESP8266的GPIO0 接到GND
运行时,GPIO0悬空

烧写Arduino

这一步可能是多余的,我一开始感觉需要,但是后面运行成功后感觉不需要。。。
将以下程序按照之前一样的步骤烧写到Arduino中

const int tx = 1;
const int rx = 0;
void setup() {
  pinMode(rx,INPUT_PULLUP);
  pinMode(tx,INPUT_PULLUP);
  Serial.begin(115200);
  Serial.println("Arduino OK");
  delay(1000);
}
void loop() {
}

烧写ESP8266

在ArduinoIDE中安装ESP8266板子,网上已经有很多安装和设置的教程了,不再赘述。
主要记录在烧写过程中出现的问题:
1、烧写前,需要拔出与电脑连接的数据线,并重新插入。
2、插入后按下Arduino板的复位键不松开,点击IDE中的upload,烧写时ESP8266蓝灯不断闪烁。等待直到出现:Hard resetting via RTS pin…字样后,松开复位键。
3、将GPIO0悬空,打开Serial monitor,重新拔插数据线,可以看到ESP8266 OK字样。
4、只有在Arduino处于长按复位键的过程中ESP8266的串口数据才会传到电脑上来。。所以第二步可能是多余的。。。猜测可能需要使用USB转TTL电路,直接将电脑与ESP8266相连,才能正常工作。后续再尝试。
5、长按Arduino的复位键,可以看到不断有ESP8266 OK字样输出到电脑。
烧写的测试代码如下:

void setup(){
  Serial.begin(115200);
  delay(1000);
}
void loop(){
  Serial.println("ESP8266 OK");
}

效果如下:

实现MQTT通讯

效果如图:
代码如下:

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

const char* ssid = "hausahan";                //wifi_ssid
const char* password = "1234567";        //wifi_pass_word
const char* mqtt_server = "114.116.***.***";  //mqtt_server_ip or domain

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup_wifi() {
  delay(10);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  randomSeed(micros());
}

void callback(char* topic, byte* payload, unsigned int length) {    //callback function when got a sub message
  Serial.print("Received: [");Serial.print(topic);Serial.print("]: ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void reconnect() {
    String clientId = "ESP-01A-";
    clientId += String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      client.subscribe("test_topic");
      client.publish("test_topic", "ESP8266 say hi");     //if connected, say hi
    } else {
      delay(5000);                                  // if not, retry after 5 secs
    }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

可见使用ArduinoIDE进行编程、调试,是非常方便的。
如果您有任何其他理解或疑问,请务必按照首页的联系方式联系在下
😃

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页