1. 程式人生 > 實用技巧 >手把手教你開發IOT裝置

手把手教你開發IOT裝置

手把手教你開發IOT裝置

1.概述

IOT裝置的開發是基於rt-thread rtos實現。rt-thread是一個國產RTOS,它是一個RTOS,但又不僅僅是RTOS,支援大量的晶片,驅動,還包含大量的軟體包,為開發者提供非常大的便利,這也是我喜歡rt-thread的原因之一。統一的驅動介面,為上層應用開發也帶來很大的便利。本次所講的IOT裝置基本都是採用rt-thread提供的軟體包。下面我來將,如何開發IOT裝置

IOT裝置的開發我會持續更新,文章寫的只是個大概的實現方案和框架。待我完成整個裝置的程式碼和硬體設計後,我會跟著出一套硬體來給開源給大家的作為學習參考。

如有疑問或者有其他想法的可以發郵件給我:

[email protected]

2.功能設計

2.1.乙太網連線(MQTT/TCP/UDP)

MQTT模式 遠端連線物聯網平臺,支援裝置引數設定和獲取,支援資料上報

TCP SERVER 模式支援本地區域網連線IOT裝置,支援3個客戶端連線,初版不支援TCP SERVER,這個功能暫時不實現

UDP SERVER 模式支援本地區域網內發現IOT裝置和基礎引數配置,但不支援資料主動上報

2.2.路繼電器輸出

遠端控制繼電器的閉合 斷開,並記錄動作時間以及動作

2.3.路開關量輸入

遠端採集開關量的值

2.4.溫溼度檢測

定期採集溫溼度,並與設定的上限值和下限值對比,如果超限則上報,並實時記錄採集的溫溼度

2.5.RS485透傳採集

2.6.實時時間及掉電執行

2.7.遠端OTA

3.硬體框架

硬體框架

框圖說明

主控晶片採用的是STM32F405RE

乙太網晶片採用ENC28J60,用於聯網

RS485 採用 max485,用於透傳

UART 用於列印除錯資訊

2路開關量輸入,光耦隔離

2路繼電器輸出,10A

時鐘是採用STM32 內部RTC模組

溫溼度感測器 SHT20

FLASH儲存 W25Q64

4.軟體框架

軟體框架

整個軟體框架是基於rt-thread RTOS來實現的,其中包含核心,BSP,元件軟體包都是基於rt-thread的。在這個框架下我們來快速搭建開發產品

5.IOT通訊協議設計及實現

協議結構說明

通訊協議在通訊中是非常重要的,是連線兩個終端的互動方式。所以通訊協議設計也是至關重要的。下面來看看我設計的通訊協議

協議結構

1

2

3

4

5

6

7

8

9

10

10~n

n+1

起始位元組

長度

校驗位元組

協議引數

訊息ID

資料內容

結束位元組

0x3E

0xNNNN

CRC16

0xNN

0xNNNNNNNN

dlenght

0x0A

協議說明

起始位元組:表示該訊息的開始

長度:從長度的第一位元組開始 到 資料的最後一個位元組,不包含起始位元組和結束位元組

校驗位元組:用於校驗該訊息的準確性,確保訊息沒有被修改過,從協議引數開始 到資料結束

協議引數:

第1位:表示方向幀,0:請求,1:應答

訊息ID:表示訊息的唯一性識別符號,訊息ID的生成方式是

資料內容:JSON格式訊息

結束位元組:表示訊息結束

傳送順序:

先發送低位元組,再發送高位元組

用途:

用於MQTT/TCP/UDP通訊方式中

介面說明

獲取IOT裝置資訊

介面名稱:

get_iot_dev_info

請求引數

返回結果

dev_sn

裝置序列號

JSON包

請求JSON包

{

"function":"get_iot_dev_info",

"data":{

}

}

迴應JSON包

{

"function":"get_iot_dev_info"

“result”:0,

"data":{

“dev_sn”:124151514141

“ip”:”192.168.1.112”

}

}

設定MQTT資訊

介面名稱:

set_mqtt_info

請求引數

dev_sn

裝置序列號

username

Mqtt使用者名稱

password

Mqtt密碼

clientid

客戶端ID

返回結果

JSON包

請求JSON包

{

"function":"set_mqtt_info"

"data":{

“dev_sn”:13141413,

“username”:””xxx,

“password”:”11111”,

“clientid”:”123131”

}

}

迴應JSON包

{

"function":" set_mqtt_info",

“result:0,”

"data":{

}

}