Membuat Online Radio Broadcaster Shoutcast dengan esp32

Berikut adalah daftar komponen yang dibutuhkan untuk membuat ESP32 broadcast audio ke Shoutcast:

ESP32 board
Microphone atau Aux input
Encoder board atau program (seperti LAME MP3 encoder) untuk mengonversi sinyal audio ke format MP3
Wi-Fi module atau shield
Icecast atau Shoutcast server
Program atau skrip untuk mengirim data audio ke server

LAME MP3 encoder adalah sebuah program yang digunakan untuk mengonversi sinyal audio ke format MP3. Program ini merupakan software encoder yang bersifat open-source dan gratis untuk digunakan.

LAME MP3 encoder dapat diintegrasikan ke dalam berbagai aplikasi atau sistem, termasuk dalam proyek-proyek yang menggunakan ESP32 untuk broadcasting audio ke Shoutcast. Dalam hal ini, LAME MP3 encoder akan digunakan untuk mengonversi sinyal audio yang diterima dari microphone atau Aux input ke dalam format MP3, sehingga dapat dikirimkan melalui jaringan Wi-Fi ke server Shoutcast atau Icecast.

LAME MP3 encoder tidak dapat diinstal langsung ke dalam ESP32 karena LAME MP3 encoder adalah sebuah program yang berjalan pada tingkat perangkat lunak (software) dan ESP32 adalah sebuah mikrokontroler yang berjalan pada tingkat perangkat keras (hardware). Namun, Anda dapat menggunakan sebuah modul encoder MP3 seperti VS1053 atau VS1063 yang dapat dihubungkan ke ESP32 melalui antarmuka SPI atau I2S.

Modul encoder MP3 seperti VS1053 atau VS1063 memiliki kemampuan untuk mengonversi sinyal audio yang diterima dari microphone atau aux input ke dalam format MP3 secara real-time dan mengirimkannya ke server Shoutcast atau Icecast melalui jaringan Wi-Fi. Dengan menggunakan modul encoder MP3 ini, ESP32 dapat berfungsi sebagai perangkat untuk broadcast audio ke Shoutcast atau Icecast dengan kualitas suara yang baik.

Untuk merangkai ESP32 dan modul encoder MP3 (seperti VS1053 atau VS1063) menjadi satu kesatuan yang siap digunakan untuk broadcasting audio ke Shoutcast, langkah-langkah yang dapat dilakukan adalah sebagai berikut:

Siapkan ESP32 board dan modul encoder MP3 (VS1053 atau VS1063).
Hubungkan ESP32 dan modul encoder MP3 melalui antarmuka SPI atau I2S. Anda dapat mengikuti petunjuk pinout dari masing-masing modul untuk mengetahui koneksi yang tepat.
Sambungkan microphone atau Aux input ke modul encoder MP3.
Siapkan kode program untuk ESP32 yang dapat mengambil data audio dari microphone atau Aux input, dan mengirimkannya ke modul encoder MP3 untuk dikonversi ke dalam format MP3, dan kemudian mengirimkan hasil konversi ke server Shoutcast atau Icecast melalui jaringan Wi-Fi.
Unggah kode program tersebut ke dalam ESP32 board dengan menggunakan software IDE seperti Arduino IDE atau PlatformIO.
Pastikan bahwa ESP32 board dan modul encoder MP3 terhubung ke jaringan Wi-Fi yang sama dengan server Shoutcast atau Icecast.
Jalankan program pada ESP32 board untuk memulai broadcasting audio ke Shoutcast atau Icecast.
Dengan mengikuti langkah-langkah tersebut, Anda dapat merangkai ESP32 dan modul encoder MP3 menjadi satu kesatuan yang siap digunakan untuk broadcasting audio ke Shoutcast atau Icecast.

Berikut ini adalah contoh script yang dapat digunakan untuk broadcasting audio dari ESP32 ke server Shoutcast dengan konfigurasi IP 192.168.2.23, port 1234, dan password admin oke123 untuk mengakses server dan password broadcast oke321 untuk broadcasting:


#include
#include

// Deklarasi WiFi
const char* ssid = "nama-wifi";
const char* password = "password-wifi";

// Deklarasi server Shoutcast
char server[] = "192.168.2.23";
int port = 1234;
char auth[] = "admin:oke123";
char broadcast[] = "source/oke321"; // stream name

// Deklarasi VS1053 MP3 encoder
VS1053 encoder(14, 13, 15, 26);

// Deklarasi microphone atau Aux input
const int inputPin = A0;

// Inisialisasi koneksi Wi-Fi
void initWiFi() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

// Inisialisasi koneksi ke server Shoutcast
WiFiClient client;
void initServer() {
if (client.connect(server, port)) {
Serial.println("Connected to server");
// Kirim request header ke server
client.println("GET /admin.cgi?mode=updinfo&pass=oke123&song=Broadcasting HTTP/1.1");
client.println("User-Agent: ESP32");
client.println("Host: 192.168.2.23:1234");
client.println("Connection: close");
client.println("");
} else {
Serial.println("Failed to connect to server");
}
}

// Fungsi untuk mengirimkan data audio ke server Shoutcast
void sendData(byte* data, size_t len) {
if (client.connected()) {
// Kirim data ke server menggunakan HTTP POST request
client.println("POST /" + String(broadcast) + " HTTP/1.1");
client.println("User-Agent: ESP32");
client.println("Host: " + String(server) + ":" + String(port));
client.println("Authorization: Basic " + base64::encode(auth));
client.println("Connection: close");
client.println("Content-Type: audio/mpeg");
client.println("Content-Length: " + String(len));
client.println();
client.write(data, len);
client.println();
}
}

void setup() {
Serial.begin(115200);
// Inisialisasi koneksi Wi-Fi
initWiFi();
// Inisialisasi koneksi ke server Shoutcast
initServer();
// Inisialisasi VS1053 MP3 encoder
encoder.begin();
encoder.setVolume(40, 40);
}

void loop() {
// Baca data audio dari microphone atau Aux input
int audioData = analogRead(inputPin);
// Konversi data audio ke format MP3
byte mp3Data[32];
int len = encoder.encode(audioData, mp3Data, sizeof(mp3Data));
// Kirim data audio ke server Shoutcast
sendData(mp3Data, len);
// Tunggu selama 20ms sebelum mengambil data audio selanjutnya
delay(20);
}