之前有新聞提到,有的地方已經建成音樂路面。無處不在的音樂果然神通廣大,現在都有各種各樣的顏色了。人類已經無法阻擋新技術的發展了,一塊芯片竟有如此洪荒之力。
幾年前,我寫了可以將色彩分配給音符的算法ColorChord,但有點粗糙。受設備限制,我使用了專用的圖形處理器。經過研究和重寫,最終,它不僅可以在臺式機的CPU上運行,還能在微控制器上運行。那么它能否在更簡單的設備上運行呢?這就要提到樂鑫公司的一款Wi-Fi橋接設備—ESP8266。
ESP8266具有通用輸入/輸出端口;具備直接內存訪問的集成芯片間聲音,可進行快速數據傳輸;脈寬調制硬件支持;以及一個模數轉換器(ADC)。通過在ESP上運行代碼,可以讓物聯網設備和服務器擁有豐富的用戶界面。
當時,黑客社區開發了固件工具、編譯器以及演示和集成開發環境,可以實現在ESP上運行Arduino和NodeMCU代碼。慶幸的是,樂鑫公司也隨之發布并更新了其軟件開發工具包(SDK),并發布了文檔。結果,ESP也從一塊價值2美元的芯片變身成為一個32位的全功能無線微控制器,且追隨者越來越多。
因此,我想在ESP上運行ColorChord,以便它聽聲音、判斷色值,然后再用色值去控制一系列可分別單獨控制的色彩LED模塊(WS2812B)。一般來說,許多人認為Arduino IDE和它的Wiring語言是理想選擇。不過,我選擇的是C語言和官方的Espressif SDK來打造自己的固件。雖然SDK使用起來不太方便,但它的功能十分完善。寫項目軟件的時候,我通過調查研究,找到了能夠利用精確處理器中斷請求讀取ADC的人。控制WS2812B串行方面,我將I2S總線與DMA引擎連接起來,大量緩沖數據便能通過一個單獨的引腳移至LED模塊了,整個過程都沒怎么使用CPU。
大部分低層輸入和輸出都是由配套硬件處理的,所以ESP核心便得到了解放。我把經過高度優化的ColorChord C代碼放在ESP上運行。ESP竟然沒有崩潰,我成功了!整個裝置很小巧,足以附著在薩克斯風上。把LED放在薩克斯風管口里面,有人吹時,它不僅能發出聲音,還能亮出顏色。
ESP8266太神奇了。樂鑫公司還在向我們展示這塊芯片能做什么,esp8266.com社區也在探索樂鑫公司尚未想到的可能性。我會繼續搜尋,學習更多知識。
作者:Charles Lohr