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