1. 为什么选择MQTT协议做物联网通信?
第一次接触物联网项目时,我试过用HTTP轮询的方式获取设备状态,结果手机电量半小时就掉了20%。后来改用WebSocket长连接,虽然省电了,但遇到网络波动就频繁断线重连。直到发现MQTT这个专门为物联网设计的协议,才真正解决了这些问题。
MQTT有三大杀手锏特别适合微信小程序物联网场景:
- 轻量级:协议头最小只要2字节,比HTTP的几千字节节省90%以上流量
- 异步通信:设备状态变化时才推送,不像轮询那样浪费资源
- 弱网优化:自动重连、离线消息、QoS质量分级等机制保障可靠性
实测在2G网络环境下,MQTT的连接成功率比WebSocket高3倍以上。去年给某智能农场做小程序时,大棚里的LoRa设备信号时有时无,正是靠MQTT的QoS 2级别保证了控制指令不丢失。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 微信小程序的特殊要求与解决方案
微信小程序对网络通信有严格限制,这是我们踩过的几个坑:
2.1 必须使用WSS协议
第一次调试时直接用ws://连接,结果死活报错。后来查文档才发现:
- 生产环境必须用HTTPS/WSS
- 开发阶段可在「微信开发者工具」→「详情」→「本地设置」勾选不校验域名
建议用EMQX的公共Broker测试:
javascript复制// 注意微信特殊要求:wss要写成wxs
const client = mqtt.connect('wxs://broker.emqx.io:8084/mqtt', {
clientId: 'mini_' + Date.now()
})
2.2 域名备案问题
如果用自己的服务器,需要:
- 完成ICP备案
- 在「微信公众平台」→「开发」→「开发设置」添加socket合法域名
- 服务器配置SSL证书(推荐Let's Encrypt免费证书)
我曾遇到备案审核要15天,临时方案是用Nginx反向代理到已备案域名:
nginx复制server {
listen 443 ssl;
server_name 已备案域名.com;
location /mqtt {
proxy_pass http://真实服务器IP:1883;
proxy_http_v
