用Python語(yǔ)言控制單片機
早年,雖然Python是一款比較容易上手的腳本語(yǔ)言,而且有強大的社區支持,一些非計算機專(zhuān)業(yè)領(lǐng)域的人都選它作為入門(mén)語(yǔ)言。遺憾的是,它不能實(shí)現一些非常底層的操控,所以在硬件領(lǐng)域并不起眼。
本文引用地址:http://dyxdggzs.com/article/201808/390003.htm然而今時(shí)不同往日!
硬件圈同樣非常關(guān)注Python!
說(shuō)到Python用于硬件開(kāi)發(fā)。很多人可能想到的是樹(shù)莓派等支持linux系統的(樹(shù)莓派和Arduino應用Python的的例子實(shí)在是多,比如,利用Raspberry Pi的硬件和Python語(yǔ)言來(lái)完成一個(gè)機器人制作。),然而現在Python已經(jīng)完全可以脫離系統,直接進(jìn)行單片機的開(kāi)發(fā)了。
用Python語(yǔ)言控制單片機
MicroPython是在單片機上可以跑的Python,你可以通過(guò)Python腳本語(yǔ)言開(kāi)發(fā)單片機程序。MicroPython基于A(yíng)NSI C,語(yǔ)法跟Pyton 3基本一致,擁有自家的解析器、編譯器、虛擬機和類(lèi)庫等。目前它支持基于32-bit的ARM處理器,比如STM32F405、STM32f407等,也就是說(shuō)ARM處理器STM32F405上直接可運行Python語(yǔ)言,用Python語(yǔ)言來(lái)控制單片機。
借助Micro Python,用戶(hù)完全可以通過(guò)Python腳本語(yǔ)言實(shí)現硬件底層的訪(fǎng)問(wèn)和控制,比如說(shuō)控制LED燈泡、LCD顯示器、讀取電壓、控制電機、訪(fǎng)問(wèn)SD卡等。
下面這篇美國EDN發(fā)布的文章,介紹了Python在實(shí)時(shí)嵌入式系統中扮演的角色:Python's role in developing real time embedded systems。
Python具有良好的跨平臺性,比如Linux和Windows,或是諸如Raspberry Pi等單板計算機。不過(guò),隨著(zhù)Python的日益普及,人們可能會(huì )問(wèn),在實(shí)時(shí)嵌入式系統中是否也有Python的一席之地。答案是肯定的。下面是開(kāi)發(fā)人員發(fā)現Python在實(shí)時(shí)嵌入式系統開(kāi)發(fā)中有可能扮演的五個(gè)主要角色。
作用# 1設備調試和控制
在嵌入式軟件開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員常常需要分析總線(xiàn)通信量,如USB、SPI或I2C。有的分析僅僅是出于調試目的,但有時(shí)則需要控制總線(xiàn)分析儀并發(fā)送信息至嵌入式系統。許多總線(xiàn)分析儀和通信工具都有友好的用戶(hù)接口,可以用來(lái)控制工具。他們通常還提供一種方法來(lái)開(kāi)發(fā)腳本,也可以用來(lái)控制工具。Python是一種普遍支持的腳本語(yǔ)言,有時(shí)則是一些工具的接口,或是用來(lái)控制工具。
作用# 2–自動(dòng)化測試
通過(guò)Python控制工具在嵌入式系統中發(fā)送和接收消息的能力,使得利用Python構建自動(dòng)化測試(包括回歸測試)成為可能。Python腳本可以設置嵌入式系統進(jìn)入不同的狀態(tài),設置配置文件,并測試所有可能的干擾以及系統與外部環(huán)境的相互作用。使用Python開(kāi)發(fā)自動(dòng)化測試的好處是,回歸測試可以開(kāi)發(fā)持續測試并訓練系統。任何的代碼變動(dòng)導致的bug或不合格的結果都將被實(shí)時(shí)的檢測出來(lái)。
作用# 3–數據分析
通過(guò)Web簡(jiǎn)單地搜索Python庫,你會(huì )發(fā)現,有許多免費強大的Python庫都可以用來(lái)開(kāi)發(fā)應用程序。Python可以用來(lái)接收非常重要的嵌入式系統數據,然后存儲到數據庫或是本地進(jìn)行分析。開(kāi)發(fā)者還可以使用Python開(kāi)發(fā)實(shí)時(shí)可視化功能來(lái)展現臨界參數,或是存儲這些參數用于后續分析。使用Python進(jìn)行數據分析的優(yōu)點(diǎn)之一是當基礎性工作完成之后,新功能的植入會(huì )顯得比較簡(jiǎn)單。
作用# 4–實(shí)時(shí)軟件
Python已經(jīng)證實(shí)了自己的強大性和易使用性,甚至發(fā)現它是作為一門(mén)編程語(yǔ)言進(jìn)入實(shí)時(shí)嵌入式系統。是的,嵌入式軟件本身就是用Python寫(xiě)的而不是C/C++。用于實(shí)時(shí)軟件最廣泛的Python版本是MicroPython,大多是設計在A(yíng)RM Cortex-M3/4微控制器上運行。MicroPython并不孤立。Synapse和OpenMV公司在嵌入式系統中既使用MicroPython也使用他們自己的Python port。對MicroPython感興趣的讀者可能對DesignNews(EDN的姐妹機構)的繼續教育課程也感興趣。
作用# 5–學(xué)習面向對象編程
Python是一門(mén)免費的編程語(yǔ)言,可以跨多個(gè)平臺使用,對于學(xué)生和非編程人員而言比較簡(jiǎn)單。該語(yǔ)言與C語(yǔ)言不同,它也是現代式的,并且可以在自由形態(tài)的腳本類(lèi)型中結構化,或是作為一個(gè)復雜的面向對象的體系結構。Python本身也很靈活。甚至還有這種情景:沒(méi)有編程經(jīng)驗的電氣工程師可以利用Python寫(xiě)出有用的測試腳本或用最少的時(shí)間實(shí)施電板檢查。
Python的學(xué)習曲線(xiàn)并不陡峭,熟悉Python學(xué)習曲線(xiàn)的開(kāi)發(fā)人員發(fā)現,當你有了其它語(yǔ)言的基礎之后,學(xué)習Python比學(xué)習任意其他的編程語(yǔ)言都要簡(jiǎn)單。出于這些原因,當開(kāi)發(fā)人員看到Python扮演著(zhù)編程孵化器角色,并吸收其它缺乏經(jīng)驗的工程師對宜早不宜遲的設計周期做出貢獻時(shí),不應該感到驚訝。
什么?Python+FPGA!?
夏宇聞老師幾個(gè)月前在微信上推薦了一個(gè)帖子,說(shuō)的是有人用Digilent的PYNQ-Z1板卡實(shí)現了超強的加速性能。
早年,關(guān)于FPGA的開(kāi)發(fā)都是基于硬件描述語(yǔ)言,從開(kāi)始的VHDL到現在更為流行的Verilog,軟件應用也從由最開(kāi)始的匯編語(yǔ)言發(fā)展到現在的c/c++實(shí)現,這些都是目前為大多數FPGA開(kāi)發(fā)者所熟悉的FPGA發(fā)展路程。上個(gè)月,IEEE收錄了一篇關(guān)于使用Python開(kāi)發(fā)FPGA應用的論文。
在美國納帕舉行的第25屆關(guān)于可編程計算機器領(lǐng)域IEEE國際討論會(huì )上,一篇名為“評估通過(guò)Python快速開(kāi)發(fā)異構處理器FPGA應用性能”的短篇論文獲得了最佳短篇論文獎。這篇論文主要討論了Python開(kāi)發(fā)FPGA應用的優(yōu)勢和效率,論文中針對Digilent的PYNQ-Z1板卡(內部集成一個(gè)Xilinx Zynq SoC),通過(guò)支持Python編程和Jupyter Notebooks框架的PYNQ開(kāi)發(fā)環(huán)境,應用Python對此板卡進(jìn)行開(kāi)發(fā)編程,并最終評估開(kāi)發(fā)結果的優(yōu)勢和效率。值得一提的是,發(fā)表這篇論文的作者都是業(yè)界大佬,包括高級計算機科學(xué)家AndrewG.Schmidt、計算機科學(xué)家Gabriel Weise以及來(lái)自美國南加州大學(xué)工程技術(shù)科學(xué)協(xié)會(huì )的研究室主任Matthew French。在論文中,Matthew French教授主要就利用PYNQ開(kāi)發(fā)環(huán)境,應用Python語(yǔ)言對Xilinx Zynq器件進(jìn)行編程應用開(kāi)發(fā)時(shí)對FPGA器件的影響、性能結果以及瓶頸影響進(jìn)行了評估。此外,各位教授就基于Python的開(kāi)發(fā)結果與已經(jīng)存在的基于C語(yǔ)言的開(kāi)發(fā)及手動(dòng)開(kāi)發(fā)結果進(jìn)行了比較分析。
在論文中,各位教授還對PYNQ開(kāi)發(fā)環(huán)境的優(yōu)缺點(diǎn)進(jìn)行了闡述:
首先來(lái)說(shuō),PYNQ應用開(kāi)發(fā)框架是一個(gè)開(kāi)源的開(kāi)發(fā)環(huán)境,提供了標準的可以約束芯片I/O引腳的“Overlay”比特流,同時(shí),開(kāi)發(fā)人員可以在此開(kāi)發(fā)環(huán)境中,利用Python對FPGA進(jìn)行快速編程開(kāi)發(fā)。此外,PYNQ開(kāi)發(fā)環(huán)境內部集成標準的編程范式,支持HDMI和視頻流的輸出輸出,同時(shí)具有兩組12pin的PMOD連接器和一個(gè)兼容Arduino的連接器(可以連接或配置為Arduino系列板卡)。其中,默認的overlay中實(shí)例化了多個(gè)可以驅動(dòng)多I/O接口的微Blaze處理器核,也可以配置一些支持圖像濾波功能和試驗SIMT(單指令,多線(xiàn)程)編程軟邏輯GPU的overlay。同時(shí),PYNQ也提供了支持比特流編程的API和可擴展的通用Python庫和包,并且可以通過(guò)存儲映射I/O(MMIO)直接尋址可編程邏輯單元,另外還支持DMA交易(不需要經(jīng)過(guò)器件驅動(dòng)和核模塊之間的不斷握手確認)。
其次,就目前來(lái)說(shuō),PYNQ還不支持任何高級的綜合,也無(wú)法將Python應用直接移植到FPGA中。這就意味著(zhù),開(kāi)發(fā)者依然原型必須使用FPGA來(lái)創(chuàng )建一個(gè)設計,即當PYNQ提供一個(gè)支持板卡IO接口的Overlay框架以時(shí),任何用戶(hù)邏輯依然必須由開(kāi)發(fā)者親自創(chuàng )建并綜合。不過(guò),開(kāi)發(fā)者仍然可以使用高級綜合工具或上面提到的Python-to-HDL工程來(lái)完成這個(gè)任務(wù),但是最終,開(kāi)發(fā)者依然需要基于此設計并創(chuàng )建一個(gè)整合了Python代碼比特流文件。
也正是由于PYNQ存在這方面的缺陷,論文的作者并沒(méi)有簡(jiǎn)單依賴(lài)現存的PYNQ API接口和overlay,他們開(kāi)發(fā)出一個(gè)基于Redsharc項目的特定應用程序內核進(jìn)行研究。
結果如何呢?論文最后,作者對給出了Python開(kāi)發(fā)Zynq應用的各項評估結果。結果中給出了通過(guò)c/c++實(shí)現這項研究的一般圖像處理管道性能,以及定制的硬件加速器和Python實(shí)現的性能結果(下圖所示),幫助我們更好地理解了Python + FPGA開(kāi)發(fā)環(huán)境的性能和能。表中可以看出,結果十分明顯,通過(guò)PYNQ實(shí)現較c實(shí)現速度提高了30倍之多,更甚者,從結果中可以看出,當Python實(shí)現時(shí)有更加有效的可用庫時(shí),比如OpenCV,其性能可以增長(cháng)更多。

