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