焦 俊,張 鋒,邵 睿,王永梅,李 斌,陶浩兵,辜麗川
(安徽農業大學 信息與計算機學院,安徽 合肥 230036)
物聯網專業是以“應用型人才”培養為目標的新工科專業,是為了適應我國信息產業發展的需要,滿足智慧中國戰略提出來的,具有強烈的時代感[1-4]。隨著我國信息智能技術發展,物聯網專業技術人才缺口很大。據統計,未來五年,我國該專業的人才需求缺口約1000萬,那么物聯網專業人才培養目標的定位、課程體系的建設、實踐教學和綜合設計創新能力的培養都需要大量的研究和探討。
物聯網工程專業是一個交叉融合的專業,包括網絡工程、電子信息工程和計算機應用技術等多學科。因此,在物聯網專業課程設置時,加強課程內容的整合顯得尤為重要,同時需要加強在新工科教育的思想下的實踐教學的研究和探討,專業建設核心是培養學生綜合利用理論知識分析和解決問題的工程實踐能力、工程創新能力和綜合素質。具備“基礎厚、口徑寬、能力強、綜合性、素質高”等特點[5-6]。重點掌握物聯網系統分析與設計等專門知識和技能,重視基礎理論的積累,更注重應用型、創新型能力的培養。
教育部在2018年1月頒發的《普通高等學校本科專業類教學質量國家標準》對物聯網專業的知識體系和核心課程體系建議中指出,物聯網專業要“培養學生將基本原理與技術運用于物聯網及其應用系統的規劃、設計、開發、部署、運行、維護等工作能力。教學內容包含物聯網通信、物聯網控制、電路與電子技術、物聯網數據處理、標識與感知、物聯網工程設計、物聯網信息安全與實施等知識領域的基本內容”[7-9]。基于我校“人才培養”的目標,針對物聯網工程專業的綜合實訓教學,本文提出項目驅動方法,運用工程項目的形式進行教學,以實際案例貫徹項目的始終,加強學生實際動手能力,加深學生對理論知識的理解,提高學生分析問題和解決問題的能力。通過讓學生參與實際項目,提高了學生學習物聯網工程專業課程的興趣,促進物聯網專業的建設和發展。
物聯網工程專業綜合實訓對于提高學生掌握物聯網工程專業綜合知識能力起到非常重要的作用,但是現在實訓課程存在以下問題:
“綜合實訓”課程包含理論內容龐雜,涉及傳感器、嵌入式系統和電子信息等課程內容。在課堂只進行課本講授的情況下,學生較難理解、消化相關理論知識。只有增加實踐動手的時間與機會,學生才能夠綜合地把握相關的理論知識。但在實際教學過程中,由于課時限制,使得實踐教學時間很少。
傳統模式的教學中,實驗教學難以激發學生的創新能力和提高應用水平。用人單位需要具有寬而深的“T”字型人才,為了適應市場的人才需求和技術發展,應加大綜合實訓教學。
物聯網企業的需求是日新月異,物聯網工程專業是一個理論快速發展、技術快速革新的新型工科專業,若不能追蹤技術前沿,閉目塞聽,培養的人才就會落后于社會的需求,被市場淘汰。
綜合實訓平臺的構建是以增強學生對物聯網工程專業相關課程知識的理解與掌握為出發點,通過在平臺上開展各項實踐活動和教師指導,學生可以發揮各自的專業能力。挖掘學生實踐創新的潛力,同時激發學生對本專業的學習興趣,特別是對WSN、傳感器技術、RFID、嵌入式系統等課程知識建立起直觀概念,奠定深入研究的基礎。
構建基于Linux系統的嵌入式信息采集節點,實現圖像和環境參數,比如:二氧化碳、溫度、光照、濕度、氨氣五個環境參數的采集與傳輸。選取配有4GB內存和16GB閃存,搭載操作系統,具有GPU和VPU加速處理的NanoPC-T4開發板,其內置有圖像處理功能的新一代高端圖像處理器。再配備一款普通的數字攝像頭,一個采用數字環境光傳感器芯片檢測光照強度、溫濕度芯片SHT10檢測環境溫度、CO2傳感器的四合一集成變送器,以485方式輸出數據;還有一款氨氣傳感器,用來檢測周圍環境中的氨氣濃度,同樣采用485方式進行傳輸。節點功能如圖1所示,NanoPC-T4開發板如圖2,傳感器如圖3所示。

圖1 節點軟件功能圖

圖2 NanoPC-T4開發板

圖3 傳感器
采用可以運行Android系統的嵌入式開發板NanoPC-T4,在該板可以通過SD卡進行程序脫機燒寫,步驟如下:
1)用一張8G或以上內存的SD卡,用讀卡器插入到電腦上;
2)官網上下載Android8.1 系統固件rk3399-eflasher-OSNAME-YYYYMMDD.img.zip和工具win32diskimager;
3)運行燒寫工具win32diskimager,再選中SD卡,以及解壓后的系統固體文件,點擊write將其燒寫到SD卡中;
4)將SD卡插入NanoPC-T4板的卡槽中,啟動開發板。
運用QT來進行軟件設計,涉及視頻處理,需要添加OpenCV庫,以簡化對視頻的操作。OpenCV的安裝是在Linux系統下,通過命令行進行操作,在FriendlyDesktop點擊菜單 System Tools -> Terminator 打開終端,輸入圖4中的命令安裝 OpenCV 3.4:
嵌入式系統節點先對與開發板相連的攝像頭與傳感器進行初始化操作,接著從緩區中讀取環境參數:氨氣、溫度、濕度、光照、CO2進行解析處理,然后,將處理后的環境參數與圖像合并成數據幀,再基于UDP協議傳輸到網絡上。軟件流程如圖5所示。

