包括以下部分:
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进行编程、调试,是非常方便的。
如果您有任何其他理解或疑问,请务必按照首页的联系方式联系在下
😃