Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Dementia III ESP32 Internetradio mit Simulation
#1
Meine ersten Modifikationen des "Dementia friendly music player"  sind schon 2,5 Jahre her. Die Herkunft des Entwurfes, seine traurige Geschichte und mein Umbau zu einem iRadio mit Raspberry Pi kann hier nachgelesen werden:

Dementia friendly radio

2 Monate später baute ich den Gehäuseentwurf um zu einem UKW-Radio:

Dementia friendly radio II (Bauanleitung)

Nun bin ich bei der 3. Variante angekommen. Diesmal ist es wieder ein Internetradio, aber mit ESP32 und einem 2,8" SPI-Display.

Die Software hat Norbert geschrieben. Entgegen der allgemein vorherrschenden Meinung, ein Internetradio mit ESP32 könne keine Skala simulieren, beweist Norbert hier dass es doch möglich ist! Er benutzt Bibliotheken von Wolle-Schreibfaul1 und Bodmer. Die MP3-Decodierung erledigt die Software. Die Ausgabe erfolgt über I2S auf ein MAX98357A-Modul mit eingebauter 3W-Endstufe. WLAN-Verbindungsdaten und Radiosender sind hardcodiert. Bedient wird per touch oder per einfachem webinterface.

Die erste Version benutzte das Bild eines japanischen 70er Jahre solid-state-Radio mit waagerecht geführtem Zeiger.

   

bei Berührung des Display blenden sich die Bedienfelder für Sender und Lautstärke für eine definierte Zeit ein:

   

Für das Dementia-Radio schickte Norbert mir dann eine Version mit einer Seibt 23 Skala bei der der Zeiger eine Kreisbewegung ausführt.

   

   

   

   

Der Zusammenbau:

In der Frontplatte sind Vertiefungen für Einpressmuttern vorgesehen. Es gibt ausser den Rückwandschrauben keine nach außen sichtbaren Schraubenköpfe. Das Display wird mit passenden Abstandshaltern direkt hinter die Front montiert. Die Unsymmetrie des Display wird auch bei einer 180 Grad-Drehung berücksichtigt. Die Randbereiche ohne Information sind verdeckt und das Display sitzt immer genau mittig.

   

Der Lautsprecher mit diagonalem Lochabstand von 84,5mm wird auf einer extra Schallwand ebenfalls wieder per Einpressmuttern montiert.

   

Die Schallwand kann mit Stoff überzogen werden und wird dann mit der Frontplatte verschraubt.

   

Die Front wird mit dem Korpus verleimt, das Innenleben bleibt trotzdem wieder demontierbar.

   

Auf den Geräteboden wird eine Leiste mit 2 Einpressmuttern angeklebt. Diese beiden Schauben halten die Platine. Die gleiche Leiste ist auch innen mit der Platine verschraubt, dient dort aber nur als Auflage und ist wegen der besseren Entnehmbarkeit der Platine nicht verleimt.

   

Abschlußbilder

eine Gesamtansicht mit der ersten Skala:

   

und mit der zweiten Skala:

   

   

   

   

   

Innenansichten:

   

   

   

   

   

   

ein kleines Video zeigt beide Simulationen

Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#2
Hallo Jupp,

der Skalenzeiger ist "vollsynthetisch", sprich aus einer Grafikprimitive (draw_rectangle,...+ Transformation) irgendeiner Grafiklib abgeleitet, oder? Habt Ihr mal versucht da eine richtige Textur (Bild) für den Zeiger zu nehmen? Wie sieht es aus, schafft der ESP32 die Sache noch, wenn die Skale mit Transparenz arbeitet (PNG zum Beispiel) und der Zeiger HINTER(!) der Skale bewegt wird, also so wie wir das mit SDL2 auf dem Pi machen können? Dann würde die Sache fotorealistischer wirken. Würde mich interessieren wie viele fps da noch rauskommen. Im Sinne eines iRadio Mini wäre das ein tolles Ziel ohne eine eigene Grafiklib programmieren zu müssen.

Gruß
Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
#3
Hallo Bernhard,

