//Network Radio // #include "Arduino.h" #include "WiFi.h" // Library zip install from: https://github.com/schreibfaul1/ESP32-audioI2S #include "Audio.h" #include #include #include // OLED setting #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Digital output for PCM5102 #define I2S_DOUT 25 // DIN connection IO25 #define I2S_BCLK 27 // Bit clock IO27 #define I2S_LRC 26 // Left Right Clock IO26 // Digital input for Volume Control #define vol 10 // Playback Volume Level 0...21 // Station Channel Selector for 8 channels const int Sel_1_Pin = 2; const int Sel_2_Pin = 15; const int Sel_3_Pin = 4; // Wifi Network Selector for 4 networks const int gSel_1_Pin = 12; const int gSel_2_Pin = 32; Audio audio; Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); //WiFi network SSID and password String ssid0 = "*****************"; String password0 = "+++++++++++++++++"; String ssid1 = "*****************"; String password1 = "+++++++++++++++++"; String ssid2 = "*****************"; String password2 = "+++++++++++++++++"; String ssid3 = "*****************"; String password3 = "+++++++++++++++++"; //Station URLs String stations[] ={ "s3.voscast.com:10038/stream", // Beautiful Instrumentals "listen.181fm.com/181-power_128k.mp3", // 181.FM Power181 (Top 40) "ais-sa2.cdnstream1.com/b22139_128mp3", // 101 SMOOTH JAZZ "relax.stream.publicradio.org/relax.mp3", // Your Classical - Relax "***********************************", // ***************** "***********************************", // ***************** "***********************************", // ***************** "***********************************", // ***************** }; //Station names String station_name[] = { "Beautiful Instrumentals", "181.FM Power181-Top40", "101 SMOOTH JAZZ", "Your Classical-Relax", "*****************", "*****************", "*****************", "*****************", }; uint8_t cur_gateway ; // current gateway No. uint8_t cur_station ; // current station No. void setup() { Serial.begin(115200); WiFi.disconnect(); WiFi.mode(WIFI_STA); //WiFi network selector pinMode(gSel_1_Pin, INPUT_PULLUP); pinMode(gSel_2_Pin, INPUT_PULLUP); if(digitalRead(gSel_1_Pin) == HIGH) { if(digitalRead(gSel_2_Pin) == HIGH){ WiFi.begin(ssid0.c_str(), password0.c_str()); } else {WiFi.begin(ssid1.c_str(), password1.c_str());} } else { if(digitalRead(gSel_2_Pin) == HIGH) { WiFi.begin(ssid2.c_str(), password2.c_str()); } else {WiFi.begin(ssid3.c_str(), password3.c_str());} } while (WiFi.status() != WL_CONNECTED) delay(1500); Serial.println("WiFi start"); audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT); audio.setVolume(vol); // 0...21 // Station selector pinMode(Sel_1_Pin, INPUT_PULLUP); pinMode(Sel_2_Pin, INPUT_PULLUP); pinMode(Sel_3_Pin, INPUT_PULLUP); cur_station = digitalRead(Sel_1_Pin)+digitalRead(Sel_2_Pin)*2+digitalRead(Sel_3_Pin)*4; audio.connecttohost(stations[cur_station].c_str()); // Setup OLED if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); } } void loop() { audio.loop(); } // optional void audio_info(const char *info){ Serial.print("info "); Serial.println(info); } void audio_id3data(const char *info){ //id3 metadata Serial.print("id3data ");Serial.println(info); } void audio_eof_mp3(const char *info){ //end of file Serial.print("eof_mp3 ");Serial.println(info); } void audio_showstation(const char *info){ Serial.print("station ");Serial.println(info); } void audio_showstreaminfo(const char *info){ Serial.print("streaminfo ");Serial.println(info); } void audio_showstreamtitle(const char *info){ Serial.print("streamtitle ");Serial.println(info); // Display station name and stream title to OLED display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.println("station:"); display.println(station_name[cur_station]); display.println(" "); display.println("streamtitle:"); display.println(info); display.display(); } void audio_bitrate(const char *info){ Serial.print("bitrate ");Serial.println(info); } void audio_commercial(const char *info){ //duration in sec Serial.print("commercial ");Serial.println(info); } void audio_icyurl(const char *info){ //homepage Serial.print("icyurl ");Serial.println(info); } void audio_lasthost(const char *info){ //stream URL played Serial.print("lasthost ");Serial.println(info); display.clearDisplay(); } void audio_eof_speech(const char *info){ Serial.print("eof_speech ");Serial.println(info); }