Python軟件實(shí)現和FPGA性能潛力的結合是一個(gè)非常有意義的工作,將會(huì )開(kāi)創(chuàng )出一個(gè)類(lèi)似于樹(shù)莓派和Arduino的廣大的開(kāi)發(fā)者社區。Python+FPGA是一個(gè)廣闊的未經(jīng)勘察過(guò)的領(lǐng)域——一個(gè)全新的更加高效的開(kāi)發(fā)空間——通過(guò)PYNQ開(kāi)發(fā)環(huán)境將會(huì )吸引更多的系統開(kāi)發(fā)者加入的領(lǐng)域。
日前在賽靈思OPENHW2017創(chuàng )新大賽暨教師峰會(huì )上,北京理工大學(xué)嵩天副教授《Python編程語(yǔ)言和PYNQ在中國》的演講,科普了Python編程風(fēng)靡全球的原因。
Python編程語(yǔ)言舉例,只用了21行代碼就完成了一個(gè)圖像素描的處理,Python大大提升了開(kāi)發(fā)效率。


人工智能和機器學(xué)習走熱,讓 Python 從眾多編程語(yǔ)言中脫穎而出。



還等什么呢?
人生苦短,我用Python
附11大編程語(yǔ)言薪資排行榜
編程語(yǔ)言有很多,但并非每一種的需求或工資都相同。人工智能和機器學(xué)習走熱,讓 Python 從眾多編程語(yǔ)言中脫穎而出。下文將綜合各種信源,以不同編程語(yǔ)言在美國市場(chǎng)的相關(guān)薪資水平、人氣和前景,為你提供一些參考。
薪資水平
使用國外招聘網(wǎng)站 Indeed.com 將編程語(yǔ)言的薪資水平劃分為 9 檔:基于這個(gè)結果,Ruby/Ruby on Rails 看起來(lái)會(huì )讓你掙得最多,而 Python,C++,iOS 和 Java 也是體面的選擇。如果薪資是你的主要關(guān)注點(diǎn),那么也許 C,PHP 和 SQL 不是最理想的選擇……

評論