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
    +关注

    关注

    2232

    文章

    10650

    浏览量

    347873
  • GPRS
    +关注

    关注

    21

    文章

    980

    浏览量

    128508
  • MQTT
    +关注

    关注

    5

    文章

    527

    浏览量

    21886
  • sim800c
    +关注

    关注

    1

    文章

    7

    浏览量

    6730
收藏 人收藏

    评论

    相关推荐

    请教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 GPRS模块怎么区分AT命令的返回值和服务器来的数据?

    目前在进行SIM800C的开发,现在使用STM32F1+SIM800C 的搭配,想要实现通过GPRS跟服务器的数据通信现在有个问题是我的STM32通过USART1跟
    发表于 04-12 06:36

    sim800c例程不能实现触摸效果

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

    请问有SIM800C固件代码吗?

    现在用的开发板是F407,现在想做远程监控,通过现场传感器感受到危险后通过短信告诉远方的主人,买了一个SIM800C模块,但是由于SIM800C体积有点大无奈只能想照着模块自己画一个用,但是想问SIM800C固件代码各位朋友有吗
    发表于 05-08 23:15

    SIM800C模块怎么实现语音播报把信息内容播放出来

    目前我已实现SIM800C发送短信功能,同时我又想让语音播报把信息内容播放出来,是否可以实现?能够将0.5W的小喇叭接到耳机接口?又是如何接线的。如果SIM800C模块外接个功放 再
    发表于 05-20 04:38

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

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

    SIM800C激活开机后自动关机

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

    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实现温湿度数据上传平台(MQTT协议

    SIM800C_ONENET_MQTT_接入文档 一、实现的功能:用SIM800C模块实现DHT11采集的温湿度数据上传ONENET平台(MQTT
    发表于 12-04 14:56 47次下载
    <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 41次下载
    <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>资料下载