NodeMCU项目(三)MQTT客户端

WAN_microcontroller

概述

NodeMCU模块连接WiFi后,作为一个客户端连接MQTT服务器;手机通过微信小程序连接到相同的服务器上,作为另一个客户端。手机和NodeMCU不需要处于同一局域网下,两者之间的通信不受时间和空间的限制。NodeMCU读取连接的温湿度传感器的信息,手机客户端订阅该信息,可以实现远程监控;NodeMCU订阅手机发布的命令主题,可以实现远程控制。

硬件

  • NodeMCU(CH340)
  • DHT11

在这里插入图片描述

软件

  • Arduino IDE
  • 微信开发者工具
  • MQTT.fx

设计

MQTT服务器
MQTT概念

消息队列遥测传输(Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)下基于发布 (Publish)/订阅 (Subscribe)范式的消息协议,可视为“资料传递的桥梁”。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。

MQTT基本原理

MQTT: publish / subscribe architecture

在MQTT协议的通信过程中有两个角色,分别是服务器(Broker)和客户端(Client)。服务器的任务是将某一主题(Topic)的信息推送给所有订阅(Subscribe)了该主题的客户端;客户端既可以向服务器发布(Publish)信息,也可以从服务器获取信息。

用一个通俗的例子来讲,把B站看成MQTT服务器,up主和观众就是客户端。我们关注一个up主就是订阅一个主题,up更新一个视频就是发布一条信息,关注的up主更新后我们就会收到B站的推送,然后就可以在动态看见up主更新的内容。要注意的是,我们不会收到没有关注的up主的消息推送,我们可以关注多个up主,只要他们更新,就一定会收到通知。

MQTT服务器选择

使用MQTT服务器的途径有两种,一种是自己搭建服务器(需要有公网IP),一种是使用现有平台提供的MQTT服务器,如阿里云、华为云等,使用这些公用服务器需要注册账号、收费等。

当然仅为了学习和测试可以使用公用的、免费的MQTT服务器,本项目使用的MQTT服务器是 Mosquitto ,它支持基于Websocket的MQTT协议。

test.mosquitto.org

This is test.mosquitto.org. It hosts a publicly available Eclipse Mosquitto MQTT server/broker. This server is provided as a service for the community to do testing, but it is also extremely useful for testing the server. This means that it will often be running unreleased or experimental code and may not be as stable as you might hope.

MQTT服务器地址:test.mosquitto.org
TCP 端口:1883
TCP/TLS 端口:8883
WebSockets 端口:8080
Websocket/TLS 端口:8081

NodeMCU客户端
温湿度信息读取

DHT11模块

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传.感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

工作电压范围:3.3V-5.5V
工作电流:平均 0.5mA
输出:单总线数字信号
测量范围:湿度 20~90%RH,温度 0~50℃
精度:湿度±5%,温度±2℃
分辨率:湿度 1%,温度 1℃

dht11库

DHT11 Temperature & Humidity Sensor library for Arduino.

DHT 系列模块有许多非常成熟的库,不同的库使用方法不尽相同。本项目中使用的是一个比较简单的、专门针对DHT11的库,温湿度信息的获取方法如下:

#include <dht11.h>

//建立dht11传感器对象
dht11 DHT11;
//读取传感器信息,传感器连接引脚(GPIO14 D5)
DHT11.read(14);
//温度信息
String tempMessageString = String(DHT11.temperature);
//湿度信息
String humMessageString = String(DHT11.humidity); 
功能实现关键

PubSubClient库

Arduino Client for MQTT. This library provides a client for doing simple publish/subscribe messaging with a server that supports MQTT.

库结构如下:

在这里插入图片描述

各个函数的详细功能及使用方法不再展开描述,下面只说明项目中的具体功能实现。

程序实现
  1. 配置客户端连接信息
//MQTT服务器地址
const char* mqttServer = "test.mosquitto.org";
//建立WiFiClient对象
WiFiClient wifiClient;
//建立mqttClient对象
PubSubClient mqttClient(wifiClient);             

//设置MQTT服务器和端口号(这里使用的是普通的TCP端口)
mqttClient.setServer(mqttServer, 1883);
//设置收到信息后的回调函数
mqttClient.setCallback(receiveCallback);
  1. 连接MQTT服务器
//设置客户端ID(尽量独一无二,避免重复)
String clientId = "NodeMCU-" + WiFi.macAddress();
//成功连接MQTT服务器
if (mqttClient.connect
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值