der Skalenzeiger der beiden ersten Fotos (Solid-State-Skala) ist eine JPG-Grafik.
Für das Skalenbild des Seibt habe ich keinen passenden Skalenzeiger - also musste eine "rudimentäre" Grafik gezeichnet werden.
Transparenz ist laut Bodmer "in Arbeit".
Grüße aus Wassenberg,
Norbert.
Zitieren
#4
Toll!

(19.01.2022, 18:46)saarfranzose schrieb: Der Lautsprecher mit diagonalem Lochabstand von ...

Daß man die Kalotte oft mit dem Staubsauger ausbeulen kann weißt Du sicher.
Gruß,
Uli
Zitieren
#5
ich hatte immer eine kleine Nadel eingestochen zum Ausbeulen. Es dürfte hier keine große Rolle spielen, aber wenn ich den LS mal wieder raus habe versuche ich es.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#6
Oh, wenns Dein erster Versuch ist: Nicht direkt auf Vollgas stellen, den Sauger!
Und mit dem 500.000€ Klangfilm LS wär ich auch lieber vorsichtig Wink
Bei mir hats bisher aber immer geklappt und ich hab auch noch keine Kalotte ab gesaugt auf die Tour.
Gruß,
Uli
Zitieren
#7
(19.01.2022, 20:34)norbert_ schrieb: der Skalenzeiger der beiden ersten Fotos (Solid-State-Skala) ist eine JPG-Grafik.

Transparenz ist laut Bodmer "in Arbeit".

Hallo Norbert,

da bin ich auf die Umsetzung gespannt, JPG selbst hat ja keinen Alphakanal. PNG dagegen schon, ist aber halt größer, da unkomprimiert. 

Was ich mir vorstellen könnte, wären 3 JPGs, die als Layer in jeweils einen virtuellen Framebuffer geladen werden.

Layer 1: Skalengrafik
Layer 2: Transparenzmaske für Skalengrafik (quasi simulierter Alphakanal). Hier reicht ja ein Bit pro Pixel aus, 0->Bildinhalt an x,y von Layer 1 ist zu löschen, 1-> Bildinhalt von Layer 1 bleibt an x,y dominant
Layer 3: Skalenzeiger als rgb Sprite


Lass uns mal rechnen, Beispiel Display mit 320x240px

Layer 1 RGB(8,8,8) -> 320*240*(8+8+8)   = 1843200 Bit = 230400 Byte
Layer 2 -> 320*240 (also 0,1 Bitmaske) = 76800 Bit = 9600 Byte
Layer 3 -> weite*breite*(8+8+8) -> also sicher irgendetwas unter 0.1*Layer 1 => 23040 Byte
_____________________________________________________________________________
Summe an Daten pro Frame, wenn ich mich nicht verrechnet habe: 263040 Byte bzw. 256,875 kByte  !!!


Sad

Ab 12 Frames/s siehts flüssig aus. 3082.5 kByte, also über 3 Megabyte/s Minimum + Overhead die durchs RAM (und Rechenwerk -> Layers "and/or") allein fürs Bild gehen müssen.
Zum Display gehen dann netto (ohne Protokolloverhead) ja "nur" 320*240*3*12 Byte pro Sekunde, also 2.64 Megabyte/s über die Schnittstelle.

Da kommt allein was das Rechenwerk betrifft ein Downsizing einiger ESP32 Modelle zum Singlecore (statt Dual) mit 160 MHz statt 240 MHz ja gerade zur richtigen Zeit.

