准备:
确定板的型号,如图。
下载安装CH340/341驱动
sCH341SER驱动_ch341ser驱动资源-CSDN文库
安装后在设备管理器中可以看见如下端口。
如果没有显示可以试试(我没用到这个)FTDIFT232USBSerialConverterDrivers免费版_ftdi官网驱动下载地址资源-CSDN文库
1.搭建arduino IDE环境
1.1File->Preference,在setting中将additional boards manager URLs中添加链接:http://arduino.esp8266.com/stable/package_esp8266com_index.json
1.2Tools->Board->boards manager, 并在左侧弹出的搜索框内搜索esp8266并安装。
如果安装显示网络问题可以开个梯子,我下载esp32包的时候只能开梯子下,这个应该不用。
1.3然后在这里找到并如图选择NodeMCU 1.0
1.4选择端口
就是刚刚设备管理器里看见的那个
1.5下载PubSubClient.h库
进入manage labraries,搜索下载。之后啥没有的也这么下载。
2. 阿里云(免费)
2.1在阿里云创建产品并添加设备:
参考:ESP8266入门教程11:连接MQTT服务器_esp8266使用mqtt接入阿里iot-CSDN博客
产品是一个类,可以对应产品创建多个设备。设备继承产品的属性。
本人踩坑点,定义topic时候要点击这个蓝色的“定义topic类”。
2.2给产品定义一个新的topic:
名为order,设备操作权限为订阅。用来从平台下发操作。
2.3将程序复制到arduino IDE并烧录。
注意将topic信息替换成自己的MQTT连接参数和ProductKey。
#include <PubSubClient.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#define WIFI_SSID "你的wifi名字"
#define WIFI_PASS "wifi密码"
#define MQTT_HOST "iot-06z0*****87l857.mqtt.iothub.aliyuncs.com"
#define MQTT_PORT 1883 //非加密端口
#define MQTT_CLIENT_ID "自己的ID"
#define MQTT_USER "你的用户名"
#define MQTT_PASS "你的密码"
int LED = LED_BUILTIN; // 内置LED引脚 后续可以换成继电器等等
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
void connectWIFI() {
// 连接WIFI热点
WiFi.begin(WIFI_SSID, WIFI_PASS);
int retryCount = 1;
while (WiFi.status() != WL_CONNECTED) {
Serial.print("重试次数: " + String(retryCount));
retryCount++;
delay(1000);
}
Serial.print("WIFI连接成功");
Serial.print("IP地址: " + WiFi.localIP().toString());
}
void recvMsg(char *topic, uint8_t *payload, size_t length) {
Serial.println("topic: " + String(topic));
Serial.println("payload: " + String((char *)payload).substring(0, length));
Serial.println("length: " + String(length));
Serial.println("Data: " + String((char *)payload).substring(0, length));
// 根据接收到的消息控制LED状态,懒得改了,应该再if一下topic内容是order还是别的指令,如果有多个topic的话。
if (payload[0] == '1') {
digitalWrite(LED,LOW); // 关闭LED
} else if (payload[0] == '0') {
digitalWrite(LED, HIGH); // 打开LED
}
}
void connectMQTT() {
if (mqttClient.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASS)) {
Serial.println("MQTT服务器连接成功");
String topic = "/k1b1iNSxoVe/"; //-----------------换成你自己的productKey!!!!
topic += "ESP8266"; //和你自己的设备名
topic += "/user/order"; // 将主题改为order
if (mqttClient.subscribe(topic.c_str())) {
Serial.println("MQTT主题订阅成功");
} else {
Serial.println("MQTT主题订阅失败");
}
}
}
void setup() {
pinMode(LED,OUTPUT); // 设置LED引脚为输出
Serial.begin(115200); //---------串口输出速率(波特),串行监视器设成一样的就行。
connectWIFI();
mqttClient.setServer(MQTT_HOST, MQTT_PORT);
mqttClient.setCallback(recvMsg);
}
void loop() {
if (!mqttClient.connected()) {
connectMQTT();
}
mqttClient.loop();
}