MQTT在ESP32的应用

 

在上一篇文章中,说明了MQTT在树莓派部署服务器的方法,和手机客户端作为SUB端的方法。

本节终于到了端PUB的方法,毕竟物联网的物就在这个地方。

ESP32网上介绍有两个库,一个subpubclient和MQTTclient两个,subpub试了一下,较复杂,需要另外使用wifi.h的库,集成度较低,适合深度开发。

而MQTTclient高集成度,只需要实例化一个EspMQTTClient对象

EspMQTTClient client(
  "WifiSSID",
  "WifiPassword",
  "192.168.1.100",  // MQTT Broker server ip
  "MQTTUsername",   // Can be omitted if not needed
  "MQTTPassword",   // Can be omitted if not needed
  "TestClient",     // Client name that uniquely identify your device
  1883              // The MQTT port, default to 1883. this line can be omitted
);

依次填入wifi名字,密码,MQTT toker的地址,MQTT的用户名,密码,自己给自己PUB起一个名字。


在setup中保持例子的设置,大概是保持串口输出等

  // Optionnal functionnalities of EspMQTTClient : 
  client.enableDebuggingMessages(); // Enable debugging messages sent to serial output
  client.enableHTTPWebUpdater(); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overrited with enableHTTPWebUpdater("user", "password").
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline"); 

接下来就是在loop中使用

  client.loop();

使PUB端一直运行。


好,这不是什么没发吗?答案在

void onConnectionEstablished()

函数中,这个函数是loop内建调用函数,相当于中断执行函数,loop里面只是一个状态机而已。

在这个函数中,使用

client.publish("mytopic/test", "This is a message");

来实现发布,第一个参数为topic,第二个参数为内容,so easy,美滋滋。

  client.subscribe("mytopic/test", [](const String & payload) {
    Serial.println(payload);
  });

来实现订阅到串口打印,so so easy是不是,站在巨人肩上就是不一样。


void onConnectionEstablished()

可以加一个while来循环发送消息。忘加delay函数了,以为

client.executeDelayed(5 * 1000, []()

可以有延时作用,但是while在这个delay后,直接又回到第一条执行,结果手机上订阅的消息瞬间炸了。。。手机app也死了。。。

以为树莓派也死了,结果好好的,说明toker的作用,转发而已,跟http服务器有点不一样。

加个delay效果很好。交替发送。

如果不深入修改的话推荐这个库,很好上手,免去wifi+MQTT繁琐的设置,我重启esp32后重连wifi也很快,退出机制也比较完善。


终于在最后5天前基本完成MQTT的小目标,GOOD。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值