0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于SIM800C和STM32 MQTT协议实现的程序设计

电子设计 作者:工程师飞燕 2018-10-17 08:03 次阅读

一、本教程中说明的内容

先说说本文化的适用范围吧:

一、使用的芯片STM32F103C8T6,但是并没有任何与平台相关的代码,应该在所有STM32芯片中都是可以用的。

二、本文使用的是SIM800C模块,驱动是用C++实现的,基于ARM mbed平台写的。但是从原理上来讲,C和C++差别不大,本文的代码经过修改也可以直接用于其他平台的使用。

三、本文数据传输使用的是“透传模式”,对于所有的透传模块,本文都有很大的参考意义。

二、MQTT的使用

首先,推荐一个MQTT的库:Paho,这个库支持非常多的平台,当然也包括了嵌入式平台:GitHub – paho.mqtt.embedded-c。将该库中的MQTTPacket文件夹下载下来,MQTTPacket文件夹下面主要有三个文件夹,我们使用的文件主要集中在src文件夹和samples文件夹中。

src文件夹中存放着MQTT核心功能的代码,而samples中存放着三个例子:pub00sub1、pub0sub1_nc、qos0pub和网络驱动(transport.c和transport.h)。

由于三个驱动都有一个main函数,所以无法同时存在,本文中只使用了pub0sub,所以将此文件夹内容精减到只有pub0sub1.c、transport.c、transport.h三个文件。

当然,在实现使用时可能会改变目录结构,使目录结构更加清楚,可以根据自己的喜好来进行更改,并不影响使用。

将transport.h的内容精减到以下内容:

主要的工作有:

1、为了方便表示,删除了版权信息,有实际使用时请保留。

2、没有使用pub0sub1_nc这个例子,所以将transport_getdatanb方法去除。

3、透传模块中使用不到socket,所以将与socket相关的参数去掉。

这些方法实现的主要功能是:

1、transport_open的作用是初始化模块连网的信息、transport_close作用是关闭链接。

2、transport_sendPacketBuffer用于发送数据、transport_getdata用于接收数据。

然后用transport.c来实现transport.h中声明的4个函数。

三、在ARM mbed中使用MQTT

首先说句题外话,自我感觉mbed是一个非常不错的平台,很大程度上提高了代码的可重用性。但也有一个问题,就是其支持是以开发板为单位的,所以并不是对每一种芯片的支持都很好。

首先介绍一个例子,HelloMQTT – a mercurial repository | mbed。但这个例子其中有很多不完善的地方,而且该例子使用的网络驱动也不是GPRS模块。

如果要用不同的连网方式,那么就写一个驱动,驱动中至少要包含以下两个方法:

这两个方法会在MQTTClient中自动调用,timeout表示毫秒。返回值为读或写的字节数。

对此,我写了驱动程序:MQTTGRPSEthernet.h


MQTTGRPSEthernet.cpp

主程序

lient的yield函数中用调用messageArrived函数,之前的示例给出的是100,可能是由于间太短的缘故,总是调用不了回调函数,所以我将其改的非常大,便于调试。实际使用时可以使用1000。

四、总结

其实paho embeded-c用起来还是挺方便的,但是代码的重要性不高,所以移植起来往往会让人无从下手。但深放研究就会发现其实使用起来是非常简单的。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2266

    文章

    10873

    浏览量

    354843
  • GPRS
    +关注

    关注

    21

    文章

    983

    浏览量

    129344
  • MQTT
    +关注

    关注

    5

    文章

    649

    浏览量

    22435
  • sim800c
    +关注

    关注

    1

    文章

    7

    浏览量

    6862
