pubsubclient, 用于为MQTT提供支持的ESP8266的客户端库

分享于 

5分钟阅读

GitHub

  繁體 雙語
A client library for the ESP8266 that provides support for MQTT
  • 源代码名称:pubsubclient
  • 源代码网址:http://www.github.com/Imroy/pubsubclient
  • pubsubclient源代码文档
  • pubsubclient源代码下载
  • Git URL:
    git://www.github.com/Imroy/pubsubclient.git
    Git Clone代码到本地:
    git clone http://www.github.com/Imroy/pubsubclient
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Imroy/pubsubclient
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    用于为MQTT提供支持的ESP8266 (。使用Arduino环境)的客户端库。

    从o original的Nicholas Modified Modified + + + http://knolleary.net/arduino-client-for-mqtt/

    在这里查看ESP8266-Arduino工作: https://github.com/esp8266/Arduino

    目录

    MQTT版本

    注意到现在PubSubClient需要一个支持MQTT标准版本 3.1.1的代理,而不是 3.1或者 earler。

    对于 Mosquitto,这意味着版本 1.3或者更高版本。 虽然 1.3版本仅正式支持 MQTT 3.1,但它确实接受连接消息( MQTT 3.1使用"mqisdp") 中的"MQTT"协议名称字符串。 然而,推荐 1.4版本,因为它完全支持 MQTT 3.1.1.

    新特性

    一组完整的已经被添加,每个消息类型都有一个。 这将从PubSubClient类中移除了很多代码,让它处理协议的高级流程。 MQTT类处理从消息中获取数据和从消息中。

    消息中的set选项

    PubSubClient类的运行方式与以前一样。 但是,connect ( )。发布( )。订阅( ) 和 unsubscribe() 方法现在可以采用适当的MQTT对象。 这允许在发布时设置额外的选项,或者使用一个订阅消息设置多个主题。

    你可以使用MQTT类及其可以链接的setter方法,如下所示:

    
    
    
    
     client.connect(MQTT::Connect("clientId")
    
    
    . set_clean_session()
    
    
    . set_will("status","down")
    
    
    . set_auth("username","password)
    
    
    . set_keepalive(30)
    
    
     );
    
    
    
    
    
    
    
    
    
     client.publish(MQTT::Publish("topic","payload")
    
    
    . set_retain()
    
    
    . set_qos(1)
    
    
    . set_dup()
    
    
     );
    
    
    
    
    
    
    
    
    
     client.subscribe(MQTT::Subscribe()
    
    
    . add_topic("topic1")
    
    
    . add_topic("topic2", 1)//optional qos value
    
    
     );
    
    
    
    
    
    
    
    
    
     client.unsubscribe(MQTT::Unsubscribe()
    
    
    . add_topic("topic")
    
    
     );
    
    
    
    
    

    有关详细信息,请参见doxygen生成的文档中的MQTT::ConnectMQTT::Publish。MQTT::Subscribe 和MQTT::Unsubscribe。

    请参见 mqtt_auth 或者 mqtt_qos示例草图,了解如何使用它。

    发布和接收大消息

    消息通常完全保存在内存中。 这显然是微控制器上的问题,它的内存量非常有限。 为了绕过这个限制,可以使用回调发送或者接收有效负载,这些回调可以访问裸网络客户端对象。

    要发布大负载,请执行以下操作:

    
    
    
    
     bool write_payload(Client& payload_stream) {
    
    
     uint8_t buffer[64];
    
    
     for (int i = 0; i <1024; i++) {
    
    
    //put something in buffer[]
    
    
     uint32_t sent = payload_stream.write(buffer, 64);
    
    
     if (sent <64)
    
    
     return false;
    
    
     }
    
    
     return true;
    
    
     }
    
    
    .. .
    
    
     client.publish("topic", write_payload, 64 * 1024);
    
    
    
    
    

    或者查看 mqtt_publish_large的示例。

    要接收大负载:

    
    
    
    
     void recv_payload(const MQTT::Publish& pub) {
    
    
     if (pub.has_stream()) {
    
    
     uint8_t buffer[64];
    
    
     int read;
    
    
     while (read = pub.payload_stream()->read(buffer, 64)) {
    
    
    //Do something with data in buffer
    
    
     }
    
    
     pub.payload_stream()->stop();
    
    
     }
    
    
     }
    
    
    .. .
    
    
     client.set_callback(recv_payload);
    
    
     client.subscribe("inTopic");
    
    
    
    
    

    或者查看 mqtt_subscriber的示例。


    SUP  client library  ESP  MQTT  
    相关文章