紅外遙控器

--基于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ǔ),掉線不丟失。

二、板卡介紹

image.png

圖 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ì)需求。

image.png

圖 2 RP2040 Game Kit 板載資源框圖

三、項(xiàng)目設(shè)計(jì)

結(jié)合題目要求與硬件平臺(tái),本項(xiàng)目設(shè)計(jì)思路如下。

image.png

圖 3 項(xiàng)目系統(tǒng)設(shè)計(jì)圖

四、硬件分析

在本項(xiàng)目中,主要是用到的是紅外接收頭、紅外發(fā)射頭、IPS屏幕,四向搖桿和按鍵。

1、紅外接收/發(fā)送

平臺(tái)搭載了一個(gè)IRM-M638MT作為紅外線信號(hào)接收元件,一個(gè)VSMB10940作為紅外線發(fā)射元件。

image.png

圖 4紅外電路

2、IPS屏幕

平臺(tái)搭載了一個(gè)240x240的IPS彩屏,采用st7789驅(qū)動(dòng),SPI信號(hào)協(xié)議。

image.png

圖 5 屏幕電路

3、四向搖桿

使用RP2040的ADC讀取搖桿輸出信號(hào)電壓值獲取搖桿位置。

image.png

圖 6搖桿電路

4、按鍵

根據(jù)項(xiàng)目需求,本次僅使用A和B兩個(gè)按鍵,低電平有效,使用時(shí)開啟內(nèi)部上拉。

image.png

圖 7 按鍵電路

5、引腳使用情況

表格 1 本項(xiàng)目引腳列表

image.png

 

五、紅外編碼傳輸介紹

紅外編碼傳輸?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í)也代表其安全性差,易被劫持。

FrfUOIHFWujpiqL3PodsHBRq64tD

圖 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

七、界面演示

image.pngimage.pngimage.pngimage.pngimage.png

八、為什么采用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í)行接收中斷,此功能目前至今也未被提供(官方文檔中未給出)。

image.png

圖 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)系我們刪除。