云计算百科
云计算领域专业知识百科平台

学习笔记 MQTT韦东山8连接服务器9发布消息

1

sourcesight的Window可以切换已打开的界面

2

别人写的代码能在各种平台上使用,别人已经把平台相关的函数 抽象出来了

client = mqtt_lease();->c = (mqtt_client_t *)platform_memory_alloc(sizeof(mqtt_client_t));

平台相关的 内存 分配函数,对于rt-thread        /        freertos        /        linux        /

腾讯物联网终端操作系统(TencentOS tiny)它们有自己的malloc函数

3

client = mqtt_lease();分配一个结构体

mqtt_client_t *mqtt_lease(void) {     int rc;     mqtt_client_t* c;                        分配一个结构体

    c = (mqtt_client_t *)platform_memory_alloc(sizeof(mqtt_client_t));     if (NULL == c)         return NULL;

    memset(c, 0, sizeof(mqtt_client_t));

    rc = mqtt_init(c);                        初始化相关信息      if (MQTT_SUCCESS_ERROR != rc)         return NULL;          return c; }

rc = mqtt_init(c); ->

        c-mqtt_keep_alive_interval = MQTT_KEEP_ALIVE_INTERVAL;保持活着的间隔

        c-mqtt_version=MQTT_VERSION;版本

        mqtt_read_buf_malloc(c, MQTT_DEFAULT_BUF_SIZE);读buff

        mqtt_write_buf_malloc(c, MQTT_DEFAULT_BUF_SIZE);写buff  

4

mqtt_set_port(client, "1883");连接到服务器的哪个端口

mqtt_set_host(client, "www.jiejie01.top");设置服务器IP

mqtt_connect(client);连接

5

网口,WIFI集成在板子上,直接使用socket编程,一套API的代码

怎么连接服务器(平台相关的)client端,客户端

mqtt_connect(client);->return mqtt_connect_with_results(c);

        ->rc = network_init()网络初始化,没做硬件相关的操作

        ->rc = network_connect(c->mqtt_network);网络连接,连接服务器,建立TCP连接               ->return nettype_tls_connect(n);//tls网络传输安全性            ->return nettype_tcp_connect(n);

               ->n->socket = platform_net_socket_connect 平台相关的 网络socket连接(移植时注意)

                        对linux:无事可做;对FreeRtos:AT命令通过串口发给esp8266

        ->  /* send connect packet */发出一个连接的packet,要连接MQTT服务器连接请求if ((rc = mqtt_send_packet())(客户端连接服务器)回应信号if (mqtt_wait_packet(c, CONNACK, &connect_timer) == CONNACK) //CONNACK客户端等别人的回应

        ->/* connect success, and need init mqtt thread */             c->mqtt_thread= platform_thread_init("mqtt_yield_thread", mqtt_yield_thread, c, MQTT_THREAD_STACK_SIZE, MQTT_THREAD_PRIO, MQTT_THREAD_TICK);

}//mqtt_yield_thread创建的线程

6

核心线程和发布线程

main

mqtt_connect(client);//mqtt_yield_thread创建的核心线程 res = pthread_create(&thread1, NULL, mqtt_publish_thread, client); //mqtt_publish_thread发布

线程  

7

解析 发布线程

mqtt_publish_thread->mqtt_message_t msg;构造一个消息结构体

        -> size_t              payloadlen;指定下面buff多长,但没设置         msg.payloadlen=xxx;

        ->void                *payload;指针指向一个buff,保存要上报的数据msg.payload=(void *)buf;

设置完后发布消息 

mqtt_publish(client, "topic1", &msg);根据他的协议构造一些数据包

        /* serialize publish packet and send it */

->len = MQTTSerialize_publish()数据按某些格式打包在一起

->if ((rc = mqtt_send_packet(c, len, &timer))发送数据->len = network_write()

                        ->return nettype_tcp_write(n, buf, len, timeout);        ->        

                        return    platform_net_socket_write_timeout平台提供的函数(这个函数发AT命令,通过串口发给WIFI模块)

8

mcu不能用这套代码

mcu里面资源有限,没有实现一套统一的接口

RT-Thread基本上实现了统一的接口

FreeRtos基本上没什么生态,没统一的接口

9

发送数据很多都是JSON格式,任何数据格式都可以

赞(0)
未经允许不得转载:网硕互联帮助中心 » 学习笔记 MQTT韦东山8连接服务器9发布消息
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!