收藏 人收藏

    评论

    相关推荐

    请教SIM800C+STM32的电路 设置远程链接IP在SIM800C 还是在STM32芯片程序里?

    如题。请教SIM800C+STM32的电路 设置远程链接IP在SIM800C 还是在STM32芯片程序里?有没有序列号+ip地址单独设置的情况 ,芯片
    发表于 08-25 15:46

    sim800c总是自动关机

    单片机控制sim800c上网模块,插上物联卡和GSM天线,激活开机后,5-8秒之后 sim800c就会关机。测试了电源的电压是3.74V,关机的时候串口也没有返回数据。在sim800c开机的状态下
    发表于 09-26 16:15

    sim800c

    求大神指点sim800c实现物联网通信的使用方法,看了一部分资料,不是很理解
    发表于 10-20 08:06

    SIM800C的透传模式的问题

    什么CIPSEND。 不过这一步我已经实现了。 那服务器如何给SIM800C发数据,也要发CIPSEND吗? 我可以把数据发到网络调试助手,可是从网络助手往SIM800C发不知道怎么操作。 点击发送按钮,单片机收不到数据。 高手
    发表于 10-24 18:14

    sim800c例程不能实现触摸效果

    );实现了拨号功能,用的是f1战舰,但是对于短信的发送却没有办法实现sim800c串口测试一切正常,求解答,多谢。
    发表于 04-11 22:50

    sim800c例程不能实现触摸效果

    );实现了拨号功能,用的是f1战舰,但是对于短信的发送却没有办法实现sim800c串口测试一切正常,求解答,多谢。
    发表于 04-23 06:36

    sim800c使用MQTT时数据长度有什么限制?

    sim800c 使用MQTT时,数据长度的限制问题?问题:最近在使用STM32F1+SIM800C实现MQTT的时候,遇到一个问题。就是在发
    发表于 05-22 04:36

    STM8单片机给SIM800C发送AT指令,请问SIM800C串口怎么连接?

    通过STM8单片机给SIM800C发送AT指令,SIM800C串口怎么连接
    发表于 10-22 00:16

    SIM800C硬件手册

    板载SIM800C,电路图参考正点原子,出现问题:AT+CGATT=1 总返回err。网络指示灯总是显示无网络连接查阅SIM800C硬件手册,发现电源引脚如下描述:模块提供2个VBAT 电源引脚
    发表于 10-29 06:37

    sim800c模块应用实例分析

    ,可以低功耗实现语音、SMS和数据信息的传输。SIM800C尺寸为17.6*15.7*2.3mm,能适用于各种紧凑型产品设计需求。
    发表于 11-22 10:18 10.3w次阅读
    <b class='flag-5'>sim800c</b>模块应用实例分析

    SIM800C实现温湿度数据上传平台(MQTT协议

    SIM800C_ONENET_MQTT_接入文档 一、实现的功能:用SIM800C模块实现DHT11采集的温湿度数据上传ONENET平台(MQTT
    发表于 12-04 14:56 48次下载
    <b class='flag-5'>SIM800C</b><b class='flag-5'>实现</b>温湿度数据上传平台(<b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>)

    STM32 + SIM800C 实现MQTT协议资料下载

    电子发烧友网为你提供STM32 + SIM800C 实现MQTT协议资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料
    发表于 04-19 08:53 43次下载
    <b class='flag-5'>STM32</b> + <b class='flag-5'>SIM800C</b> <b class='flag-5'>实现</b><b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>资料下载

    SIM800C调试

    板载SIM800C,电路图参考正点原子,出现问题:AT+CGATT=1 总返回err。网络指示灯总是显示无网络连接查阅SIM800C硬件手册,发现电源引脚如下描述:模块提供2个VBAT 电源引脚
    发表于 10-22 14:36 13次下载
    <b class='flag-5'>SIM800C</b>调试

    STM32SIM800连接百度物接入MQTT服务器教程

    前言:  本文介绍如何运用STM32F103与SIM800C组成的设备端连接百度物接入的教程,文章中主要以介绍连接方法为主,代码部分后续考虑发布(一般情况下通过本文的参考即可完成与百度物接入的连接
    发表于 11-23 17:51 40次下载
    <b class='flag-5'>STM32</b>与<b class='flag-5'>SIM800</b>连接百度物接入<b class='flag-5'>MQTT</b>服务器教程

    SIM800C开发板用户手册

    SIM800C模块用户手册,用实验例子交你学会使用SIM模块。
    发表于 04-07 11:31 105次下载