第1步:獲取所有部件
我們需要以下部分:
MP3解碼器
隔離變壓器
3W揚聲器
3.5“Nextion Display
按鈕
面包板
Wire
The該項目的總成本約為40美元,但如果您不使用顯示器,該項目的成本約為20美元。令人驚奇的東西。我們可以用20美元建立我們自己的網(wǎng)絡(luò)電臺!
第2步:ESP32 Board
項目的核心是,當(dāng)然,強大的ESP32板。如果您不熟悉它,ESP32芯片是我們過去多次使用的流行的ESP8266芯片的繼承者。 ESP32是一個野獸!它提供兩個32位處理核心,工作頻率為160MHz,大量內(nèi)存,WiFi,藍(lán)牙和許多其他功能,成本約為7美元!驚人的東西!
請觀看我為此委員會準(zhǔn)備的詳細(xì)評論。我已將視頻附加到此Instructable上。它將有助于理解為什么這個芯片會改變我們永遠(yuǎn)做事的方式!關(guān)于ESP32最激動人心的事情之一就是即使它非常強大,它也提供深度睡眠模式,只需要10μA的電流。這使ESP32成為低功耗應(yīng)用的理想芯片。
在這個項目中,ESP32板連接到Internet,然后它從我們正在收聽的無線電臺接收MP3數(shù)據(jù),并發(fā)送一些命令到顯示器。
步驟3:MP3解碼器
然后MP3數(shù)據(jù)使用SPI接口發(fā)送到MP3解碼器模塊。該模塊使用VS1053 IC。該IC是專用的硬件MP3解碼器。它從ESP32獲取MP3數(shù)據(jù)并將其快速轉(zhuǎn)換為音頻信號。
它在此音頻插孔輸出的音頻信號很弱且噪音很大,所以我們需要從噪聲中清除它放大它。 (如果你使用耳機,信號不需要從噪聲中清除或放大。)這就是為什么我使用隔離變壓器來清除噪聲中的音頻和PAM8403音頻放大器來放大音頻信號然后發(fā)送它發(fā)言者我還將兩個按鈕連接到ESP32,只是為了改變我們從中獲取數(shù)據(jù)的MP3流和用于顯示我們正在收聽的無線電臺的Nextion顯示。
步驟4:Nextion Display
我選擇使用Nextion顯示 此項目,因為它非常易于使用。我們只需要連接一根電線來控制它。
Nextion顯示器是一種新型顯示器。他們在后面有自己的ARM處理器,負(fù)責(zé)驅(qū)動顯示器并創(chuàng)建圖形用戶界面。因此,我們可以將它們與任何微控制器一起使用并獲得驚人的效我已經(jīng)準(zhǔn)備好了這個Nextion顯示器的詳細(xì)評論,它深入地解釋了它們?nèi)绾喂ぷ鳎绾问褂盟鼈円约八鼈兊娜秉c。您可以在這里閱讀,或觀看附加的視頻。
步驟5:連接所有部件
現(xiàn)在我們要做的就是連接根據(jù)該示意圖將所有部件組合在一起。您可以在此處找到原理圖。連接很簡單。
但有兩點需要注意。 MP3解碼器模塊輸出立體聲信號,但我在這個項目中只使用一個音頻通道。為了獲得音頻信號,我將音頻線連接到模塊的音頻插孔,并將其切斷以顯示內(nèi)部的四根線。我連接了兩根電線。其中一個是GND,另一個是兩個音頻通道之一的音頻信號。如果您希望可以將兩個通道連接到放大器模塊并驅(qū)動兩個揚聲器。
每個音頻通道必須通過隔離變壓器,以清除連接到放大器之前出現(xiàn)的任何噪聲。
要將數(shù)據(jù)發(fā)送到顯示器,我們只需要將一根線連接到ESP32的TX0引腳。連接部件后,我們必須將代碼加載到ESP32,我們必須將GUI加載到Nextion顯示器。
要將GUI加載到Nextion顯示器,請復(fù)制InternetRadio.tft文件I我要和你分享一張空的SD卡。將SD卡放入顯示器背面的SD卡插槽中。然后打開顯示器電源,將加載GUI。然后取出SD卡并重新連接電源。
成功加載代碼后,讓我們啟動項目。它在顯示屏上顯示文本“正在連接。..”幾秒鐘。連接到互聯(lián)網(wǎng)后,項目連接到預(yù)定義的無線電臺。硬件按預(yù)期工作,但現(xiàn)在讓我們看看項目的軟件方面。
步驟6:項目代碼
首先,讓我告訴你一些事情。 T 項目代碼不如 140行代碼。考慮一下,我們可以使用帶有140行代碼的3.5英寸顯示器構(gòu)建一個網(wǎng)絡(luò)電臺,這太棒了。我們可以使用包含數(shù)千行代碼的各種庫來實現(xiàn)所有這些。這是Arduino和開源社區(qū)的力量。它使制造商變得容易。
在這個項目中,我使用VS1053庫作為ESP32板。
首先,我們必須定義SSID和密碼。 Wi-Fi網(wǎng)絡(luò)。接下來,我們必須在這里保存一些電臺。我們需要主機URL,流所在的路徑以及我們需要使用的端口。我們將所有這些信息保存到這些變量中。
char ssid[] = “yourSSID”; // your network SSID (name)
char pass[] = “yourWifiPassword”; // your network password
// Few Radio Stations
char *host[4] = {“149.255.59.162”,“radiostreaming.ert.gr”,“realfm.live24.gr”, “secure1.live24.gr”};
char *path[4] = {“/1”,“/ert-kosmos”,“/realfm”,“/skai1003”};
int port[4] = {8062,80,80,80};
在這個例子中我已經(jīng)包含了4個電臺。
在設(shè)置功能中我們將中斷連接到按鈕,我們初始化MP3解碼器模塊,我們連接到Wi-Fi。
void setup () {
Serial.begin(9600);
delay(500);
SPI.begin();
pinMode(previousButton, INPUT_PULLUP);
pinMode(nextButton, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(previousButton), previousButtonInterrupt, FALLING);
attachInterrupt(digitalPinToInterrupt(nextButton), nextButtonInterrupt, FALLING);
initMP3Decoder();
connectToWIFI();
}
在循環(huán)功能中,首先,我們檢查用戶是否選擇了不同于我們從中獲取數(shù)據(jù)的無線電臺。如果是這樣,我們連接到新的無線電臺,否則我們從流中獲取數(shù)據(jù)并將它們發(fā)送到MP3解碼器模塊。
void loop() {
if(radioStation!=previousRadioStation)
{
station_connect(radioStation);
previousRadioStation = radioStation;
}
if (client.available() 》 0)
{
uint8_t bytesread = client.read(mp3buff, 32);
player.playChunk(mp3buff, bytesread);
}
}
這就是全部!當(dāng)用戶按下按鈕時,會發(fā)生中斷,并更改變量的值,該變量告訴連接哪個流。
void IRAM_ATTR previousButtonInterrupt() {
static unsigned long last_interrupt_time = 0;
unsigned long interrupt_time = millis();
if (interrupt_time - last_interrupt_time 》 200)
{
if(radioStation》0)
radioStation--;
else
radioStation = 3;
}
last_interrupt_time = interrupt_time;
}
要更新顯示,我們只需向其發(fā)送一些命令即可。串口。
void drawRadioStationName(int id)
{
String command;
switch (id)
{
case 0: command = “p1.pic=2”; Serial.print(command); endNextionCommand(); break; //1940 UK Radio
case 1: command = “p1.pic=3”; Serial.print(command); endNextionCommand(); break; //KOSMOS GREEK
case 2: command = “p1.pic=4”; Serial.print(command); endNextionCommand(); break; //REAL FM GREEK
case 3: command = “p1.pic=5”; Serial.print(command); endNextionCommand(); break; //SKAI 100.3 GREEK
}
}
現(xiàn)在讓我們來看看Nextion Display GUI。 Nextion GUI由背景圖片和顯示電臺名稱的圖片組成。 ESP32板發(fā)送命令以從嵌入的圖像中更改無線電臺的名稱。這很容易。請觀看我前段時間準(zhǔn)備的Nextion顯示教程,以獲取更多信息。如果您愿意,可以快速設(shè)計自己的GUI并在其上顯示更多內(nèi)容。
一如既往,您可以找到此Instructable附帶的項目代碼。
第7步:最后的想法和改進(jìn)
這個項目非常簡單。 我想 一個簡單的Internet廣播項目框架。現(xiàn)在項目的第一個版本已準(zhǔn)備好,我們可以添加許多功能來改進(jìn)它。首先,我需要設(shè)計一個可容納所有電子設(shè)備的外殼。
-
網(wǎng)絡(luò)收音機
+關(guān)注
關(guān)注
1文章
12瀏覽量
8019 -
ESP32
+關(guān)注
關(guān)注
21文章
1017瀏覽量
19262
發(fā)布評論請先 登錄
啟明云端ESP32-S3 2.8寸串口屏到手了?如何上手?看這篇!

【開源分享】用ESP32復(fù)刻一個iPod :便攜式音樂播放器Tangara
基于ESP32的圓形顯示屏圣誕主題互動式雪球

天馬攜手康寧推出最新柔性O(shè)LED車載顯示屏
開源項目!基于ESP32的圓形顯示屏互動式圣誕雪球
ESP32-P4方案4.3寸IPS觸摸屏上線!

3.5英寸軟驅(qū)位利用起來!ICY DOCK打造電腦擴(kuò)容新方案

評論