Jetzt sieht man erstmal was die Demo-Szene (https://de.wikipedia.org/wiki/Demoszene) damals so auf C64/C128/Amiga geleistet hat. Ich glaube ich muss mal wieder alte Bücher studieren, aus einer Zeit als CPU/RAM knapp war und wo Optimierung das Zauberwort war. Runter mit der Farbtiefe, und und und. Jedes eingesparte Bit pro Pixel zählt.
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
#8
das erinnert mich an Simons-Basic und seitenlange Hex-Listings aus dem C64-Heft, die ich in den 80er Jahren in den C64 gehackt habe um ein paar Sekunden Zeichentrickfilm zu erzeugen. Ein Hubschrauber landet, der Pilot pinkelt an einen Baum, und fliegt dann wieder weiter.

Ich will noch das webinterface zeigen. Einfach aber funktionell:


.jpg   web.JPG (Größe: 45,12 KB / Downloads: 282)
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#9
Hallo Bernhard und interessierte Mitleser,
in der Tat ist Deine errechnete Datenmenge realistisch und weil der ESP32 auch noch andere Aufgabe erledigen muss, schwer zu stemmen.
Wir wollen ja Radio ohne Aussetzer hören, die Meta-Daten auswerten, das Touch-Pad abfragen und und und.

Aber Du hast den C64 und dessen Nachfolger erwähnt, und zu deren Zeit gab es ein Zauberwort, nämlich Sprite (nicht das Kaltgetränk!).
Bodmer stellt u. a. diese Technik mit einer seiner vielen Libs zur Verfügung, und ich wende sie an.

Der Ablauf findet folgendermassen statt:
- Hintergrundbild / Grafik laden und aufs TFT-Display zeichnen
- Puffer 1 (Sprite) für den Skalenzeiger anlegen
- Puffer 2 (Sprite) gleicher Größe wie Puffer 1 zum "Retten" des Hintergrundbildes anlegen

-> Position des Skalenzeigers berechnen
|  - Ausschnitt des Hintergrundbildes von der errechneten Position des Skalenzeigers in den Puffer 2 (zur Rettung des Hintergrundbildes) kopieren
|  - Puffer 1 des Skalenzeiger an der errechneten Position ins Hintergrundbild schreiben
< - nächste Zeigerposition errechnen

Nicht nur die Zeit für den Daten Transfer ist kritisch. Da die Sprites RAM belegen, muss auch der Speicherplatz muss im Auge behalten werden.
Üblicherweise sind die Skalenzeiger nicht all zu groß (max. 12 X 80px * 2) * 2, plus Puffer 3 (300x40px) * 2 für Touch-Bedienung, aber es summiert sich auf.
Plus die meisten Arduino Libs sind auch nicht allzu Speicher effizient programmiert...
Grüße aus Wassenberg,
Norbert.
Zitieren
#10
hier sind sie alle vereint

   
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#11
Hallo Jupp,
jetzt würde mich nur interessieren,
wie hast Du aus dem Stereo Signal ein Mono Signal für einen Lautsprecher hinbekommen ?

Gruß
Juppy
Zitieren
#12
der MAX98357A liefert ein Mono-Signal mit 3W.

Hier noch meine Druckdateien:


.zip   Dementia-V3.zip (Größe: 2,73 MB / Downloads: 2)
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#13
d.h. um ein Stereo Signal zu bekommen, bräuchte ich zwei MAX98357A ?

Gruß
Juppy
Zitieren
#14
ja das wäre eine Möglichkeit.

Stereo-Ausgabe

2. Advent: Neues Internetradio mit ESP32 und MAX 98357A
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#15
Ein kurze Frage noch,
welche kleinen Lautsprecher könntest Du mir empfehlen ?

Gruß
Juppy
Zitieren
#16
Hallo, Jupp,
Hallo, Norbert,
das gesamte Tread entdecke ich erst jetzt, wieso auch immer. Und das weckt die Lust wieder ein Internetradio zu bauen.
Thumbs_up
Gruß,
Ivan
Zitieren
#17
Zitat:Der Lautsprecher mit diagonalem Lochabstand von 84,5mm wird auf einer extra Schallwand ebenfalls wieder per Einpressmuttern montiert.

Dieser hier stammt aus einem geschlachteten Radiorekorder.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Karadio für ESP8266/ESP32 saarfranzose 22 7.777 Gestern, 08:55
Letzter Beitrag: 23pse
  iRadioMini für ESP32 Bernhard45 17 11.309 09.03.2024, 22:29
Letzter Beitrag: OttoBerger
  MW-Sender mit ESP32 DrNeurosurg 23 4.805 06.02.2024, 14:56
Letzter Beitrag: navi
  Software Installer für den ESP32 pintel 18 1.073 29.12.2023, 18:29
Letzter Beitrag: Siegfried55
  Huth E72 Internetradio mit ESP32 saarfranzose 10 1.906 12.05.2023, 14:49
Letzter Beitrag: saarfranzose

Gehe zu: