一、本教程中說明的內(nèi)容
先說說本文化的適用范圍吧:
一、使用的芯片是STM32F103C8T6,但是并沒有任何與平臺(tái)相關(guān)的代碼,應(yīng)該在所有STM32芯片中都是可以用的。
二、本文使用的是SIM800C模塊,驅(qū)動(dòng)是用C++實(shí)現(xiàn)的,基于ARM mbed平臺(tái)寫的。但是從原理上來講,C和C++差別不大,本文的代碼經(jīng)過修改也可以直接用于其他平臺(tái)的使用。
三、本文數(shù)據(jù)傳輸使用的是“透?jìng)髂J健?,?duì)于所有的透?jìng)髂K,本文都有很大的參考意義。
二、MQTT的使用
首先,推薦一個(gè)MQTT的庫:Paho,這個(gè)庫支持非常多的平臺(tái),當(dāng)然也包括了嵌入式平臺(tái):GitHub – paho.mqtt.embedded-c。將該庫中的MQTTPacket文件夾下載下來,MQTTPacket文件夾下面主要有三個(gè)文件夾,我們使用的文件主要集中在src文件夾和samples文件夾中。
src文件夾中存放著MQTT核心功能的代碼,而samples中存放著三個(gè)例子:pub00sub1、pub0sub1_nc、qos0pub和網(wǎng)絡(luò)驅(qū)動(dòng)(transport.c和transport.h)。
由于三個(gè)驅(qū)動(dòng)都有一個(gè)main函數(shù),所以無法同時(shí)存在,本文中只使用了pub0sub,所以將此文件夾內(nèi)容精減到只有pub0sub1.c、transport.c、transport.h三個(gè)文件。
當(dāng)然,在實(shí)現(xiàn)使用時(shí)可能會(huì)改變目錄結(jié)構(gòu),使目錄結(jié)構(gòu)更加清楚,可以根據(jù)自己的喜好來進(jìn)行更改,并不影響使用。
將transport.h的內(nèi)容精減到以下內(nèi)容:
主要的工作有:
1、為了方便表示,刪除了版權(quán)信息,有實(shí)際使用時(shí)請(qǐng)保留。
2、沒有使用pub0sub1_nc這個(gè)例子,所以將transport_getdatanb方法去除。
3、透?jìng)髂K中使用不到socket,所以將與socket相關(guān)的參數(shù)去掉。
這些方法實(shí)現(xiàn)的主要功能是:
1、transport_open的作用是初始化模塊連網(wǎng)的信息、transport_close作用是關(guān)閉鏈接。
2、transport_sendPacketBuffer用于發(fā)送數(shù)據(jù)、transport_getdata用于接收數(shù)據(jù)。
然后用transport.c來實(shí)現(xiàn)transport.h中聲明的4個(gè)函數(shù)。
三、在ARM mbed中使用MQTT
首先說句題外話,自我感覺mbed是一個(gè)非常不錯(cuò)的平臺(tái),很大程度上提高了代碼的可重用性。但也有一個(gè)問題,就是其支持是以開發(fā)板為單位的,所以并不是對(duì)每一種芯片的支持都很好。
首先介紹一個(gè)例子,HelloMQTT – a mercurial repository | mbed。但這個(gè)例子其中有很多不完善的地方,而且該例子使用的網(wǎng)絡(luò)驅(qū)動(dòng)也不是GPRS模塊。
如果要用不同的連網(wǎng)方式,那么就寫一個(gè)驅(qū)動(dòng),驅(qū)動(dòng)中至少要包含以下兩個(gè)方法:
這兩個(gè)方法會(huì)在MQTTClient中自動(dòng)調(diào)用,timeout表示毫秒。返回值為讀或?qū)懙淖止?jié)數(shù)。
對(duì)此,我寫了驅(qū)動(dòng)程序:MQTTGRPSEthernet.h
MQTTGRPSEthernet.cpp
主程序
lient的yield函數(shù)中用調(diào)用messageArrived函數(shù),之前的示例給出的是100,可能是由于間太短的緣故,總是調(diào)用不了回調(diào)函數(shù),所以我將其改的非常大,便于調(diào)試。實(shí)際使用時(shí)可以使用1000。
四、總結(jié)
其實(shí)paho embeded-c用起來還是挺方便的,但是代碼的重要性不高,所以移植起來往往會(huì)讓人無從下手。但深放研究就會(huì)發(fā)現(xiàn)其實(shí)使用起來是非常簡(jiǎn)單的。
-
STM32
+關(guān)注
關(guān)注
2264文章
10858瀏覽量
354395 -
GPRS
+關(guān)注
關(guān)注
21文章
983瀏覽量
129309 -
MQTT
+關(guān)注
關(guān)注
5文章
648瀏覽量
22393 -
sim800c
+關(guān)注
關(guān)注
1文章
7瀏覽量
6848
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論