圖4 OpenCV配置命令

圖5 軟件總體流程圖
根據嵌入式節點的功能需求,設計軟件的流程:軟件先對與開發板相連的攝像頭與傳感器進行初始化操作,接著從緩區中讀取環境參數進行相應的解析處理,處理后的環境參數與圖片合并成數據幀,若用戶將系統設置為連續傳送,則數據幀是一幀連一幀連續傳,否則,數據幀按照系統設置的采集周期定時傳,數據傳輸方式是基于UDP協議的網絡傳輸。從流程圖5可知,軟件系統包含圖像和環境參數的采集、處理和傳送,因此,包括以下系統功能:
1)引入了OpenCV圖形處理庫,利用其庫函數簡化對攝像頭的操作:開啟攝像頭,定時存取圖片。
2)環境參數采集:串口初始化,實現傳感器與主板之間的正常數據通信。
3)使用的UDP通信是一對一的單播通信。
通過調用OpenCV的capture函數打開攝像頭,運用VideoCaptrue類操作攝像頭讀取圖像,再運用cvQueryFrame函數抓取幀圖像放到RAM板上的緩區中,通過檢測緩區中是否有數據來判斷能否從攝像頭正常讀取圖片。為了防止圖像存取速度過快,設置30ms的圖像讀取周期。攝像頭的主要處理代碼:
cv::VideoCapture cap; //實例化一個VideoCapture類
cap.open(1); //采用NanoPC-T4板操作外接攝像頭,所以使用capture.open(1)
cv::cvtColor(frame,Frame,CV_BGR2RGB);
其中,cvtColor:將原始圖像從BGR顏色空間轉換到RGB顏色空間,
frame:表示輸入圖像即要進行顏色空間變換的原圖像,
Frame:表示輸出圖像即進行顏色空間變換后存儲圖像,
CV_BGR2RGB:將圖片從BGR顏色空間轉到RGB顏色空間的轉換代碼或標識。
首先,設置9600串口波特率,8位數據位,無校驗位,1個停止位。在Linux系統中串口設備是通過訪問/dev/ttyS0、/dev/ttyS1,對串口的讀寫為以下幾個步驟:
3.2.1 打開串口
fd=open(DEV_NAME,O_RDWR|O_NOCTTY);
其中,DEV_NAME:打開串口DEV_NAME
O_RDWR:讀、寫打開
O_NOCTTY:不將此終端設備作為此進程的控制終端
3.2.2 通過termio結構體對通信參數設置
其中,cfgetispeed和cfgetospeed函數:是分別設置端口輸入/輸出波特率;結構體中c_cflag:設置數據位;由于串口通信是無校驗,所以清除termios結構體中c_cflag的PARENB位;使用軟件流控制來標志數據傳輸的開始和結束

圖6 信息顯示頁面
3.2.3 使用read函數和write函數對串口進行讀寫操作
部分代碼如下:
cfsetispeed(&opt,B9600); //輸入波特率9600bps
cfsetospeed(&opt,B9600); //輸出波特率9600bps
opt.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG); //行方式輸入,不經處理直接發送
opt.c_oflag&=~OPOST; //使用原始模式通信
opt.c_iflag&=~(IXON|IXOFF|IXANY); //軟件流控制屏蔽
opt.c_cflag&=~CSTOPB; //1停止位
opt.c_cflag&=~PARENB; //無校驗
opt.c_cflag&=~CSIZE; //屏蔽其他設置
opt.c_cflag |=CS8; //數據位8位
ret=write(fd,buf,sizeof(buf)); //寫串口
len=read(fd,buff,13); //讀串口
UDP通信在QT中的是通過QUdpSocket類提供的UDP套接字API來實現接收和發送UDP數據報。發送數據時,調用writeDatagram(),指定網絡地址和端口號,它會將數據發送到指定的網絡地址,初始時設定地址為廣播地址,發送端口為8080。QUdpSocket中含有一個Bind()函數,設定其對10012端口進行監聽,接收端可以向本節點的10012端口發送自己的網絡地址,節點在接收到該地址后就會通過Bind()函數對該網絡地址進行綁定,進行單播通信。
主要代碼:
m_udpSocket->writeDatagram(m_sendBuf,mes.uTransFrameSize+mes.uTransFrameHdrSize,distIP,8080); //UDP傳輸代碼
m_udpSocketjiaozhunIP->bind(QHost Address::Any,10012); //端口綁定代碼
QT中的定時是通過QTime類實現的,首先,創建一個定時器類的實例化對象,給其指定定時時間,其參數是毫秒級別的,定時開啟是通過start函數實現的,關閉時使用stop函數。
定時代碼:
timerN=new QTimer(this); //定時器實例化
timerN->start(1500); //定時1.5秒
在所設計的平臺上,學生編寫節點軟件程序,采集二氧化碳、氨氣、濕度、溫度、光照五個環境參數以及圖像數據,以UDP協議發送到服務器上,接收方用Java語言編寫一個網頁程序如圖6所示,可以從服務器上讀取這些數據,并將這些環境參數以及圖像在頁面上進行顯示,并存入數據庫。實驗結果表明,數據收發雙方實現了正常通信,該軟件能夠準確采集環境參數與圖像信息,并成功地將這些數據發送到服務器上,達到了預期的目的。
針對物聯網工程專業綜合實訓教學過程中存在的問題,以及新工科背景下物聯網工程專業人才培養目標,本文從綜合實訓內容、手段等方面探討了物聯網工程專業綜合實訓課程教學的具體改革措施。經過物聯網工程專業課程教學團隊幾年來的實踐教學,發現教學效果良好,改善了本專業學生的綜合素質,為他們在今后的工作與學習奠定了良好的理論與實踐動手基礎。