--基于RP2040游戲機(jī)的綜合應(yīng)用
一、項(xiàng)目介紹
此項(xiàng)目是基于電子森林的RP2040 Game Kit平臺(tái)的一個(gè)紅外遙控器,具體功能如下:
1、調(diào)用板載IRM-H638T紅外接收頭接收紅外信號(hào)
2、對(duì)紅外信號(hào)進(jìn)行解析,得到其協(xié)議、地址、命令等信息,并顯示
3、對(duì)接收的紅外信號(hào)進(jìn)行存儲(chǔ),實(shí)現(xiàn)紅外指令的學(xué)習(xí)功能。
4、調(diào)用VSMB20940紅外發(fā)射二極管發(fā)送已存儲(chǔ)信號(hào)。
5、學(xué)習(xí)的紅外信號(hào)在FLASH中存儲(chǔ),掉線不丟失。
二、板卡介紹
圖 1 RP2040 Game Kit
本次使用的平臺(tái)是RP2040 Game Kit,其核心為RP2040芯片,雙核ARM Cortex M0+,不超頻下[敏感詞]時(shí)鐘可達(dá)133MHz,可通過Mpy、Arduino等多種方式編程。平臺(tái)外觀采用仿游戲機(jī)設(shè)計(jì)。板載多種資源,可以滿足大部分設(shè)計(jì)需求。
圖 2 RP2040 Game Kit 板載資源框圖
三、項(xiàng)目設(shè)計(jì)
結(jié)合題目要求與硬件平臺(tái),本項(xiàng)目設(shè)計(jì)思路如下。
圖 3 項(xiàng)目系統(tǒng)設(shè)計(jì)圖
四、硬件分析
在本項(xiàng)目中,主要是用到的是紅外接收頭、紅外發(fā)射頭、IPS屏幕,四向搖桿和按鍵。
1、紅外接收/發(fā)送
平臺(tái)搭載了一個(gè)IRM-M638MT作為紅外線信號(hào)接收元件,一個(gè)VSMB10940作為紅外線發(fā)射元件。
圖 4紅外電路
2、IPS屏幕
平臺(tái)搭載了一個(gè)240x240的IPS彩屏,采用st7789驅(qū)動(dòng),SPI信號(hào)協(xié)議。
圖 5 屏幕電路
3、四向搖桿
使用RP2040的ADC讀取搖桿輸出信號(hào)電壓值獲取搖桿位置。
圖 6搖桿電路
4、按鍵
根據(jù)項(xiàng)目需求,本次僅使用A和B兩個(gè)按鍵,低電平有效,使用時(shí)開啟內(nèi)部上拉。
圖 7 按鍵電路
5、引腳使用情況
表格 1 本項(xiàng)目引腳列表
五、紅外編碼傳輸介紹
紅外編碼傳輸?shù)谋举|(zhì)是將已知信號(hào)進(jìn)行數(shù)字編碼、調(diào)制到紅外光波段,再進(jìn)行發(fā)送的信號(hào)傳輸方式。在接收端以同頻進(jìn)行解調(diào),即可得到傳輸結(jié)果。常見的傳輸載波頻率如38kHz。
被調(diào)制的已知信號(hào)可根據(jù)不同紅外傳輸協(xié)議進(jìn)行不同的定義和編碼。如常見的NEC編碼,其標(biāo)準(zhǔn)編碼為4字節(jié)(32位),為1byte地址+1byte地址反碼+1byte數(shù)據(jù)+1byte數(shù)據(jù)反碼。
紅外傳輸具有很多優(yōu)勢(shì)。首先,紅外光為肉眼不可見光段,在使用時(shí)可以避免產(chǎn)生不必要的光束,不會(huì)影響人類正常生活。其本質(zhì)與可見光LED相同,正常使用下也不會(huì)對(duì)人眼造成損傷。其次紅外發(fā)光二極管制造簡(jiǎn)單,價(jià)格便宜,功耗極低。因此基于紅外編碼傳輸?shù)倪b控手段被廣泛應(yīng)用于許多消費(fèi)電子產(chǎn)品中。
紅外傳輸也具有劣勢(shì)。由于太陽等因素,環(huán)境中本身存在一定紅外光,若頻率相近,會(huì)干擾紅外遙控信號(hào)。且紅外光穿透性差,幾乎無穿墻能力。
紅外傳輸?shù)木幋a方式簡(jiǎn)單,易于實(shí)現(xiàn)“學(xué)習(xí)”功能。這同時(shí)也代表其安全性差,易被劫持。
圖 8 紅外傳輸示意圖(來自電子森林)
六、函數(shù)庫(kù)介紹
1、RP2040的開發(fā)板庫(kù):
想在Arduino中正確的編譯RP2040并使用,加載RP2040的Arduino庫(kù)。他并不是Arduino官方提供的庫(kù),因此需要手動(dòng)安裝。
GitHub - earlephilhower/arduino-pico: Raspberry Pi Pico Arduino core, for all RP2040 boards
2、紅外:
IRremote庫(kù)是一個(gè)在Arduino中被廣泛使用的紅外庫(kù),它可以兼容數(shù)十種被普遍使用的紅外協(xié)議。其庫(kù)函數(shù)豐富,包含了接收、發(fā)送、解碼、編碼等功能。且對(duì)于AVR單片機(jī)、ESP系列、RP2040都有很好的支持。
更詳細(xì)的庫(kù)介紹可以看我的博客:IRremote 紅外線接收模塊使用 會(huì)伏丘的CSDN
3、文件管理:
LittleFS是一個(gè)為微控制器設(shè)計(jì)的小型且安全的文件系統(tǒng),已被集成在Arduino的RP2040庫(kù)中,十分的輕量化。它具有斷電回彈、動(dòng)態(tài)均衡以及緩沖限制等功能。使用該庫(kù)可以方便的在flash中讀寫文件,以實(shí)現(xiàn)參數(shù)掉電不丟失的效果。
4、屏幕顯示:
整個(gè)系統(tǒng)的交互層級(jí)邏輯按圖三進(jìn)行設(shè)計(jì),使用TFT_eSPI庫(kù)來對(duì)IPS屏幕進(jìn)行控制。具體的繪圖函數(shù)比較簡(jiǎn)單,不再詳細(xì)介紹。
中文字庫(kù)制作參考: Arduino庫(kù)<TFT_eSPI>中文字庫(kù)的制作與使用 會(huì)伏丘的CSDN
七、界面演示
八、為什么采用Arduino而不是Micropython
對(duì)于RP2040,常用的編程方式為c、micropython和arduino。C語言過于底層,本人能力有限,暫未考慮。對(duì)于后兩者,本人在項(xiàng)目中嘗試了這兩種方式,得出結(jié)論如下:
1、 Micropython是解釋型語言,而Arduino是編譯型語言,底層為C。因此Arduino在運(yùn)行速度上更具有優(yōu)勢(shì)。以刷屏為例,在mpy中,即使啟用dma緩沖區(qū),也會(huì)存在肉眼可見的刷屏過渡。而使用Arduino的<TFT_eSPI>庫(kù)進(jìn)行刷屏,幾乎不會(huì)出現(xiàn)刷屏過渡。
2、 Micropython作為新興語言,雖然發(fā)展迅速,但其整體語言生態(tài)還是較弱于Arduino。相比之下Arduino具有更良好的開源環(huán)境和豐富庫(kù)支持。如紅外,mpy的micropython_ir庫(kù)僅支持8種紅外編碼協(xié)議,而Arduino的IRremote庫(kù)支持近二十種協(xié)議。且Arduino有“庫(kù)管理器”這樣的官方庫(kù)資源整合系統(tǒng),而據(jù)我所知mpy并沒有。
3、 Micropython在提高編程簡(jiǎn)便性的同時(shí)犧牲了深度,許多常用功能目前尚未支持。例如I2C作為從機(jī)模式并執(zhí)行接收中斷,此功能目前至今也未被提供(官方文檔中未給出)。
圖 9 來自樹莓派社區(qū)的討論截圖
因此,針對(duì)于本項(xiàng)目,最終選擇了使用Arduino進(jìn)行開發(fā),而不是mpy。
九、小結(jié)
這是我首次在RP2040這款芯片上完成項(xiàng)目,分別測(cè)試了micropython和arduino這兩種主流的編程方式,了解了各自的優(yōu)缺點(diǎn)。同時(shí)也了學(xué)會(huì)了紅外遙控命令的原理和編碼特點(diǎn)。
免責(zé)聲明:本文轉(zhuǎn)載自“電子森林”,本文僅代表作者個(gè)人觀點(diǎn),不代表薩科微及行業(yè)觀點(diǎn),只為轉(zhuǎn)載與分享,支持保護(hù)知識(shí)產(chǎn)權(quán),轉(zhuǎn)載請(qǐng)注明原出處及作者,如有侵權(quán)請(qǐng)聯(lián)系我們刪除。