ESP8266-NodeMCU通过MQTT协议连接阿里云,接收下发topic信息控制自带led灯状态

准备:

确定板的型号,如图。

下载安装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();
}

2.4左上角小箭头烧录运行。右边打开串行监视器。

2.5在平台下发命令。0关灯1开灯。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值