mqttclient

一个高性能、高稳定性的跨平台MQTT客户端

一个高性能、高稳定性的跨平台MQTT客户端,基于socket API之上开发,可以在嵌入式设备(FreeRTOS/LiteOS/RT-Thread/TencentOS tiny)、Linux、Windows、Mac上使用,拥有非常简洁的API接口,以极少的资源实现QOS2的服务质量,并且无缝衔接了mbedtls加密库。开源地址:https://github.com/jiejieTop/mqttclient

开发平台说明

本次使用TencentOS tiny官方开发板——TencentOS_tiny_EVB_MX_Plus开发板作为移植实验,使用wifi模块连接到云平台。

本次实验需要使用到TencentOS tiny操作系统,大家对于TencentOS tiny操作系统的移植不会的话,
可以看我之前录制的TencentOS tiny视频教程——【全网首发】TencentOS tiny物联网操作系统视频教程,
或者博客文档——TencentOS tiny 移植到STM32F103全教程(基于标准库)。

获取到TencentOS tiny的helloworld工程

我们可以将TencentOS tiny官方仓库拉取到你的电脑上,地址是:https://github.com/Tencent/TencentOS-tiny

然后选择一个TencentOS_tiny_EVB_MX_Plus开发板的hello world例程就好了,当然这里面已经有移植完毕的mqttclient例程,我们现在是学习移植过程,就选个helloworld就好了。

可以将它提取出来,我已经把它拿出来了(当然目录结构可能跟官方的有点不太一样,不过不影响我们的移植),目录结构如下:

只有一些比较简单的驱动,我们可以尝试将它编译并且下载到开发板行,跑一遍这个例程,是非常简单的现象:

开始移植

拷贝at驱动源码

为了保证网络的底层,我们要移植TencentOS tiny的at框架:

  1. 在工程中创建一个文件夹,路径如下:net\at\src,然后将TencentOS-tiny\net\at\src路径下的tos_at.c拷贝到新建的文件夹目录下:

  2. 在工程中创建一个文件夹,路径如下:net\sal_module_wrapper,然后将TencentOS-tiny\net\sal_module_wrapper路径下的sal_module_wrapper.c与sal_module_wrapper.h拷贝到新建的文件夹目录下:

  3. 在工程中创建一个devices文件夹,然后将TencentOS-tiny\devices路径下的bc35_28_95文件夹与esp8266文件夹以及m26文件夹拷贝到新建的文件夹目录下:

  4. 在工程中创建一个文件夹,路径如下:platform\hal\st\stm32l4xx\src,然后将TencentOS-tiny\platform\hal\st\stm32l4xx\src路径下的tos_hal_usrt.c文件拷贝到新建的文件夹目录下:

在工程中创建对应的分组并添加文件

  1. 打开工程,添加at、devices、hal三个分组,具体操作如下:

  2. 然后添加相关的文件到分组中,这些文件是我们刚刚拷贝的文件:

    • tos_at.c、sal_module_wrapper.c文件放在at分组中:

    • bc35_28_95.esp8266.c文件放在devices分组中:

    • tos_hal_usrt.c文件放在hal分组中:

添加完成后分组的文件如下:

然后尝试编译,可能会报错,因为相关头文件还没处理好。

拷贝相关头文件

  1. 拷贝at框架的头文件,在工程目录下创建以下路径的文件夹net\at\include,将TencentOS-tiny\net\at\include路径下的tos_at.h文件拷贝到新建的文件夹目录下:

添加头文件路径到工程

拷贝了头文件还需要将头文件添加进去到工程中,头文件路径如下:

将at框架的后端介绍融入工程中

只需要在stm32l4xx_it_module.c文件的HAL_UART_RxCpltCallback函数中添加以下代码即可:

    extern uint8_t data;if (huart->Instance == LPUART1) {HAL_UART_Receive_IT(&hlpuart1, &data, 1);tos_at_uart_input_byte(data);}

