Arduino通信協議設計

最近在一直在研究Arduino硬件平臺的東西,先從做一個簡單的東西入手,比如說,我通過Android端向Arduino硬件發送指令,控制電機的正轉、反轉。其中一個必不可少的問題就是這兩個端設備之間的通信問題。它們之間的通信可以通過藍牙模塊來完成,此外,還需要自己設計通信協議。

分析

從最簡單的模塊開始,需求就是控制電機的旋轉:反轉和正轉。再考慮最實際的硬件設備情況:

Arduino開發板包含四個端口,每個端口都有標號,1-4。可以將電機連接在這四個端口的其中一個端口。上位機通過藍牙模塊向底層的硬件設備發送控制命令。比如說:讓某個端口上的某個電機正轉或者反轉。

設計

上位機實際發送的數據格式如下,主要包含4個字段:

協議首部

指令長度

控制指令

校驗和

其中,“協議首部”就是數據包的開始部分,比如說統一指定爲0xAA;“指令長度”表示“控制指令”字段的長度;“控制指令”就是上位機實際發送的對底層硬件設備的控制命令;“校驗和”是“控制指令”各個數據位進行異或計算的結果。比如說:一個合法的數據包可以是這樣的”AA 03 D1 D2 D3 D4”,其中,D4是校驗和,D4=D1^D2^D3。

對於“控制指令”需要進一步設計。對於電機來說,控制指令可以設計成如下格式:

設備類型

設備號

端口號

其中,“設備類型”就是指定是哪一種設備,比如說,電機,LED,蜂鳴器等;“設備號”就是設備的標號,可以爲1,2,3,等;“端口號”就是指該設備連接在哪個端口上面。

編程思路

Arduino是串口發送的,也就是說數據包是一位一位地發送的,因此需要先將接收的數據保存起來,然後按位進行解析。解析出各個字段的含義以後就可以按照Arduino硬件平臺的類C語言進行編程控制硬件設備了。剩下的問題就是寫代碼的問題了,so easy!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章