微信小程序结合MQTT控制ESP32,看这一篇就够了

mqtt 官网和官方教程

MQTT 协议入门与进阶 | EMQ (emqx.com)

MQTT.js 入门教程 | EMQ (emqx.com)

mqtt 下载

进入https://unpkg.com/mqtt@4.1.0/dist/mqtt.min.js 右击另存为到桌面

导入和使用

将下载到本地的 mqtt.min.js 拷贝到项目的 utils 目录下,如下图所示

在js文件引入mqtt 

const app = getApp();
import mqtt from "../../utils/mqtt.min";
let client = null; // MQTT服务

创建MQTT连接

connectMqtt() {
  let that = this;
  const options = {
    connectTimeout: 4000,
    address: this.data.address, // 输入的连接地址
    port: this.data.port, // 输入的端口号
    username: this.data.username, // 输入的用户名
    password: this.data.password, // 输入的密码
  };

  console.log("address是:", options.address);
  client = mqtt.connect("wxs://" + options.address + "/mqtt", options); // 连接方法
  client.on("connect", error => {
    console.log("连接成功");
    // 可以在这里写一些连接成功的逻辑
  });

  client.on("reconnect", error => {
    console.log("正在重连:", error);
    wx.showToast({ icon: "none", title: "正在重连", });
  });
  client.on("error", error => {
    console.log("连接失败:", error);
    wx.showToast({ icon: "none", title: "MQTT连接失败", });
  });
}

添加订阅/添加发布(连接成功状态下)

// 订阅一个主题
client.subscribe("想要订阅的主题名字", { qos: 0 }, function (err) {
  if (!err) {
    console.log("成功");
    wx.showToast({ icon: "none", title: "添加成功", });
    // 可以在这里写一些订阅主题成功的逻辑
  }
});

取消订阅/发布(连接成功状态下)

client.unsubscribe('想要取消的主题名字', function (err) {
  if (!err) {
    wx.showToast({ icon: "none", title: "取消成功", });、
    // 可以在这里写一些取消主题成功的逻辑
  }
});

发布消息(连接成功状态下)

根据判断是哪个设备的开关 然后发送消息 在我们案例里发送的消息可能为 :

{ LIGHT: "ON" }

{ LIGHT: "OFF" }

{ FAN: "ON" }

{ FAN: "OFF" }

{ CURTAIN: "ON" }

{ CURTAIN: "OFF" }

let msg = "发出的消息";
client.publish("想要发送消息的Topic", JSON.stringify(msg), { qos: 0 }, err => {
  if (!err) {
    console.log("topic:", "想要发送消息的Topic变量", "成功发出消息", msg);
  }
});

收到消息和数据回显

client.on("message", (topic, message) => {
  /* 温度、湿度、光强、烟雾
      TEMPERATURE
      HUMIDITY
      LIGHT_INTENSITY
      SMOKE
  */
  console.log("收到消息:", message.toString());
  // wx.showToast({
  //   icon: "none",
  //   title: message.toString(),
  // });
  let getMessageObj = {}; //收到的消息
  getMessageObj = JSON.parse(message); //收到的消息转换成json对象
  
});

到此就可以根据收到的消息来改变界面的设备信息或调用接口啥的...

断开MQTT连接(连接成功状态下)

client?.end(true, error => {});
client = null;

最终效果

-------------------------------------------------------------------------------------------------------

嵌入式物联网教学开发 传感器控制拓展板二合一

不同于其他卖家提供资料和技术支持,我们提供手把手教学,完整的开发流程如下:

实现完整的一个物联网嵌入式项目:将数据上传并通过小程序对硬件进行控制。具体有:

[1]服务器配置,阿里云搭建mqttx服务器,ssl证书配置;

[2]微信小程序设计,借助微信开发者工具开发,js代码和类html语言;