移植mqttclient

  1. 拷贝源码到工程目录下:首先在工程目录下创建一个components\connectivity文件夹,将TencentOS-tiny仓库中路径TencentOS-tiny\components\connectivity下的mqttclient文件夹拷贝到工程中:

  2. 在工程中创建分组:mqttclient、mqttclient/mqtt、mqttclient/salof、mqttclient/common、mqttclient/network、mqttclient/platform、mqttclient/config。

  3. 添加对应的文件,根据工程分组的目录进行添加即可,因为这些目录与工程分组的目录是一样的:

  4. 简单介绍mqttclient仓库文件夹

    • common文件夹:是一些通用的文件内容,比如链表的处理,错误代码的处理、随机数生成器、日志库等内容。

    • mqtt文件夹:著名的paho mqtt库。

    • mqttclient文件夹:实现mqttclient的主要文件,并且包含了一个默认的配置文件。

    • network文件夹:网络抽象层,封装了mbedtls加密库、网络数据的通道类型,自动选择tls加密传输或者是tcp直连。

    • platform文件夹:平台抽象层,此处封装了各种平台的内存管理、互斥锁、线程管理、时间管理等内容,如linux平台,freertos平台、rt-thread平台、TencentOS tiny平台等。

  5. 添加完成后的分组代码如下:

  6. 为工程添加mqttclient的头文件路径

  7. 编译代码,发现没有错误,则可以添加对应的例程,在工程目录的BSP\Src文件夹下创将一个mqttclient.c文件,然后添加以下代码:

    #include "stm32l4xx_hal.h"
    #include "mcu_init.h"
    #include "tos_k.h"
    #include "esp8266.h"
    #include "mqttclient.h"#define USE_ESP8266//#define USE_NB_BC35#ifdef USE_ESP8266
    static hal_uart_port_t esp8266_port = HAL_UART_PORT_0;void mqtt_set_esp8266_port(hal_uart_port_t port) {esp8266_port = port;
    }
    #endifstatic void tos_topic_handler(void* client, message_data_t* msg)
    {(void) client;MQTT_LOG_I("-----------------------------------------------------------------------------------");MQTT_LOG_I("%s:%d %s()...\ntopic: %s, qos: %d. \nmessage:\n\t%s\n", __FILE__, __LINE__, __FUNCTION__, msg->topic_name, msg->message->qos, (char*)msg->message->payload);MQTT_LOG_I("-----------------------------------------------------------------------------------\n");
    }void mqttclient_task(void)
    {int error;char buf[100] = { 0 };mqtt_client_t *client = NULL;mqtt_message_t msg;memset(&msg, 0, sizeof(msg));#ifdef USE_ESP8266 esp8266_sal_init(esp8266_port);esp8266_join_ap("wifii", "woshijiejie");
    #endif#ifdef USE_NB_BC35int bc35_28_95_sal_init(hal_uart_port_t uart_port);bc35_28_95_sal_init(HAL_UART_PORT_0);
    #endifmqtt_log_init();client = mqtt_lease();mqtt_set_port(client, "1883");mqtt_set_host(client, "www.jiejie01.top"); //111.230.189.156mqtt_set_client_id(client, random_string(10));mqtt_set_user_name(client, random_string(10));mqtt_set_password(client, random_string(10));mqtt_set_clean_session(client, 1);error = mqtt_connect(client);MQTT_LOG_D("mqtt connect error is %#x", error);mqtt_subscribe(client, "tos-topic", QOS0, tos_topic_handler);MQTT_LOG_D("mqtt subscribe error is %#x", error);memset(&msg, 0, sizeof(msg));for (;;) {sprintf(buf, "welcome to mqttclient, this is a publish test, a rand number: %d ...", random_number());msg.qos = QOS0;msg.payload = (void *) buf;error = mqtt_publish(client, "tos-topic", &msg);tos_task_delay(4000); }
    }void application_entry(void *arg)
    {mqttclient_task();while (1) {printf("This is a mqtt demo!\r\n");tos_task_delay(1000);}
    }
    
  8. 然后将其添加到工程中,最后,编译并下载到开发板上运行,注意需要修改你的wifi账号密码,效果如下:

本次移植教程结束。

源代码获取

可以关注微信公众号:

在后台回复“25”即可获取源代码

