Freitag, 8. Januar 2021

iRadio Westinghouse Simulation

 

Einführung

ein team um Ed Smallenburg (Edzelf) hat eine anspruchsvolle Internetradio-software entwickelt. Ursprünglich für den Espressiv ESP8266 gedacht, wurde sie mittlerweile aber auch auf den ESP32 portiert. Als DAC wird ein hochwertiger midi-Baustein mit dem chip VS1053 eingesetzt. Eine breite Palette display-Typen wird unterstützt und es gibt unterschiedliche Steuerungskonzepte. Damit deckt die software einen breiten Anwendungsbereich ab vom Radio-Eigenbau bis zu Erweiterung vorhandener Empfänger.

In meinem blog will ich erläutern wie man sich damit ein Internetradio konfiguriert und zeige Beispiele.

Donnerstag, 7. Januar 2021

Installation

Die Software wird als zip-Archiv von github geladen und enpackt. 

github ESP32-Radio

Unser Arbeitsverzeichnis muss dann genau so aussehen. Bitte keine Datei auslassen, umbenennen o.ä. und auch keine Datei hinzufügen:

 


Die Arduino-IDE muss installiert und für ESP32 konfiguriert sein. Nach Anklicken von Esp32_radio.ino öffnet sich unsere Entwicklungsumgebung. Jede Datei hat darin ihren eigenen Reiter.

 

Hier sind diverse Einstellungen vorzunehmen. Ein Zeile wird deaktiviert durch Voranstellen der beiden Schrägstriche.

Wir beginnen mit dem Hauptprogramm, der Esp32_radio.ino.

In der Regel werden wir keinen USB-Stick und keine SD-Karte angeschlossen haben. Die beiden Zeilen müssen also deaktiviert werden, sonst blockieren sie ein Starten der software.

CH376 und SDCARD deaktivieren:

// Define type of local filesystem(s).  See documentation.
//#define CH376                          // For CXH376 support (reading files from USB stick)
//#define SDCARD                         // For SD card support (reading files from SD card)

Als nächstes erfolgt die Display-Auswahl. Es darf nur EIN Display aktiviert sein. Wird kein Display verwendet, so wird der DUMMYTFT aktiviert:
 

// Define (just one) type of display.  See documentation.
//#define BLUETFT                        // Works also for RED TFT 128x160
//#define OLED                         // 64x128 I2C OLED
//#define DUMMYTFT                     // Dummy display
//#define LCD1602I2C                   // LCD 1602 display with I2C backpack
#define LCD2004I2C                   // LCD 2004 display with I2C backpack
//#define ILI9341                      // ILI9341 240*320
//#define NEXTION                      // Nextion display. Uses UART 2 (pin 16 and 17)

Bei Displays, die über I2C angesteuert werden, müssen die gpio's für SDA und SCL zugewiesen werden

im Bereich der Zeile 500:

  { 21, false, false,  "", false },                      // Also Wire SDA
  { 22, false, false,  "", false },                      // Also Wire SCL

und im Bereich der Zeile 2560:

 struct iosetting klist[] = {                            // List of I/O related keys
    { "pin_ir",        &ini_block.ir_pin,           -1 },
    { "pin_enc_clk",   &ini_block.enc_clk_pin,      -1 },
    { "pin_enc_dt",    &ini_block.enc_dt_pin,       -1 },
    { "pin_enc_sw",    &ini_block.enc_sw_pin,       -1 },
    { "pin_tft_cs",    &ini_block.tft_cs_pin,       -1 }, // Display SPI version
    { "pin_tft_dc",    &ini_block.tft_dc_pin,       -1 }, // Display SPI version
    { "pin_tft_scl",   &ini_block.tft_scl_pin,      22 }, // Display I2C version
    { "pin_tft_sda",   &ini_block.tft_sda_pin,      21 }, // Display I2C version
    { "pin_tft_bl",    &ini_block.tft_bl_pin,       -1 }, // Display backlight
    { "pin_tft_blx",   &ini_block.tft_blx_pin,      -1 }, // Display backlight (inversed logic)


Dann kommen wir zu dem Reiter defaultprefs.h:
 

In dieser Datei können wir keine Zeile mit // auskommentieren. Ungültige Zeilen müssen stattdessen gelöscht werden.

Es werden die wlan-Daten eintragen. SSID und Kennwort sind durch den Schrägstrich getrennt:

wifi_00 = SSID1/PASSWD1

Es können für verschiedene Standorte mehrere Netzwerke eingetragen werden.

Auch können wir hier schon unsere eigenen Radiostationen eintragen die wir empfangen möchten (presets). Es darf kein http:// oder https:// vorangestellt werden.

diversen gpios sind bereits Funktionen zugewiesen.  So bedeutet z.B. die Zeile:

gpio_12 = upvolume = 2 :

Ein Taster, der an gpio 12 gegen Masse angeschlossen ist, erhöht bei Betätigung die Lautstärke um 2%.

Falls wir einen Berührungssensor benutzen wollen nehmen wir mal das Beispiel aus dem Handbuch:

Die Zeile:

touch_04 = uppreset = 1

schaltet bei Berührung von touch 4 auf die nächste Radiostation. Laut Belegungsplan des ESP32 liegt touch4 auf gpio13. Dort haben wir aber schon eine Tasterzuweisung:

gpio_13 = uppreset = 1

diese Zeile muss dann entfernt werden!

bei nicht bestücktem encoder müssen dessen Pin mit -1 deaktiviert werden, um nicht ungewollte Schaltvorgänge auszulösen:

pin_enc_clk = -1 # GPIO Pin number for rotary encoder "CLK"
pin_enc_dt = -1 # GPIO Pin number for rotary encoder "
DT"
pin_enc_sw = -1 # GPIO Pin number for rotary encoder "
SW" 

Datei LCD1602.h oder LCD2004.h : 

Bei LCD-Displays ist deren I2C-Adresse zu berücksichtigen. Die eingetragene Adresse muss zur hardwaremässigen Adresse des Display passen und kann den Wert 0x27 oder 0x3F annehmen.

//#define I2C_ADDRESS 0x27                                     // Adjust for your display
#define I2C_ADDRESS 0x3F                                     // Adjust for your display

Upload

sind diese Vorbereitungen abgeschlossen kann kompiliert und auf den ESP hochgeladen werden.