史記征 崔俊
摘要:在單片機(jī)、嵌入式等課程的教學(xué)過(guò)程中,串行通信是最基礎(chǔ)、最重要的知識(shí)點(diǎn)之一。在以往的教學(xué)中,常使用串口調(diào)試助手作為聯(lián)調(diào)工具,由于其源代碼不開(kāi)源,不利于學(xué)生對(duì)串行通信原理的理解。該文利用Python語(yǔ)言第三方庫(kù)設(shè)計(jì)、開(kāi)發(fā)串口調(diào)試上位機(jī),并實(shí)現(xiàn)與CC2530單片機(jī)進(jìn)行串行通信,有利于老師的教學(xué)和學(xué)生對(duì)串行通信知識(shí)的掌握。
關(guān)鍵詞:串行通信;Python語(yǔ)言;CC2530單片機(jī)
中圖分類(lèi)號(hào):TP393? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)16-0024-03
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
串行通信是指使用一條數(shù)據(jù)線,按二進(jìn)制位對(duì)數(shù)據(jù)進(jìn)行依次傳輸,每一位數(shù)據(jù)占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。其只需要少數(shù)幾條線就可以在系統(tǒng)間交換信息,特別適用于計(jì)算機(jī)與計(jì)算機(jī)、計(jì)算機(jī)與外設(shè)之間的遠(yuǎn)距離通信,在電子類(lèi)課程中有較為廣泛的應(yīng)用。
1 Python語(yǔ)言中串行通信背景
1.1 Python語(yǔ)言的特點(diǎn)
吉多·范羅蘇姆( Guido Van Rossum)作為Python語(yǔ)言的設(shè)計(jì)發(fā)明者,于1990年發(fā)布了Python的第一個(gè)版本。作為一種計(jì)算機(jī)高級(jí)程序設(shè)計(jì)語(yǔ)言,Python具有如下特點(diǎn):
1)易于學(xué)習(xí)
Python的編程思維簡(jiǎn)單,注重邏輯、輕于語(yǔ)法,庫(kù)資源豐富,保留字較少、易于理解。
2)易于閱讀
Python代碼沒(méi)有使用其他語(yǔ)言通常用來(lái)訪問(wèn)變量、定義代碼塊和進(jìn)行模式匹配的命令式符號(hào),而是采用強(qiáng)制縮進(jìn)的編碼方式,具有極佳的可讀性。
3)免費(fèi)、開(kāi)源
Python是FLOSS (自由/開(kāi)放源碼軟件)之一。使用Python是免費(fèi)的,甚至可以對(duì)它做改動(dòng)。
4)高級(jí)語(yǔ)言
使用Python語(yǔ)言編程時(shí),無(wú)須考慮諸如管理程序內(nèi)存等底層的細(xì)節(jié),只需集中精力關(guān)注程序的主要邏輯即可。
5)可移植性
由于Python語(yǔ)言具有開(kāi)源的特點(diǎn),Python代碼的移植非常方便,可以在各種不同的操作系統(tǒng)上運(yùn)行。
6)面向?qū)ο?/p>
Python不但支持面向過(guò)程編程,也支持面向?qū)ο缶幊?/p>
7)解釋性
Python作為一種解釋型編程語(yǔ)言,在開(kāi)發(fā)過(guò)程中不存在編譯環(huán)節(jié)。
8)可擴(kuò)展可嵌入性
在Python中,部分程序可以使用其他語(yǔ)言編寫(xiě),如C/C++。
1.2 Python語(yǔ)言版本
Python發(fā)展至今,經(jīng)歷了多個(gè)版本的更迭,目前仍然保留的版本主要是基于Python2.X和Python3.X。Python3.X 是未來(lái)的趨勢(shì),有許多重要的類(lèi)庫(kù)都已經(jīng)停止對(duì)Python2.X的更新,只保留對(duì)Python3.X的更新。
1.3 串行通信API
Python進(jìn)行串行通信主要使用serial庫(kù)和tkinter庫(kù)。serial庫(kù)封裝了對(duì)串口的訪問(wèn),在支持的平臺(tái)上有統(tǒng)一的接口,支持不同的字節(jié)大小、停止位、校驗(yàn)位和流控設(shè)置。tkinter是Python的標(biāo)準(zhǔn)GUI庫(kù),使用tkinter可以快速的創(chuàng)建GUI應(yīng)用程序。本文利用tkinter庫(kù)進(jìn)行串口通信上位機(jī)界面開(kāi)發(fā)。
2 Python語(yǔ)言在串行通信中的應(yīng)用
2.1 第三方庫(kù)安裝
Python第三方庫(kù)最常用的安裝方式是通過(guò)pip命令。作為Python的內(nèi)置命令,pip需要通過(guò)命令行執(zhí)行。本文所需庫(kù)的安裝命令如下:pip install serial。
2.2 上位機(jī)程序代碼
利用Python語(yǔ)言編寫(xiě)串行通信上位機(jī)代碼,以實(shí)現(xiàn)如圖1所示界面,通過(guò)界面上的組件與下位機(jī)進(jìn)行聯(lián)調(diào)。
2.3 下位機(jī)CC2530程序代碼
2.4 系統(tǒng)聯(lián)調(diào)結(jié)果分析
聯(lián)調(diào)數(shù)據(jù)的格式為“燈編號(hào)開(kāi)|關(guān)#”,D3燈編號(hào)是1,D4燈編號(hào)是2,D5燈編號(hào)是3,D6燈編號(hào)是4,0代表關(guān)燈,1代表開(kāi)燈。如打開(kāi)D3燈的命令是“11#”,關(guān)閉D3燈的命令是“10#”。在圖1上位機(jī)界面的聯(lián)調(diào)數(shù)據(jù)輸入框中輸入“XY#”,X的取值范圍是1、2、3、4,Y的取值范圍0、1,然后依次點(diǎn)擊打開(kāi)串口、發(fā)送數(shù)據(jù)按鈕即可控制開(kāi)發(fā)板上四個(gè)LED燈的亮滅。
3 結(jié)束語(yǔ)
本文利用Python語(yǔ)言第三方庫(kù)、CC2530開(kāi)發(fā)板,實(shí)現(xiàn)了串口通信上位機(jī)開(kāi)發(fā)、系統(tǒng)聯(lián)調(diào)等功能。基于Python語(yǔ)言的串口通信系統(tǒng)具有易于編程、操作簡(jiǎn)單、通信誤碼率低等優(yōu)點(diǎn),在單片機(jī)相關(guān)課程的教學(xué)過(guò)程中加以應(yīng)用,有助于學(xué)習(xí)者對(duì)串口通信原理的理解。
參考文獻(xiàn):
[1] 李全利. 單片機(jī)原理及接口技術(shù)[M]. 北京: 高等教育出版社, 2009: 182-186.
[2] 王弘博, 孫傳慶. Mark Summerfield.Python3程序開(kāi)發(fā)指南[M]. 2版. 北京: 人民郵電出版社, 2015.
[3] 曾維鵬, 蔡莉莎, 林爾敏. 基于VC++及Proteus的上、下位機(jī)串口通信仿真技術(shù)[J]. 鎮(zhèn)江高專(zhuān)學(xué)報(bào), 2013(10): 74-76.
[4] 金海琴, 陳興, 翟林鵬. 基于Modbus協(xié)議的串行通信的應(yīng)用[J]. 電子設(shè)計(jì)工程, 2013, 21(8): 157-160.
【通聯(lián)編輯:謝媛媛】