ESP-IDF使用MQTT接入物联网平台

[简介]

  对于 IDF环境的使用,多数人还是被劝退的,但是当了解这些的底层之后还是觉得IDF写得巧妙。今天我就写篇日志来记录一下IDF使用MQTT接入阿里云的物联网平台(其他平台也大体相似,后面有说),其实一两年前我就想写的,但是都没啥空,而现在对IDF的了解也多些,也就做一点分享(这次我由于做毕设用到就只写物模型的消息上报,订阅有时间再补充)。

[如何实现]

   【实现前讲的一些东西】

   MQTT是什么我就不赘述了,简而言之就是一个消息传输协议。

  【具体实现步骤】现在就大概讲一下IDF怎么去配置MQTT。

    首先,连接wifi的部分我就不讲了,我是直接用官方写的那个例程protocol_examples_common,主要是MQTT的配置--也就是结构体esp_mqtt_client_config_t的配置,IDF的底层关于这个结构体的每个参数也写有注释,不过是英文的,相信大家都能看得懂的。如果只是连接市面上的这些物联网平台,主要就需要配置以下几个东西

    

   这里值得注意的点是,port端口的类型是整形的,不要写成字符串。其余的都是字符串类型的。这些参数具体怎么配置是在物联网平台的设备MQTT连接参数那里,比如阿里云的

   我是写成宏定义的形式如下:

#define BROLER_ADDRESS "******"      /* your PC ipv4 ip */
#define BROLER_PORT 1883             /* port */
#define USER_NAME "*****"            /* client name */
#define PASSWARD "*****"             /* passward */
#define CLIENT_ID "****"             /* cliend id */

 

   上边的结构体配置好之后,再初始化,这样就启动ESP32的MQTT了(这里只是运行mqtt,如果想要订阅主题,还需写一个注册主题的回调。我这里以为只用到上报所以就不写了,往后有空再回来填坑)

esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
esp_mqtt_client_start(client);

  运行mqtt之后就可以上报消息到对于的主题了,具体是使用esp_mqtt_client_publish这个函数来上报

   

参数:
client – *MQTT* client handle                             (这个就是刚才配置的结构体)
topic – topic string                                  (这个就是上报的主题)
data – payload string (set to NULL, sending empty payload message)      (这个是上报的消息数据--注意:这个是json格式的数据,需要参考平台的手册来)
len – data length, if set to 0, length is calculated from payload string (这个就是字符串的长度)
qos – QoS of publish message                            (QOS是消息服务质量,对于的有0,1,2,具体意思mqtt的协议有讲,我这里使用的是0,没用消息返回,适用于网络环境差一点的)
retain – retain flag

   上报主题参考阿里云的是这样(需要注意的是 ${deviceName} 需要改成自己要上报到的设备的名字)

   

   消息上报数据格式参考阿里云的手册是这样的

   我的是这样写的(格式一样的)

    char mqtt_publish_data3[] = "\
    {\
        \"id\":\
        \"1\",\
        \"version\":\
        \"1.0\",\
        \"params\":\
        {\
            \"RMSVoltage\":220.12,\
        }\
    }";

  如果上报的格式不一样的话,会在日志里面有格式错误的内容(错误码6207),如下:

   如果上报格式正确的话会返回200的操作码,且物模型里面的数据也会更新(需要注意上报的物模型属性标识符一定要正确),如下:

 

   其实,做到这里算是上报的已经做完了。

 【闲聊】

  想写这个就是想记录一下,一开始写的时候想写得很详细,但写下来都不知道写什么好。就当随笔写的了,对于入门学习IDF有帮助就最好了。

   

 

posted @ 2024-03-13 14:12  ArsSama  阅读(68)  评论(0编辑  收藏  举报