第1步:獲取所有部件
我們需要以下部分:
MP3解碼器
隔離變壓器
3W揚(yáng)聲器
3.5“Nextion Display
按鈕
面包板
Wire
The該項(xiàng)目的總成本約為40美元,但如果您不使用顯示器,該項(xiàng)目的成本約為20美元。令人驚奇的東西。我們可以用20美元建立我們自己的網(wǎng)絡(luò)電臺(tái)!
第2步:ESP32 Board
項(xiàng)目的核心是,當(dāng)然,強(qiáng)大的ESP32板。如果您不熟悉它,ESP32芯片是我們過去多次使用的流行的ESP8266芯片的繼承者。 ESP32是一個(gè)野獸!它提供兩個(gè)32位處理核心,工作頻率為160MHz,大量內(nèi)存,WiFi,藍(lán)牙和許多其他功能,成本約為7美元!驚人的東西!
請(qǐng)觀看我為此委員會(huì)準(zhǔn)備的詳細(xì)評(píng)論。我已將視頻附加到此Instructable上。它將有助于理解為什么這個(gè)芯片會(huì)改變我們永遠(yuǎn)做事的方式!關(guān)于ESP32最激動(dòng)人心的事情之一就是即使它非常強(qiáng)大,它也提供深度睡眠模式,只需要10μA的電流。這使ESP32成為低功耗應(yīng)用的理想芯片。
在這個(gè)項(xiàng)目中,ESP32板連接到Internet,然后它從我們正在收聽的無線電臺(tái)接收MP3數(shù)據(jù),并發(fā)送一些命令到顯示器。
步驟3:MP3解碼器
然后MP3數(shù)據(jù)使用SPI接口發(fā)送到MP3解碼器模塊。該模塊使用VS1053 IC。該IC是專用的硬件MP3解碼器。它從ESP32獲取MP3數(shù)據(jù)并將其快速轉(zhuǎn)換為音頻信號(hào)。
它在此音頻插孔輸出的音頻信號(hào)很弱且噪音很大,所以我們需要從噪聲中清除它放大它。 (如果你使用耳機(jī),信號(hào)不需要從噪聲中清除或放大。)這就是為什么我使用隔離變壓器來清除噪聲中的音頻和PAM8403音頻放大器來放大音頻信號(hào)然后發(fā)送它發(fā)言者我還將兩個(gè)按鈕連接到ESP32,只是為了改變我們從中獲取數(shù)據(jù)的MP3流和用于顯示我們正在收聽的無線電臺(tái)的Nextion顯示。
步驟4:Nextion Display
我選擇使用Nextion顯示 此項(xiàng)目,因?yàn)樗浅R子谑褂?。我們只需要連接一根電線來控制它。
Nextion顯示器是一種新型顯示器。他們?cè)诤竺嬗凶约旱?a target="_blank">ARM處理器,負(fù)責(zé)驅(qū)動(dòng)顯示器并創(chuàng)建圖形用戶界面。因此,我們可以將它們與任何微控制器一起使用并獲得驚人的效我已經(jīng)準(zhǔn)備好了這個(gè)Nextion顯示器的詳細(xì)評(píng)論,它深入地解釋了它們?nèi)绾喂ぷ?,如何使用它們以及它們的缺點(diǎn)。您可以在這里閱讀,或觀看附加的視頻。
步驟5:連接所有部件
現(xiàn)在我們要做的就是連接根據(jù)該示意圖將所有部件組合在一起。您可以在此處找到原理圖。連接很簡(jiǎn)單。
但有兩點(diǎn)需要注意。 MP3解碼器模塊輸出立體聲信號(hào),但我在這個(gè)項(xiàng)目中只使用一個(gè)音頻通道。為了獲得音頻信號(hào),我將音頻線連接到模塊的音頻插孔,并將其切斷以顯示內(nèi)部的四根線。我連接了兩根電線。其中一個(gè)是GND,另一個(gè)是兩個(gè)音頻通道之一的音頻信號(hào)。如果您希望可以將兩個(gè)通道連接到放大器模塊并驅(qū)動(dòng)兩個(gè)揚(yáng)聲器。
每個(gè)音頻通道必須通過隔離變壓器,以清除連接到放大器之前出現(xiàn)的任何噪聲。
要將數(shù)據(jù)發(fā)送到顯示器,我們只需要將一根線連接到ESP32的TX0引腳。連接部件后,我們必須將代碼加載到ESP32,我們必須將GUI加載到Nextion顯示器。
要將GUI加載到Nextion顯示器,請(qǐng)復(fù)制InternetRadio.tft文件I我要和你分享一張空的SD卡。將SD卡放入顯示器背面的SD卡插槽中。然后打開顯示器電源,將加載GUI。然后取出SD卡并重新連接電源。
成功加載代碼后,讓我們啟動(dòng)項(xiàng)目。它在顯示屏上顯示文本“正在連接。..”幾秒鐘。連接到互聯(lián)網(wǎng)后,項(xiàng)目連接到預(yù)定義的無線電臺(tái)。硬件按預(yù)期工作,但現(xiàn)在讓我們看看項(xiàng)目的軟件方面。
步驟6:項(xiàng)目代碼
首先,讓我告訴你一些事情。 T 項(xiàng)目代碼不如 140行代碼??紤]一下,我們可以使用帶有140行代碼的3.5英寸顯示器構(gòu)建一個(gè)網(wǎng)絡(luò)電臺(tái),這太棒了。我們可以使用包含數(shù)千行代碼的各種庫來實(shí)現(xiàn)所有這些。這是Arduino和開源社區(qū)的力量。它使制造商變得容易。
在這個(gè)項(xiàng)目中,我使用VS1053庫作為ESP32板。
首先,我們必須定義SSID和密碼。 Wi-Fi網(wǎng)絡(luò)。接下來,我們必須在這里保存一些電臺(tái)。我們需要主機(jī)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};
在這個(gè)例子中我已經(jīng)包含了4個(gè)電臺(tái)。
在設(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ù)的無線電臺(tái)。如果是這樣,我們連接到新的無線電臺(tái),否則我們從流中獲取數(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)用戶按下按鈕時(shí),會(huì)發(fā)生中斷,并更改變量的值,該變量告訴連接哪個(gè)流。
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由背景圖片和顯示電臺(tái)名稱的圖片組成。 ESP32板發(fā)送命令以從嵌入的圖像中更改無線電臺(tái)的名稱。這很容易。請(qǐng)觀看我前段時(shí)間準(zhǔn)備的Nextion顯示教程,以獲取更多信息。如果您愿意,可以快速設(shè)計(jì)自己的GUI并在其上顯示更多內(nèi)容。
一如既往,您可以找到此Instructable附帶的項(xiàng)目代碼。
第7步:最后的想法和改進(jìn)
這個(gè)項(xiàng)目非常簡(jiǎn)單。 我想 一個(gè)簡(jiǎn)單的Internet廣播項(xiàng)目框架?,F(xiàn)在項(xiàng)目的第一個(gè)版本已準(zhǔn)備好,我們可以添加許多功能來改進(jìn)它。首先,我需要設(shè)計(jì)一個(gè)可容納所有電子設(shè)備的外殼。
-
網(wǎng)絡(luò)收音機(jī)
+關(guān)注
關(guān)注
1文章
11瀏覽量
7895 -
ESP32
+關(guān)注
關(guān)注
18文章
971瀏覽量
17430
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論