MQTT移植到stm32开发板——使用TencentOS tiny操作系统相关推荐

  1. BDW01手把手系列01:BDW01开发板基于TencentOS Tiny之helloworld!

    Hello world BDW01是一个接口资源十分丰富的物联网开发板. 本文先介绍开发板资源,然后是开发环境安装,环境搭建,最后在串口上输出创建的两个任务打印. 一.开发板BDW01入门介绍 1. ...

  2. 启明欣欣STM32开发板移植FreeRTOS

    承接这篇文章,本篇讲述如何把FreeRTOS移植到启明欣欣STM32开发板里,比较简单,网上也有各种教程,本文也是参考其它文章,这里再记录一下. 一 搭建基础工程 启明欣欣STM32开发板上的MCU是 ...

  3. 调试来自于逐飞的MM32F3277移植有MicroPython开发板

    简 介: 对于从逐飞寄送的MicroPython开发板进行初步测试,建立了基于REPL进行交互式开发的环境. 关键词: MicroPython,MM32,Thonny #mermaid-svg-BUT ...

  4. 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三章 M ...

  5. 【ALIENTEK 战舰STM32开发板例程系列连载+教学】第五十八章 UCOSII实验1-任务调度

    第五十八章 UCOSII实验1-任务调度 前面我们所有的例程都是跑的裸机程序(裸奔),从本章开始,我们将分3个章节向大家介绍UCOSII(实时多任务操作系统内核)的使用.本章,我们将向大家介绍UCOS ...

  6. Linux下使用vscode在线调试STM32开发板

    Linux下使用vscode在线调试STM32开发板 前言 一.安装vscode Cortex-Debug扩展 二.下载和安装STLink开发工具,这是Cortex-Debug需要的配套工具 三.配置 ...

  7. NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)

    为了开发者能够快速入门BC28的开发,加快开发者的项目进度,开发出此款针对BC28的stm32开发板和完善的发送网络数据的示例程序(TCP协议.COAP协议),程序流程逻辑清楚,注释完善,上手就可以玩 ...

  8. 判断按键值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十六章电容 ...

  9. 移植tslib到开发板及部分问题解决

    qt的tslib的具体移植步骤和过程就不多讲了,我说说我按照手册移植好tslib后在开发板运行提示的错误以及我的解决方法,当然每个人的提示可能一样,解决方法就不一样,我也是个初学者,所以方法仅供大家参 ...

最新文章

  1. ADO.NET 中的表达式
  2. P1507 NASA的食物计划
  3. 计算机频率、内存相关杂谈
  4. 考研本校与外校如何选择?
  5. Python中的strip()函数的用法
  6. 数据库——环境初建改端口和密码(转)
  7. nginx的日志文件配置
  8. neo4j安装_neo4j 社区版win10 下安装
  9. Linux_异常_08_本机无法访问虚拟机web等工程
  10. python中凯撒密码加密_凯撒密码加密
  11. 计算学生成绩 c语言,c语言项目实战2学生成绩的输入与计算.ppt
  12. 图片自动生成css,CSS Sprites Generator
  13. 《Thinking in java》-学习笔记(9)
  14. 计算机网络ip地址分类的范围,ip地址分类及范围_ip地址由什么组成
  15. Seata与Lcn的区别
  16. 【日语】日语一级句型强记
  17. 【Leetcode】| Largest Number
  18. 研究杜比视界和HDR近两个月后的各种经验和故事
  19. 逆向某视频app(一)
  20. 美容店多店会员管理系统

热门文章

  1. uniapp返回上一页携带参数,两种方法,实测有效
  2. 服务器esxi虚拟机升级,ESXi 服务器安装升级补丁
  3. ClickHouse实战--使用ReplacingMergeTree来更新数据
  4. 浅谈:基于物联网的固定资产管理技术
  5. Windbg MESC.dll 加载问题 The call to LoadLibrary(winext/MSEC.dll) failed, Win32 error 0n126
  6. Robot Arm from solidworks to ros
  7. 学习编程 最先学什么好
  8. 哈希图 vs 区块链,记账的快与慢
  9. 酒店点餐系统开发详解(一)
  10. 全球首富贝索斯宣布辞职!“我不想一直盯着流量,要用更多时间探索太空”...