[3]硬件驱动,基于Arduino平台开发esp32,提供wifi和蓝牙版本,读取传感器:温度、湿度、烟雾;控制设备:小灯、继电器。

提供教学视频在b站,合集播放破6w!提供项目开发文档,网页链接。

我们提供搭建好的mqtt测试服务器,供大家免费使用。

适合如下人群:

1.喜欢diy的电子极客;

2.物联网专业的相关学生课程或毕业设计;

3.寻求物联网项目经验的求职者;

有硬件工程师和软件工程师答疑,欢迎咨询~

文档资料,可参考:基于ESP32+微信小程序的物联网应用

  • 35
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在微信小程序中连接到MQTT服务器并控制ESP8266 LED灯,需要进行以下几个步骤: 1. 搭建MQTT服务器 可以选择自己搭建一台MQTT服务器,或者使用第三方的MQTT服务器提供商,例如EMQ X, HiveMQ等。在这里我们以EMQ X为例,按照官方文档进行安装和配置。 2. 在小程序中引入MQTT.js 使用MQTT.js库实现与MQTT服务器的连接和数据通信。可以通过npm或者直接下载在项目中使用。 3. 连接MQTT服务器 使用MQTT.js库提供的mqtt.connect()方法连接到MQTT服务器,需要指定MQTT服务器的IP地址和端口号。例如: ```javascript var mqtt = require('mqtt') var client = mqtt.connect('mqtt://localhost:1883') ``` 4. 发布消息 使用MQTT.js库提供的client.publish()方法向MQTT服务器发布消息。例如: ```javascript client.publish('topic', 'hello world') ``` 在这里,‘topic’是消息的主题,‘hello world’是消息的内容。 5. 订阅主题 使用MQTT.js库提供的client.subscribe()方法订阅MQTT服务器上的特定主题。例如: ```javascript client.subscribe('topic') ``` 6. 接收消息 使用MQTT.js库提供的client.on()方法监听MQTT服务器发送过来的消息。例如: ```javascript client.on('message', function (topic, message) { // message is Buffer console.log(message.toString()) client.end() }) ``` 7. 控制ESP8266 LED灯 在ESP8266上运行一个MQTT客户端程序,订阅特定的主题,可以接收来自MQTT服务器发布的消息。根据接收到的消息控制LED灯的开关状态。例如: ```c++ #include <PubSubClient.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqtt_server = "mqtt_server_IP_address"; const char* clientID = "ESP8266Client"; const char* topic = "led"; int led = 2; WiFiClient espClient; PubSubClient client(espClient); void setup() { pinMode(led, OUTPUT); Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); client.setServer(mqtt_server, 1883); client.setCallback(callback); while (!client.connected()) { Serial.println("Connecting to MQTT Broker..."); if (client.connect(clientID)) { Serial.println("Connected to MQTT Broker"); client.subscribe(topic); } else { Serial.print("MQTT connection failed with state "); Serial.println(client.state()); delay(2000); } } } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); if ((char)payload[0] == '1') { digitalWrite(led, HIGH); } else if ((char)payload[0] == '0') { digitalWrite(led, LOW); } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } void reconnect() { while (!client.connected()) { Serial.println("Connecting to MQTT Broker..."); if (client.connect(clientID)) { Serial.println("Connected to MQTT Broker"); client.subscribe(topic); } else { Serial.print("MQTT connection failed with state "); Serial.println(client.state()); delay(2000); } } } ``` 在上面的代码中,订阅了一个名为‘led’的主题,当接收到‘1’时,将LED灯打开;当接收到‘0’时,将LED灯关闭。 8. 在小程序控制LED灯 在小程序中使用MQTT.js库实现向MQTT服务器发布消息,控制ESP8266 LED灯的开关状态。例如: ```javascript // 打开LED灯 client.publish('led', '1') // 关闭LED灯 client.publish('led', '0') ``` 以上就是在微信小程序中连接MQTT服务器实现控制ESP8266 LED灯的全部步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值