mqtt協議在stm32上的移植
開發平台
軟體環境
硬體環境
參考文件
本篇是mqtt在stm32裝置上的移植,因此使用paho的嵌入式c
庫,原始碼位址
移植
首先,需要將
../paho.mqtt.embedded-c/mqttpacket/
中的所有檔案新增到keil工程檔案,然後參考
../paho.mqtt.embedded-c/mqttpacket/samples/
中的例程編寫。
移植的前提是保證已經建立tcp連線,因為mqtt協議實在tcp基礎上的資料傳輸協議。本實驗使用sim800c無線通訊模組先與mqtt伺服器建立tcp連線(使用透傳模式),再通過串列埠與stm32建立通訊聯絡。
介面函式
移植主要參考修改庫中的
../paho.mqtt.embedded-c/mqttpacket/samples/transport.c
例程檔案
,且主要是transport_sendpacketbuffer()和transport_getdata()函式,分別用來作為硬體實現傳送和接收資料報的介面函式,因此需要針對硬體平台做相應修改。 1
2 34 5
6 78 9
10 11
12 13
14 15
16 17
18 19
int32_t transport_sendpacketbuffer(uint8_t* buf, uint32_t buflen)
int32_t transport_getdata(uint8_t* buf, int32_t count)
連線1 2
3 45 6
7 89 10
11 12
13 14
15 16
17 18
19 20
21 22
23 24
25 26
27 28
29 30
31 32
33 34
35 36
37 38
39 40
41 42
43 44
uint8_t mqtt_connect(void)
else }
else
printf("no connack\n");
return 0; }
訂閱和發布函式1 2
3 45 6
7 89 10
11 12
13 14
15 16
17 18
19 20
21 22
23 24
25 26
27 28
29 30
31 32
33 34
35 36
37 38
39 40
41 42
43 44
45 46
47 48
49 50
51 52
53 54
55 56
57 58
void mqtt_publish(char *ppubtopic, char *pmessage)
uint8_t mqtt_subscribe(char *psubtopic)
; uint32_t buflen = sizeof(buf);
int32_t msgid = 1;
int32_t req_qos = 0;
uint32_t rc, len = 0;
mqttstring topicstring = mqttstring_initializer;
topicstring.cstring = psubtopic;
len = mqttserialize_subscribe(buf, buflen, 0, msgid, 1, &topicstring, &req_qos);
rc = transport_sendpacketbuffer(buf, len);
reset_receive_buf();
if (mqttpacket_read(buf, buflen, transport_getdata) == suback) /* wait for suback */
else }
else
printf("no suback received!\r\n");
return 0; }
接收資料報解析函式1 2
MODBUS協議在STM32上實現 一
第一節 通訊的硬體協議機制 主從模式的建立 目的 實現在modbus的從機實現 1.硬體層協議 解決傳輸問題,相當於路 2.軟體層協議 舉例 例如rs232 傳送1是多少v,傳送0是多少v 485協議 這個硬體晶元是廠商做到一起的,一般需要有一根控制線用開判斷是哪種模式 can硬體協議也是類似的 1...
ProtoThread在STM32上實現跑馬燈
protothread相關介紹,原始碼獲取等請到我的另乙個博文閱讀 protothread的介紹 protothread優缺點都有,它實現了乙個輕量級的基於事件觸發的執行緒模型,特別適用於走台階似的一級一級的往下走問題處理,你到了某個台階上,不走了,去了一趟廁所,回來後可以從這個台階上繼續往前走,不...
在STM32上移植FreeRTOS
freertos是乙個迷你的實時作業系統核心。作為乙個輕量級的作業系統,功能包括 任務管理 時間管理 訊號量 訊息佇列 記憶體管理 記錄功能 軟體定時器 協程等,可基本滿足較小系統的需要。開啟後如下如顯示 為了避免出錯,請將路徑改為全英文 將主程式改為如下 include freertos.h in...