資料介紹
一、本教程中說明的內(nèi)容
先說說本文化的適用范圍吧:
一、使用的芯片是STM32F103C8T6,但是并沒有任何與平臺相關(guān)的代碼,應(yīng)該在所有STM32芯片中都是可以用的。
二、本文使用的是SIM800C模塊,驅(qū)動是用C 實(shí)現(xiàn)的,基于ARM mbed平臺寫的。但是從原理上來講,C和C 差別不大,本文的代碼經(jīng)過修改也可以直接用于其他平臺的使用。
三、本文數(shù)據(jù)傳輸使用的是“透傳模式”,對于所有的透傳模塊,本文都有很大的參考意義。
二、MQTT的使用
首先,推薦一個MQTT的庫:Paho,這個庫支持非常多的平臺,當(dāng)然也包括了嵌入式平臺:GitHub – paho.mqtt.embedded-c。將該庫中的MQTTPacket文件夾下載下來,MQTTPacket文件夾下面主要有三個文件夾,我們使用的文件主要集中在src文件夾和samples文件夾中。
src文件夾中存放著MQTT核心功能的代碼,而samples中存放著三個例子:pub00sub1、pub0sub1_nc、qos0pub和網(wǎng)絡(luò)驅(qū)動(transport.c和transport.h)。
由于三個驅(qū)動都有一個main函數(shù),所以無法同時(shí)存在,本文中只使用了pub0sub,所以將此文件夾內(nèi)容精減到只有pub0sub1.c、transport.c、transport.h三個文件。
當(dāng)然,在實(shí)現(xiàn)使用時(shí)可能會改變目錄結(jié)構(gòu),使目錄結(jié)構(gòu)更加清楚,可以根據(jù)自己的喜好來進(jìn)行更改,并不影響使用。
將transport.h的內(nèi)容精減到以下內(nèi)容:
主要的工作有:
1、為了方便表示,刪除了版權(quán)信息,有實(shí)際使用時(shí)請保留。
2、沒有使用pub0sub1_nc這個例子,所以將transport_getdatanb方法去除。
3、透傳模塊中使用不到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個函數(shù)。
三、在ARM mbed中使用MQTT
首先說句題外話,自我感覺mbed是一個非常不錯的平臺,很大程度上提高了代碼的可重用性。但也有一個問題,就是其支持是以開發(fā)板為單位的,所以并不是對每一種芯片的支持都很好。
首先介紹一個例子,HelloMQTT – a mercurial repository | mbed。但這個例子其中有很多不完善的地方,而且該例子使用的網(wǎng)絡(luò)驅(qū)動也不是GPRS模塊。
如果要用不同的連網(wǎng)方式,那么就寫一個驅(qū)動,驅(qū)動中至少要包含以下兩個方法:
這兩個方法會在MQTTClient中自動調(diào)用,timeout表示毫秒。返回值為讀或?qū)懙淖止?jié)數(shù)。
對此,我寫了驅(qū)動程序:
MQTTGRPSEthernet.h
#pragma once
#if !defined(MQTTGPRSETHERNET_H)
#define MQTTGPRSETHERNET_H
#define DEFAULT_GPRS_TIMEOUT 6000000 //6s
#define SERIAL_BUFFER_SIZE 256
#include "mbed.h"
class MQTTGPRSEthernet
{
public:
MQTTGPRSEthernet(PinName tx, PinName rx, int baudrate = 115200);
~MQTTGPRSEthernet();
bool initNet(const char* apn, const char* userName = "", const char* passWord = "", int timeout = DEFAULT_GPRS_TIMEOUT, bool isReconnect = false);
bool connect(char* hostname, int port, int timeout = DEFAULT_GPRS_TIMEOUT);
int read_line(char* buffer, int timeout = DEFAULT_GPRS_TIMEOUT);
int read(unsigned char* buffer, int len, int timeout = DEFAULT_GPRS_TIMEOUT);
int write(unsigned char* buffer, int len, int timeout = DEFAULT_GPRS_TIMEOUT);
bool disconnect();
private:
bool initNet();
Serial eth;
bool command(const char* cmd, const char* ack = "");
bool connected = false;
bool initialized = false;
char* localIP;
const char *_apn;
const char *_passWord;
const char *_userName;
};
#endif
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用起來還是挺方便的,但是代碼的重要性不高,所以移植起來往往會讓人無從下手。但深放研究就會發(fā)現(xiàn)其實(shí)使用起來是非常簡單的。
轉(zhuǎn)載自TsonTec:測量解決方案提供者
(mbbeetchina)
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- SIM800C開發(fā)板資料 7次下載
- STM32 SIM800L繼電器控制板
- SIM800C開發(fā)板用戶手冊 105次下載
- STM32與SIM800連接百度物接入MQTT服務(wù)器教程
- SIM800C使用STC89C52單片機(jī)讀寫短信
- SIM800C調(diào)試
- 基于TFTP協(xié)議實(shí)現(xiàn)STM32的IAP資料下載
- SIM800 GSM模塊系列指令手冊資料免費(fèi)下載 0次下載
- ATK-SIM800C GSM模塊的17個常見問題資料匯總免費(fèi)下載 34次下載
- SIM800 MINI板GPRS模塊資料包合集免費(fèi)下載 75次下載
- SIM800C GPRS模塊的電路原理圖免費(fèi)下載 69次下載
- SIM800C開發(fā)板的電路原理圖免費(fèi)下載 0次下載
- 手機(jī)藍(lán)牙和SIM800C中的藍(lán)牙通訊軟件免費(fèi)下載 17次下載
- STM32和MQTT及SIM800使用AT指令實(shí)現(xiàn)的詳細(xì)資料合集免費(fèi)下載 153次下載
- SIM800C實(shí)現(xiàn)溫濕度數(shù)據(jù)上傳平臺(MQTT協(xié)議) 48次下載
- MQTT和Modbus協(xié)議的區(qū)別 1899次閱讀
- MQTT通信協(xié)議和工具包簡介 1266次閱讀
- paho-mqtt模塊實(shí)戰(zhàn) 1113次閱讀
- MQTT協(xié)議的概念和主要特性 MQTT協(xié)議于物聯(lián)網(wǎng)有何好處 2230次閱讀
- 深入淺出地學(xué)習(xí)MQTT協(xié)議 975次閱讀
- MQTT協(xié)議簡介及協(xié)議原理 6718次閱讀
- 【產(chǎn)品應(yīng)用】GLCOM-NET網(wǎng)關(guān)一分鐘實(shí)現(xiàn)LoRa轉(zhuǎn)MQTT(高階版) 2098次閱讀
- 小凌派RK2206開發(fā)板:實(shí)現(xiàn)基于OpenHarmony的本地MQTT協(xié)議 4558次閱讀
- HTTP及MQTT比較分析 5617次閱讀
- 如何移植MQTT物聯(lián)網(wǎng)通信協(xié)議 4273次閱讀
- SIM800C模塊和SIM900A模塊對比 2.4w次閱讀
- MQTT工業(yè)級無線路由器的特點(diǎn) 1654次閱讀
- 根據(jù)WebSocket協(xié)議完全使用C++實(shí)現(xiàn)函數(shù) 4610次閱讀
- 基于Android智能終端的虛擬SIM卡軟件實(shí)現(xiàn) 2.6w次閱讀
- STM32F103C8T6引腳圖 43.6w次閱讀
下載排行
本周
- 1TPS54202H降壓轉(zhuǎn)換器評估模塊用戶指南
- 1.02MB | 7次下載 | 免費(fèi)
- 2華瑞昇CR215芯片數(shù)字萬用表原理圖
- 0.21 MB | 1次下載 | 3 積分
- 3SMD LED選型目錄 燈珠手冊
- 5.36 MB | 1次下載 | 免費(fèi)
- 4Tiva C系列DK-TM4C129X入門指南
- 1.69MB | 1次下載 | 免費(fèi)
- 5電涌保護(hù)器(SPD)的選擇、安裝以及裝配
- 4.57 MB | 1次下載 | 免費(fèi)
- 6時(shí)源芯微EMC前車燈案例
- 458.59 KB | 1次下載 | 免費(fèi)
- 7bq25890、bq25892雙級聯(lián)充電器EVM(PWR692)用戶指南
- 2.02MB | 1次下載 | 免費(fèi)
- 8TPS54426降壓轉(zhuǎn)換器評估模塊用戶指南
- 847.7KB | 次下載 | 免費(fèi)
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 156次下載 | 免費(fèi)
- 22024PMIC市場洞察
- 2.23 MB | 63次下載 | 免費(fèi)
- 3開關(guān)電源設(shè)計(jì)原理手冊
- 1.83 MB | 30次下載 | 免費(fèi)
- 4智能門鎖原理圖
- 0.39 MB | 28次下載 | 免費(fèi)
- 5OAH0428最新規(guī)格書(中文)
- 2.52 MB | 15次下載 | 7 積分
- 6ST7789V2單芯片控制器/驅(qū)動器英文手冊
- 3.07 MB | 9次下載 | 1 積分
- 7LTH7充電電路和鋰電池升壓5V輸出電路原理圖
- 0.04 MB | 7次下載 | 免費(fèi)
- 8TPS54202H降壓轉(zhuǎn)換器評估模塊用戶指南
- 1.02MB | 7次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183334次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評論
查看更多