在GPRS模块(SIM800C)和STM32芯片上实现MQTT协议(HAL版)

嘎子 单片机 2017-12-26 267 次浏览 , , , 1条评论

自己又勤快起来,把使用SIM800C芯片连接MQTT服务器用HAL库实现一下。现在只是把路子感觉走通了,但还没有调试(手头没有硬件)。先把自己现在做到的东西记录一下。

费话不多说,立刻开始:

一、根据自己的开发板选定两个串口。

本例中,开发板使用的是STM32F103C8的开发板,使用了UART1和UART2两个串口,其中UART1用于与SIM800通信,UART2用于调试信息的输出调试信息。

具体的生成过程可以参考以下博客,我就不做重复工作了:

STM32CubeMX软件工程描述_USART配置过程 - strongerHuang - 博客园

二、移植MQTT

为了增强其适用性,所以选择从0开始移植MQTT。这是一个相对比较复杂的过程,下面就一一进行讲解。

2.1移植什么版本的MQTT

我选择的是Eclipse Paho - MQTT and MQTT-SN software,这里有一个问题非常关键,那就是尽量选择那种可靠性高与功能比较完整的版本进行移植。之前就遇到过移植了一个不是非常完善的版本,在一个MQTT服务器上能正常运行,到另外一个服务器上没有办法正常运行了,自己花了几天几夜来查找问题,好不容易找到问题又花了好几天修改了这个问题,所以自己移植的是现在最流行,使用最广泛的MQTT库。

2.2下载并将库文件导入项目

首先,将Eclipse Paho的嵌入式库下载下来,地址为:GitHub - eclipse/paho.mqtt.embedded-c

里面包括了非常多的内容。本文只实现最基本的功能,只使用MQTTPacket这个文件夹即可。这个文件夹中是MQTT协议中最基本的部分,MQTTPacket文件夹下面主要有三个文件夹,我们使用的文件主要集中在src文件夹和samples文件夹中。

  • MQTTPacket - simple de/serialization of MQTT packets, plus helper functions
  • The MQTTPacket directory contains the lowest level C library with the smallest requirements. This supplies simple serialization and deserialization routines. They serve as a base for the higher level libraries, but can also be used on their own It is mainly up to you to write and read to and from the network.

上面是一个说明,就是说这个文件夹是最基本的,我们将src文件夹中的内容全部拷到项目目录中,然后用一个文本编辑器打开samples文件夹中的pub0sub1.c文件,参考pub0sub1.c文件来改写之前项目的main.c文件。

2.3 在main函数中实现MQTT功能

我先帮大家分析一下pub0sub1.c中的main函数,然后我们仿照这个main函数改写CubeMx生成的项目的main函数就可以了。

其实上面这段代码里主要有两个问题:

一是:我们解决之后就可以正常使用MQTT了,第一个是数据发送问题,上面的代码中使用的是 transport_sendPacketBuffer(mysock, buf, len);,我们完全可以使用HAL的库函数HAL_UART_Transmit来代替。

二是:transport_getdata函数,这个函数并不复杂,要自己重新写一个。

三、总结

这样MQTT就移植完了。如果有什么问题,大家可以问我,我也尽量帮大家解答。

原创文章,文章首发于:Riley Ge (@rileyge) — Steemit

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: 在GPRS模块(SIM800C)和STM32芯片上实现MQTT协议(HAL版)

相关主题

  • 在GPRS模块(SIM800C)和STM32芯片上实现MQTT协议2017-05-18 在GPRS模块(SIM800C)和STM32芯片上实现MQTT协议 (12)
    ------------------写在最前面---------------------------- 本文基本完全公开了自己怎么处理的STM32和SI […]
  • 通过Paho客户端接入OneNet2017-05-12 通过Paho客户端接入OneNet (1)
    首先说本文想要说明一个什么问题:OneNet平台支持MQTT协议,但给的资料非常有限。而Paho是一个开源的,MQTT的各种服务器、客户端的集成。本文要做的就 […]
  • 阿里云/aliyun的IoT套件中MQTT协议的使用(二)2017-12-31 阿里云/aliyun的IoT套件中MQTT协议的使用(二) (0)
    很早之前写过一篇文章,阿里云IoT套件中MQTT协议的使用,现在看了一下觉得还是挺坑的,说白了什么都没写。我本来是一个比较懒的人,也没有什么心情来更新这个文章 […]
  • 阿里云IoT套件中MQTT协议的使用2017-05-28 阿里云IoT套件中MQTT协议的使用 (0)
    今天,阿里云给我发来邮件,说我申请的IoT套件已经可以申请了,虽然我不记得自己什么时候申请过了,但请我试用就试用一下呗。我看这个阿里云的这个东东有两个节点,一 […]
  • 超高性价比,完虐STC的单片机推荐:STM82016-05-23 超高性价比,完虐STC的单片机推荐:STM8 (5)
    受一个做LED的朋友的启发,这几天研究了一下一个新的单片机:意法的STM8系列。然后今天又和他聊了一下,下面是截图: 在看STM8的时候真的有那种把ST […]
  • 写点关于BK2461,甚至是整个国产芯片的事2017-07-26 写点关于BK2461,甚至是整个国产芯片的事 (3)
    最近使用了一款国产的芯片,BK2461,可能很多人并不知道这个芯片,是的,这个芯片使用的挺少的。但如果你了解一下这个芯片,你会发现这个芯片的强大之处。 […]

说点什么

1 评论 在 "在GPRS模块(SIM800C)和STM32芯片上实现MQTT协议(HAL版)"

提醒
avatar
排序:   最新 | 最旧 | 得票最多
JasonYu
游客
JasonYu

我有定制需求,请联系我 QQ: 22769835

wpDiscuz
回顶部