



關鍵詞:串口;字符指令;LED燈;物聯網
0 引言
Zigbee技術是一種適用于短距離和低速率下的無線通信技術[1]。隨著物聯網技術的飛速發展,經常會用到通過串口指令來達到控制LED燈亮滅的目的。本文針對Zigbee開發板上的4個LED燈,以場景使用兩位字符指令來控制4個LED燈的亮滅為例,詳細分析了在教學過程中針對此類場景的程序設計思路,并使用多種方法編程實現使用指令控制LED燈的亮滅,以此來達到讓學生掌握串口通信中如何用指令來控制燈狀態的目的。
1 串口通信
串口是串行接口的簡稱,也稱為串行通信接口。串口通過將一個字節的各個位依次發送來實現數據傳輸,也就是在一條信號線上將數據一個比特一個比特地逐位進行傳輸的通信模式。相比較而言,按字節(byte) 來傳輸的并行通信在傳輸速度上更快一些,但是串口通信可以在不同線路同時實現發送數據和接收數據,因此串行通信可以很簡單地實現遠距離通信[2]。
2 Zigbee 開發板中LED 燈的介紹
本文使用的是CC2530 Zigbee開發板,其中有4個LED燈D3/D4/D5/D6,對應的引腳分別為P1_0、P1_1、P1_3、P1_4[3]。如圖1所示。
在使用這4個LED燈之前,可以對LED燈和對應引腳做宏定義,來定義燈和引腳的對應關系[4]。當然也可以直接用引腳來表示對應的LED燈。但是為了程序的可讀性,最好先用宏定義來定義燈和引腳的對應關系。
在程序的開發過程中,就可以使用D3來代替P1_0,從而使代碼更加清晰易讀。
3 實際場景應用
3.1 項目需求
現實生活中有很多使用指令來控制燈亮滅的具體場景[5]。下面通過一個具體的案例來詳細討論如何用指令具體控制LED燈的亮滅,并通過編寫程序完成用不同指令分別控制四個燈的亮滅。場景要求如表1 所示。
3.2 項目分析
首先使用宏定義來確定四個LED燈和引腳的對應關系。即:
#define D4 P1_1
#define D3 P1_0
#define D6 P1_4
針對項目要實現的功能,8條指令分別控制4個LED的亮滅,初步分析程序的設計思路,首先要判斷接收到的字符指令是否合法,如果合法,再根據指令內容判斷要控制哪個LED燈的亮滅狀態。
因此,程序設計可以分為兩部分,接收指令部分和指令控制部分。接收指令部分負責判斷是否符合指令組合規則,如果符合,就存入指定數組,否則,不予接收。而指令控制部分負責對接收到的指令進行判斷,屬于控制哪個燈進行哪些狀態的改變。
3.3 具體程序設計
3.3.1 接收指令部分
對接收到的字符進行分析,如果第一個字符是1 或2或3或4其中之一,那么表示合法指令開始,繼續接收第2個字符。如果不是 1或2或3或4中的字符,表示是非法指令,不予接收。因此在判斷接收的指令是否是合法指令時,需要用選擇結構去判定。當接收的是合法指令時,將接收的兩位字符指令依次存入指定數組。
因此根據以上分析過程,可以設計接收指令的程序如下:
3.3.2 指令控制部分
由于項目要求兩位指令控制4個LED燈的亮滅,因此只需要對接收到的兩位字符進行內容判斷,來確定控制4個LED燈中的哪一個燈的亮滅狀態即可。
那么如何來判斷是哪兩位字符?最簡單的辦法就是通過數組的下標來判斷。當下標大于1時,說明數組里已經存入了兩個字符。接收指令結束,可以進行指令控制部分的程序設計了。
用指令來控制4個LED燈的亮滅,主要是看指令中兩個字符的組合,來判斷符合控制哪個LED燈的指令,從而去實現預期效果。因此,可以通過多種方法進行程序設計來實現。
方法1:
由于第一個字符是1234中其中一個,因此需要判斷第二個字符是否是*,如果是*,那么再根據第一個字符是1234 中哪一個來判斷控制哪個燈亮,使用switch語句可以非常方便地設計1234字符的選擇問題。然后再判斷第二個字符是否是0,如果是0,那么再根據第一個字符是1234中哪一個來判斷控制哪個燈滅。因此第一種程序設計方法如下:
方法2:
首先判斷第一個字符是1234中其中哪一個,然后再判斷第二個字符是*還是0,從而去判斷控制哪個燈的亮滅。使用if語句的嵌套,可以很好地解決此類問題。因此第二種程序設計方法如下:
方法3:
用邏輯與的方法同時判斷數組里第一個元素和第二個元素分別是哪種組合,從而去判斷控制哪個燈的亮滅。因此第三種程序設計方法如下:
注意:無論使用上述三種方法中的哪種方法,在指令控制部分最后一定要對數組進行清零,目的是等待下一個指令的接收,如果不清零,即使輸入新的指令,由于數組里已經存入原先的指令,新的指令也將不被響應。
3.4 程序執行結果
當通過串口調試助手發送指令“1*”時,開發板上的D3被點亮了。如圖2所示:
當發送指令“10”時D3被熄滅。
當通過串口調試助手發送指令“3*”時,開發板上的D5被點亮了。如圖3所示:
當發送指令“30”時D5被熄滅。
4 結束語
在物聯網應用開發中,使用串口指令控制LED燈的亮滅是一個非常常見且基礎的應用場景。除了控制LED 燈的亮滅,我們還可以使用串口指令來控制LED燈的閃爍、流水燈等更加豐富的效果。如果想要實現LED 燈的閃爍效果,只需要在指令控制部分將LED燈 的亮滅狀態程序更改為狀態取反即可;如果想要實現流水燈效果,則可以通過合理的延時設置來控制多個LED燈按順序依次點亮。對于物聯網技術感興趣的讀者,可以在學習本文提供的基礎案例后,嘗試根據自己的需求去設計和實現更多有趣的LED控制效果,這將有助于加深對物聯網技術的理解和掌握。
總之,通過串口指令控制LED燈,是物聯網應用開發中一個簡單且實用的技能,掌握它可以幫助我們更好地探索和實踐物聯網技術。