王德志,梁俊艷
(1.華北科技學(xué)院 計(jì)算機(jī)學(xué)院,河北 廊坊 065201;2.華北科技學(xué)院 圖書館,河北 廊坊 065201)
從2017 年2 月以來,新工科教育成為當(dāng)前高校教育改革的一項(xiàng)重要目標(biāo)。新工科的核心思想是讓傳統(tǒng)的非計(jì)算機(jī)專業(yè),結(jié)合計(jì)算機(jī)專業(yè)的特點(diǎn),利用計(jì)算機(jī)技術(shù)與傳統(tǒng)專業(yè)高度融合,培養(yǎng)具有能夠利用計(jì)算機(jī)思維方式解決專業(yè)問題的人才,產(chǎn)生出新的創(chuàng)新成果[1-4]。在當(dāng)前以物聯(lián)網(wǎng)、大數(shù)據(jù)、云計(jì)算、移動通信、人工智能為代表的計(jì)算機(jī)發(fā)展新方向都脫離不開軟件編程,因此新工科人才培養(yǎng)的一個(gè)重要能力是軟件編程能力提升[5]。物聯(lián)網(wǎng)技術(shù)作為近年發(fā)展的新興專業(yè),由傳統(tǒng)的認(rèn)為“傳感器+無線通信”,逐漸發(fā)展到多學(xué)科的交叉應(yīng)用,人工智能、大數(shù)據(jù)等都不斷地融合應(yīng)用到物聯(lián)網(wǎng)中。物聯(lián)網(wǎng)技術(shù)也應(yīng)用到越來越多的傳統(tǒng)行業(yè)中,例如交通、機(jī)械制造、電氣工程等。而在此背景下,新工科人才的培養(yǎng)中,如何把物聯(lián)網(wǎng)技術(shù)與軟件編程有機(jī)的融合在一起,成為一個(gè)需要研究的問題。
物聯(lián)網(wǎng)技術(shù)學(xué)習(xí)設(shè)計(jì)的知識體系較多,其中硬件編程的學(xué)時(shí)是基礎(chǔ)也是較難的內(nèi)容之一。對于物聯(lián)網(wǎng)硬件編程主要設(shè)計(jì)的知識包括硬件電路知識、軟件編程知識和數(shù)據(jù)通信知識等。傳統(tǒng)的教學(xué)方法是把上述知識點(diǎn)分解到不同的課程中,雖然為學(xué)生打下了良好的基礎(chǔ)根基,但是也存在一些問題。
物聯(lián)網(wǎng)的硬件知識涵蓋了電路基礎(chǔ)、數(shù)字電路和模擬電路等,對于計(jì)算機(jī)專業(yè)學(xué)生需要系統(tǒng)地學(xué)習(xí)相關(guān)知識,才能夠進(jìn)行硬件的選型、設(shè)計(jì)與開發(fā),重點(diǎn)在于讓學(xué)生掌握硬件設(shè)計(jì)的知識,能夠獨(dú)立設(shè)計(jì)開發(fā)硬件電路。而對于非計(jì)算機(jī)專業(yè)的新工科教學(xué),硬件的學(xué)習(xí)重點(diǎn)在于讓非計(jì)算機(jī)專業(yè)學(xué)生理解硬件的設(shè)計(jì)思想,能夠看懂基本的硬件技術(shù)參數(shù),能夠根據(jù)硬件技術(shù)參數(shù)進(jìn)行產(chǎn)品的選型,而不是從最基礎(chǔ)的硬件電路設(shè)計(jì)開始。這是兩者最大的區(qū)別。因此,原有的硬件教學(xué)方式不適合新工科人才能力的培養(yǎng)。
物聯(lián)網(wǎng)硬件的編程語言可以涉及多類編程語言,從底層的匯編語言,通用的C/C++語言,一直到高級的Java 或.NET 編程語言等,都可以應(yīng)用到物聯(lián)網(wǎng)設(shè)備編程中。雖然編程的語言種類不同,但是在物聯(lián)網(wǎng)應(yīng)用中不同的語言都可以實(shí)現(xiàn)一些基本相同的硬件編程功能。例如TCP/IP 通信、串口通信等。對于計(jì)算機(jī)專業(yè)的學(xué)生,由于今后的工作需要在不同平臺上進(jìn)行軟硬件開發(fā),因此需要全面掌握從底層到高層的各類編程語言。而對于新工科的非計(jì)算機(jī)專業(yè)學(xué)生,重點(diǎn)在于如何通過軟件編程來實(shí)現(xiàn)物聯(lián)網(wǎng)的硬件功能。在實(shí)際工作中應(yīng)用軟件編程的平臺相對穩(wěn)定,因此在編程語言學(xué)習(xí)方面,可以減少學(xué)習(xí)語言的種類,通過學(xué)習(xí)一到兩種編程語言來解決實(shí)際工作的問題即可。
物聯(lián)網(wǎng)技術(shù)本身就是近年新發(fā)展的一個(gè)交叉學(xué)科,融合傳感器、無線通信、嵌入式系統(tǒng)開發(fā)和軟件開發(fā)技術(shù)等多門技術(shù)。其專業(yè)人才培養(yǎng)方面,知識覆蓋面廣、難度深,是一個(gè)相對較難學(xué)的專業(yè)。對于新工科人才培養(yǎng)知識體系,如何培養(yǎng)非計(jì)算機(jī)專業(yè)人員具有“物聯(lián)網(wǎng)思維”方式是其中一個(gè)難點(diǎn)問題。原先在大學(xué)的本科教學(xué)體系中,非計(jì)算機(jī)專業(yè)學(xué)生主要通過“大學(xué)計(jì)算機(jī)基礎(chǔ)”和“程序設(shè)計(jì)語言”這兩門課程培養(yǎng)“計(jì)算思維”,而沒有過多地強(qiáng)調(diào)“物聯(lián)網(wǎng)思維”方式?!坝?jì)算思維”偏重于通過軟件編程方式解決問題,例如數(shù)據(jù)分析、邏輯控制等。而“物聯(lián)網(wǎng)思維”則是通過考慮應(yīng)用“硬件+軟件+數(shù)據(jù)”的方式來解決問題。如何在新工科的人才培養(yǎng)中利用有限的教學(xué)時(shí)間,突出“物聯(lián)網(wǎng)思維”能力的培養(yǎng)成為一個(gè)難點(diǎn)。
Python 語言是20 世紀(jì)90 年代初誕生,在近年由于大數(shù)據(jù)和人工智能的發(fā)展,而得到快速發(fā)展的一種腳本解釋語言。從2018 年9 月開始第一次進(jìn)入TiOBE 指數(shù)前3 名,一直保持在前3名中,而且熱度還在不斷提升中。Python 利用自身“后發(fā)”的優(yōu)勢,融合前期傳統(tǒng)成功編程語言(例如C/C++、Java)的優(yōu)點(diǎn),在計(jì)算機(jī)各個(gè)領(lǐng)域中都嶄露頭角,例如Web 編程、數(shù)據(jù)分析、人工智能、自動化運(yùn)維等領(lǐng)域[6-8]。Python 語言在物聯(lián)網(wǎng)硬件中的應(yīng)用,近年也在不斷地發(fā)展,涌現(xiàn)出不同的技術(shù)分支。從應(yīng)用標(biāo)準(zhǔn)Python 庫進(jìn)行硬件編程,到針對特定硬件衍生的不同嵌入式Python 版本,在物聯(lián)網(wǎng)中應(yīng)用的方案越來越多[9-10]。
Python 在物聯(lián)網(wǎng)設(shè)備開發(fā)中,目前主要分為兩類方向,如表1 所示。一類是基于標(biāo)準(zhǔn)Python庫,以“嵌入式硬件+Linux 操作系統(tǒng)”為平臺為基礎(chǔ),在Linux 上開發(fā)Python 程序,驅(qū)動硬件工作;第二類是基于嵌入式Python 庫,一般是第三方開發(fā)的擴(kuò)展Python 庫,在特定硬件平臺上開發(fā)Python 程序。
目前,發(fā)展比較好的是基于樹莓派的Python、MicroPython 和Zerynth。其 中Zerynth的發(fā)展方向偏重于商業(yè)化發(fā)展,需要專用的開發(fā)平臺、專用云代碼存儲等,開源性不強(qiáng),用戶可發(fā)揮的空間有限。而基于樹莓派的Python 和MicroPython 的發(fā)展是基于開源的思路,由第三方貢獻(xiàn)了大量的開源功能庫,具有豐富的硬件驅(qū)動庫,支持的硬件設(shè)備豐富。其中樹莓派平臺由于其支持高運(yùn)算頻率和超大存儲空間,一般應(yīng)用在高端的視頻圖像和復(fù)雜數(shù)據(jù)處理中。而MicroPython 由于其硬件平臺的低功耗、體積小和高性能特點(diǎn),一般應(yīng)用在物聯(lián)網(wǎng)底層的數(shù)據(jù)采集與傳輸環(huán)節(jié)中。
表1 物聯(lián)網(wǎng)開發(fā)應(yīng)用Python版本
MicroPython 是由英國劍橋大學(xué)教授Damien George 花費(fèi)6 個(gè)月時(shí)間開發(fā)的,并于2014 年在KickStarter 眾籌網(wǎng)站上推廣,從而得到廣大用戶認(rèn)可的開源平臺。MicroPython 本身使用GNU C進(jìn)行開發(fā),最早在意法公司STM32F4 微處理器平臺實(shí)現(xiàn)了Python3 的基本功能,擁有完善的解析器、編譯器、虛擬機(jī)和類庫等。通過不斷發(fā)展,現(xiàn)在已經(jīng)提供了豐富的傳感器和硬件驅(qū)動庫,例如LED、液晶、舵機(jī)、SD 卡、UART、I2C 和SPI 等。支持的硬件平臺也在不斷擴(kuò)展,現(xiàn)在已經(jīng)可以移植到STM32L4、STM32F7、ESP8266、ESP32、micro:bit、MSP432 等眾多硬件平臺。其經(jīng)典的基于STM32F4 的pyboard 硬件平臺開發(fā)板,如圖1 所示。
圖1 pyboard開發(fā)板圖
MicroPython 的體系結(jié)構(gòu)采用如圖2 所示的方案。它由微控制器(系統(tǒng)底層)硬件、Micro Python 固件和用戶應(yīng)用程序3 部分構(gòu)成。硬件和固件是最基礎(chǔ)的部分,不同的硬件對應(yīng)不同的固件,也是相對不變的,而用戶程序可以隨時(shí)改變,可以存放多個(gè)用戶程序到系統(tǒng)中,隨時(shí)調(diào)用或者切換。
圖2 MicroPython體系結(jié)構(gòu)圖
2.3.1 屏蔽硬件的異構(gòu)性
由MicroPython 的體系結(jié)構(gòu)可以看出,用戶在調(diào)用系統(tǒng)的硬件資源時(shí),由于存在中間固件庫的屏蔽,對用戶而言,不需要過多了解不同硬件設(shè)備的具體驅(qū)動方式,只要掌握固件庫對應(yīng)的硬件接口函數(shù)使用方法就可以直接驅(qū)動硬件工作。這樣,在教學(xué)環(huán)節(jié)中就可以有效降低對不同微控制器功能講解的難度,只要進(jìn)行微控制器基本功能講解就可以。例如不同微控制器均具有通用型串口模塊,傳統(tǒng)的授課方式需要講解每種微控制器串口模塊控制寄存器的不同初始化方法,需要學(xué)生記住不同配置寄存器每位不同狀態(tài)代表的含義,難度較大。而應(yīng)用MicroPython 固件庫調(diào)用,只要理解固件庫中串口的初始化函數(shù),即可使用串口。例如利用串口間隔1 秒循環(huán)發(fā)送“hello world”給PC 機(jī),代碼如下所示。
從上述代碼可以看出,基于MicroPython 進(jìn)行硬件開發(fā)能夠屏蔽硬件的異構(gòu)性,用戶只要掌握基本硬件驅(qū)動函數(shù)的使用方法,就可以快速完成硬件功能的實(shí)現(xiàn)。
2.3.2 硬件驅(qū)動庫的豐富
MicroPython 提供了豐富硬件驅(qū)動庫,根據(jù)其支持的硬件主要分為兩類。一類是微控制器自身包含的硬件接口功能的支持,如STM32F4微控制器包含的通用型輸入/輸出端口、串口、I2C、SPI、ADC、DAC、硬件定時(shí)器、硬件外部中斷等。另一類是外接常用硬件模塊的驅(qū)動,如慣導(dǎo)模塊、ESP8266WIFI 模塊、OLED顯示模塊、紅外接收模塊、DHT11 溫濕度模塊、LCD1602 液晶模塊等。由于MicroPython 采用開源模式,不斷有新的第三方硬件模塊驅(qū)動添加到硬件驅(qū)動庫中,極大地?cái)U(kuò)展了MicroPython 的應(yīng)用范圍。
2.3.3 軟件編程的簡單化
采用MicroPython 提供的硬件驅(qū)動庫,能夠極大地減少程序的代碼量。以DS18B20 溫度傳感器為例。這是一種常用的溫度采集傳感器,它采用單線雙向通信模式。通過在一個(gè)GPIO 端口進(jìn)行命令的輸出和數(shù)據(jù)的輸入,采用不同時(shí)序的控制,實(shí)現(xiàn)工作模式的配置以及實(shí)時(shí)溫度的采集。由于需要頻繁地切換GPIO 端口的工作模式,傳統(tǒng)C 語言的硬件編程具有一定的復(fù)雜度。而采用MicroPython 的硬件驅(qū)動庫,能夠極大地簡化代碼量,如下所示。
從上述代碼可以看出,硬件驅(qū)動庫中的函數(shù)已經(jīng)完成了基本的硬件初始化、數(shù)據(jù)采集、數(shù)據(jù)轉(zhuǎn)換等功能,用戶只要調(diào)用相應(yīng)的函數(shù)就可以實(shí)現(xiàn)應(yīng)用功能開發(fā),極大優(yōu)化了代碼量。
2.3.4 編譯平臺的通用性
在嵌入式物聯(lián)網(wǎng)硬件編程中,傳統(tǒng)的方式是交叉編譯方式,在PC 機(jī)上編寫源代碼,然后利用特定編譯平臺編譯為嵌入式微控制器可執(zhí)行代碼,然后通過網(wǎng)絡(luò)或?qū)S谜{(diào)試端口下載到微控制器中。源代碼從編寫一直到下載執(zhí)行需要多個(gè)工具平臺的支持,帶來了一定的使用難度。而Python 語言是一種解釋腳本語言,MicroPython很好地利用了這一特點(diǎn)。在MicroPython 的固件庫中,除了集成常用的硬件驅(qū)動之外,還包含了解析器、編譯器和虛擬機(jī)。對于用戶應(yīng)用程序,只需要利用通用型文本編輯器編寫main.py 主程序,然后通過串口或調(diào)試端口把.py 文件下載到微控制器的Flash 中即可。由固件庫中虛擬機(jī)負(fù)責(zé)完成源代碼的解析、編譯和執(zhí)行。這樣就減少了交叉編譯的環(huán)節(jié),降低了對交叉編譯工具的依賴性,提升了程序調(diào)試的方便性。
對于非計(jì)算機(jī)專業(yè)學(xué)生學(xué)習(xí)Python 語言硬件編程是一項(xiàng)很有挑戰(zhàn)性的任務(wù),不同的專業(yè)背景,思維方式也不盡相同。為了提升學(xué)生學(xué)習(xí)物聯(lián)網(wǎng)技術(shù)的興趣,達(dá)到較好的教學(xué)效果,需要從多個(gè)方面進(jìn)行教學(xué)設(shè)計(jì),體現(xiàn)出MicroPython 在物聯(lián)網(wǎng)硬件編程中的特點(diǎn),從而激發(fā)學(xué)生學(xué)習(xí)物聯(lián)網(wǎng)技術(shù)的熱情,培養(yǎng)“物聯(lián)網(wǎng)思維”的方式。
基于MicroPython 的物聯(lián)網(wǎng)硬件編程教學(xué)授課可以融合在Python 語言的授課中,也可采用獨(dú)立授課的方式。教學(xué)內(nèi)容主要涵蓋了標(biāo)準(zhǔn)Python 語言的基本語法使用方法和MicroPython特定教學(xué)內(nèi)容。授課內(nèi)容的框架如圖3 所示。
圖3 MicroPython授課框架圖
對于MicroPython 部分的教學(xué)內(nèi)容,側(cè)重硬件案例講解,每一個(gè)硬件完成一個(gè)特定的應(yīng)用功能,并可以結(jié)合已經(jīng)學(xué)過的硬件構(gòu)成綜合案例。例如LCD1602 液晶模塊案例,可以與前期的溫濕度傳感器結(jié)合,利用液晶模塊實(shí)時(shí)顯示采集的溫濕度值,同時(shí)可以結(jié)合輸入開關(guān)功能,實(shí)現(xiàn)對系統(tǒng)的啟動、關(guān)閉、重啟和參數(shù)調(diào)整等功能。通過不斷引入新的硬件設(shè)備,不斷豐富案例的內(nèi)容,最終形成一個(gè)具有物聯(lián)網(wǎng)特色的應(yīng)用案例。
由于MicroPython 授課涉及硬件、軟件和平臺等多方面的內(nèi)容,在有限的學(xué)時(shí)內(nèi)都進(jìn)行詳細(xì)講解有一定難度,因此,可以結(jié)合慕課教學(xué)的優(yōu)點(diǎn),采用“慕課+理論+實(shí)驗(yàn)”的方法。把基礎(chǔ)介紹性的、需要記憶和頻繁操作的內(nèi)容放到慕課教學(xué)中,例如pyboard 開發(fā)板功能介紹、pyboard開發(fā)板連接方法、代碼下載與運(yùn)行方式等放到慕課中。采用課前學(xué)生預(yù)習(xí)、課上教師實(shí)操演示、課下學(xué)生利用慕課復(fù)習(xí)鞏固的方式,便于學(xué)生記憶和操作。對于需要分析和理解的內(nèi)容,例如常用硬件接口參數(shù)配置方法、硬件驅(qū)動編程案例等,采用理論授課和實(shí)驗(yàn)相結(jié)合的方式。通過教師課上深入淺出的理論與案例講解,讓學(xué)生理解MicroPython 硬件驅(qū)動編程思路和框架。通過實(shí)驗(yàn)讓學(xué)生實(shí)際動手編寫代碼驅(qū)動硬件工作,從而掌握利用MicroPython 實(shí)際硬件編程的能力。
當(dāng)前,在教學(xué)改革中,對于考核方式推薦使用過程量化考核,避免一卷定分?jǐn)?shù)的僵化模式。在MicroPython 的教學(xué)中,一方面?zhèn)戎赜凇拔锫?lián)網(wǎng)思維”的理論培養(yǎng),另一方面也要強(qiáng)調(diào)實(shí)際軟硬件綜合編程實(shí)操能力的培養(yǎng)。因此,在考核方式上,可以采用項(xiàng)目綜合評價(jià)方法。在授課開始的時(shí)候,就讓學(xué)生構(gòu)思一個(gè)基于MicroPython 的硬件編程項(xiàng)目,在授課的過程中,讓學(xué)生不斷完善這個(gè)項(xiàng)目內(nèi)容。通過每次實(shí)驗(yàn),完成項(xiàng)目的一定內(nèi)容。最后在課程結(jié)束時(shí),提交一個(gè)綜合性具有一定應(yīng)用價(jià)值的設(shè)計(jì)項(xiàng)目。
通過每次實(shí)驗(yàn)的檢查,監(jiān)督學(xué)生項(xiàng)目的進(jìn)度,并及時(shí)了解學(xué)生的學(xué)習(xí)情況,及時(shí)調(diào)整教學(xué)進(jìn)度和教學(xué)內(nèi)容。通過項(xiàng)目的技術(shù)文檔考核學(xué)生理解和掌握的理論知識水平,通過項(xiàng)目代碼與功能演示考核學(xué)生實(shí)際軟硬件編程操作能力。通過教學(xué)中對項(xiàng)目進(jìn)展的跟蹤,避免在最后項(xiàng)目評價(jià)時(shí)的誤判,給出合理的考核結(jié)果。
從2018 年4 開始,教學(xué)團(tuán)隊(duì)在“程序設(shè)計(jì)語言(Python)”和“物聯(lián)網(wǎng)底層程序設(shè)計(jì)開放實(shí)驗(yàn)”中進(jìn)行MicroPython 教學(xué)授課示范工作。截止2019 年7 月,共5 個(gè)非計(jì)算機(jī)專業(yè),學(xué)生115人次參加了相關(guān)課程的學(xué)習(xí)。授課結(jié)束后,對學(xué)生進(jìn)行了匿名電子問卷調(diào)查工作,共有109 學(xué)生參與。調(diào)查結(jié)果如表2 所示。
表2 教學(xué)效果評估表 %
從表2 中數(shù)據(jù)可以看出,學(xué)生對于課程整體效果比較滿意,其中滿意度最高的是案例和考核方式,相對較低的是教材和授課內(nèi)容。經(jīng)過課后座談討論反饋,在授課內(nèi)容方面,學(xué)生認(rèn)為知識很新,很有創(chuàng)新性,但是知識學(xué)習(xí)偏難,知識點(diǎn)內(nèi)容較多,授課學(xué)時(shí)較少,導(dǎo)致需要花費(fèi)大量時(shí)間進(jìn)行課下的學(xué)習(xí)和實(shí)踐操作。在教材方面,由于講授的知識點(diǎn)較多,沒有非常符合教學(xué)內(nèi)容的教材,因此采用“教材+講義+參考書”的方式讓學(xué)生學(xué)習(xí),學(xué)生需要學(xué)習(xí)多本教材或參考書,把握不住重點(diǎn)。在考核方式與學(xué)時(shí)分配上,學(xué)生比較滿意,能夠滿足大多數(shù)學(xué)生的需要。
新工科人才培養(yǎng),既是一次機(jī)遇,也是一次挑戰(zhàn)。不論對學(xué)生來說,還是對老師而言,都需要面對全新的教學(xué)內(nèi)容和教學(xué)方式。利用MicroPython 語言開展物聯(lián)網(wǎng)硬件編程學(xué)習(xí),拓展了Python 語言在教學(xué)中的應(yīng)用范圍,為新工科人才“物聯(lián)網(wǎng)思維”方式的培養(yǎng)探索了一條途徑。但是MicroPython 的教學(xué)工作還需要進(jìn)一步完善教學(xué)體系,優(yōu)化教學(xué)內(nèi)容,建設(shè)滿足授課需求的教材和授課案例。只有在實(shí)際教學(xué)工作中,聯(lián)系學(xué)生實(shí)際情況,不斷地改革與創(chuàng)新,才能使新工科人才的培養(yǎng)滿足社會的真正需求。