WLAN Lautsprecher auf ESP8266 Basis

Begonnen von chunter1, 25 April 2017, 16:06:20

Vorheriges Thema - Nächstes Thema

Per

Schau dir doch mal die Quelltexte an, ob da viel mit delay(time) gearbeitet wird. Wenn nicht oder nur in einem Programm, hast du ja Glück.

Bapt. Reverend Magersuppe

Zitat von: Tueftler1983 am 12 April 2018, 17:54:18
Schade Hätte halt gerne einen Wlan Lautsprecher mit Matrix LED Display, zusammen könnte man es als Wecker, Uhr etc einsetzen.

Es gibt da ein schönes Projekt auf Basis des ESP32.
--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

mark79

Zitat von: Bapt. Reverend Magersuppe am 16 April 2018, 09:48:36
Es gibt da ein schönes Projekt auf Basis des ESP32.
Das hatte ich nachgebaut und ein paar Tage lang ausprobiert, mit einem ESP32 und VS1053. Allerdings mit diesem Sketch: https://github.com/karawin/Ka-Radio32
Das lief sehr gut und die Soundqualiät war sehr viel besser und ohne Störgeräusche, also kein Vergleich zu dem PAM8302A.

Leider habe ich es nicht wirklich hinbekommen, das mit FHEM TTS zu verbinden und mittlerweile habe ich den ESP32 auch für was anderes im Beschlag.
Aber man kann per HTTP Befehl ein MP3 Link an den ESP32 schicken, welcher dann abgespielt wird.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Tueftler1983

Sieht auch gut aus, aber ich würde halt gerne die Dot Matrix verwenden da sie auch aus entfernung gut ablesbar ist. Zudem soll halt zum Wecken ein wechton ausgegeben weden und wenn man diesen bestätigt ein Stream von nem Internetradio wiedergegeben werden. Dann noch TTS ausgaben bei bestimmten ereignissen.

Vielleicht sollte ich da auch nen eigenes Thema für auf machen, ich denke mal Die Kombination aus TTS, Internetradio und LED Dot Matrix ist für Viele Interessant

ianni89

Hallo zusammen,

das ist ein interessantes Projekt. Ich werde es auch realisieren. Die Bauteile sind schon bestellt ;)

In der aktuellen Zeitschrift von "elektor" ist ein Bericht vom PAM8302. Falls es jemanden interessiert.
Hier der Link dazu:
https://www.elektormagazine.de/magazine/elektor-201805/41483

mick6300

Hallo zusammen,
habe das Projekt nachgebaut und bin begeistert. Daher auch von mir noch einmal vielen Dank. Mir viel allerdings auf, dass sich im cash Ordner eine Menge Datenmüll ansammelte. Ich habe daraufhin das mplayer.sh script am Ende um die Zeile "rm $file" erweitert. Das mp3-File wird nun nach der Sprachausgabe wieder gelöscht. Weiterhin habe ich den avconv um die Option "-vol 1024" erweitert, da hierdurch die Lautstärke nun besser zu meinen Ansprüchen passt. Der Text wird weiterhin problemlos über fhem wiedergegeben. Spricht etwas gegen den "rm $file" Befehl?

# zum Test ausgeben
###echo $volume $file >> $logFile
#play -q -v $volume $file
echo "" >> $logFile
echo "" >> $logFile
avconv -i $file -vol 1024 -f s32be -acodec pcm_u8 -ac 1 -ar 33000 tcp://192.168.0.119:5522 2>> $logFile
rm $file
FHEM mit Raspberry PI und eine Menge an Arduinos

ianni89

Zitat von: mick6300 am 12 Mai 2018, 12:26:28
Hallo zusammen,
habe das Projekt nachgebaut und bin begeistert. Daher auch von mir noch einmal vielen Dank. Mir viel allerdings auf, dass sich im cash Ordner eine Menge Datenmüll ansammelte. Ich habe daraufhin das mplayer.sh script am Ende um die Zeile "rm $file" erweitert. Das mp3-File wird nun nach der Sprachausgabe wieder gelöscht. Weiterhin habe ich den avconv um die Option "-vol 1024" erweitert, da hierdurch die Lautstärke nun besser zu meinen Ansprüchen passt. Der Text wird weiterhin problemlos über fhem wiedergegeben. Spricht etwas gegen den "rm $file" Befehl?

# zum Test ausgeben
###echo $volume $file >> $logFile
#play -q -v $volume $file
echo "" >> $logFile
echo "" >> $logFile
avconv -i $file -vol 1024 -f s32be -acodec pcm_u8 -ac 1 -ar 33000 tcp://192.168.0.119:5522 2>> $logFile
rm $file

Hallo,
gegen den Befehl "rm $file" ist nichts einzuwenden. Im Gegenteil, das ist sogar eine gute Idee.

Ich habe nun versucht den Lautsprecher als webradio zu nutzen. Das funktioniert prinzipiell.
Nur bin ich mit avconv nicht zufrieden. Die Verbindung bricht viel zu oft ab. Hat von euch jemand Erfahrungen den avconv-Befehl als Webradio zu nutzen?
Vielleicht fehlt mir nur der ein oder andere Paramter, der übergeben wird. Konnte das bisher nicht herausfinden.

Per

Vllt. sollte man den rm-Befehl mit RegEx verwenden und häufige Aussagen ("Waschmaschine fertig") so maskieren, dass diese erhalten bleiben.

Tobias

Zitat von: mark79 am 16 April 2018, 13:50:57
Das hatte ich nachgebaut und ein paar Tage lang ausprobiert, mit einem ESP32 und VS1053. Allerdings mit diesem Sketch: https://github.com/karawin/Ka-Radio32
Das lief sehr gut und die Soundqualiät war sehr viel besser und ohne Störgeräusche, also kein Vergleich zu dem PAM8302A.

Leider habe ich es nicht wirklich hinbekommen, das mit FHEM TTS zu verbinden und mittlerweile habe ich den ESP32 auch für was anderes im Beschlag.
Aber man kann per HTTP Befehl ein MP3 Link an den ESP32 schicken, welcher dann abgespielt wird.

Danke für den Link, das werde ich mal nachbauen / zusammenstecken.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

#234
Ich habe mich mal am ESP32Radio probiert (https://github.com/Edzelf/ESP32-Radio)
Einfach nur den ESP32 mit dem VS1053 verbunden, Sketch drauf (incl einer Mini Anpassung von mir) und es läuft. Soundqualität ist an einer Aktivbox richtig gut :)
Habe dann noch mein Musik-Frontend von TabletUI drauf angepasst, ein paar WrapperFunktionen in meiner MyUtils.pm erstellt - und voila... die GrundFunktionen die man braucht funktionieren (die auch im TabletUI abgebildet sind)

Achso, die Playlisten von meinem NAS stelle ich mit dem Medialist Modul zusammen mit der ich dann das ESP32Radio füttere

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

tiwo85

@Tobias
Genau das habe ich auch versucht auszuprobieren. Bin durch den "Guy with the Swiss accent" drauf gekommen.
Darf man fragen, wie du die Wrapperfunktionen realisiert hast?

Gesendet von meinem Huawei P10 Plus mit Tapatalk


Tobias

#236
dadurch das man alles zum ESP32Radio mit zb: "command=volume 30" per MQTT schicken muss, habe ich im MQTTDevice Modul zum ESP32Radio alle notwendigen Funktionen definiert und dann die Wrapperfunktionen drumrum gesetzt

defmod ESP32Radio MQTT_DEVICE
attr ESP32Radio DbLogExclude .*
attr ESP32Radio IODev mqtt
attr ESP32Radio publishSet_command radio/command
attr ESP32Radio publishSet_mute /radio/dummy
attr ESP32Radio publishSet_next /radio/dummy
attr ESP32Radio publishSet_play /radio/dummy
attr ESP32Radio publishSet_posreq /radio/dummy
attr ESP32Radio publishSet_previous /radio/dummy
attr ESP32Radio publishSet_stop /radio/dummy
attr ESP32Radio publishSet_volume /radio/dummy
attr ESP32Radio room Audio
attr ESP32Radio stateFormat {ReadingsVal($name,"playing",0)eq"1"?"play":"stop"}
attr ESP32Radio subscribeReading_IP radio/ip
attr ESP32Radio subscribeReading_nowplaying radio/nowplaying
attr ESP32Radio subscribeReading_playing radio/playing
attr ESP32Radio subscribeReading_pos radio/playlist/pos
attr ESP32Radio subscribeReading_stationname radio/icy/name
attr ESP32Radio subscribeReading_streamtitle radio/icy/streamtitle
attr ESP32Radio subscribeReading_volume radio/volume


2 Notify´s
defmod NTFY_ESP32Radio_PosChange notify ESP32Radio:pos.* {ESP32Radio_PosChange($NAME)}
attr NTFY_ESP32Radio_PosChange DbLogExclude .*
attr NTFY_ESP32Radio_PosChange room Audio

defmod NTFY_ESP32Radio_command notify ESP32Radio:.* {ESP32Radio_setcommand($NAME,$EVENT)}
attr NTFY_ESP32Radio_command DbLogExclude .*
attr NTFY_ESP32Radio_command room Audio


99_Utils_ESP32Radio.pm
##############################################
# $Id:$
package main;

use strict;
use warnings;
use POSIX;

sub
Utils_ESP32Radio_Initialize($$)
{
  my ($hash) = @_;
}

# ####################################################################
# Wenn die Position in der Playlist sich ändert, suche Titelinformationen raus
# ####################################################################
sub ESP32Radio_PosChange($) {
  my ($device) = @_;
  my $cover = "";
  my $title = "";
  my $album = "";
  my $time = 0;

  my $track        = ReadingsVal($device, "pos", "");
  my $playlist     = ReadingsVal($device, "playlist_json", "");
  my @data         = @{JSON::XS->new->decode($playlist)};
  $cover           = $data[$track -1]->{Cover};
  $album           = $data[$track -1]->{Album};
  $title           = $data[$track -1]->{Title};
  $time            = $data[$track -1]->{Time};

  readingsBeginUpdate($defs{$device});
  readingsBulkUpdate($defs{$device}, "Cover", $cover);
  readingsBulkUpdate($defs{$device}, "Album", $album);
  readingsBulkUpdate($defs{$device}, "Title", $title);
  readingsBulkUpdate($defs{$device}, "Time", $time);
  readingsEndUpdate($defs{$device},1);
 
  return undef;
}

# ####################################################################
# Hauptfunktion ein Kommando zu übersetzen
# ####################################################################
sub ESP32Radio_setcommand($$) {
  my ($device, $event) = @_;
  #Log3 undef, 1, "command: $event";
 
  #ESP32Radio_setpos($device) if($event =~ m/posreq/);
  ESP32Radio_setvolume($device) if($event =~ m/volume:/);
  ESP32Radio_setnext($device) if($event =~ m/next/);
  ESP32Radio_setprevious($device) if($event =~ m/previous/);
  ESP32Radio_setstop($device) if($event =~ m/stop/);
  ESP32Radio_setmute($device) if($event =~ m/mute/);
  ESP32Radio_setplay($device) if($event =~ m/play:/);
}

sub  ESP32Radio_setplay($) {
  my ($device) = @_;
  my $play = ReadingsVal($device, "play", 0);
  ESP32Radio_setpos($device, $play+1); #Medialist Index ab 0
}

sub  ESP32Radio_setnext($) {
  my ($device) = @_;
  fhem ("set ".$device." command uppreset=1"); 
}

sub  ESP32Radio_setprevious($) {
  my ($device) = @_;
  fhem ("set ".$device." command downpreset=1"); 
}

sub  ESP32Radio_setstop($) {
  my ($device) = @_;
  fhem ("set ".$device." command stop"); 
}

sub  ESP32Radio_setmute($) {
  my ($device) = @_;
  my $mute = ReadingsVal($device, "mute", 0);
  my $volume = ReadingsVal($device, "volume", 0);
 
  fhem ("set ".$device." command volume=0") if ($mute =~ m/(on|On|1)/);
  fhem ("set ".$device." command volume=100") if ($mute =~ m/(off|Off|0)/);
}

sub  ESP32Radio_setvolume($) {
  my ($device) = @_;
  my $volume = ReadingsVal($device, "volume", 0);
  fhem ("set ".$device." command volume=".$volume); 
}

# ####################################################################
# springe zur Position in der Playlist
# ####################################################################
sub  ESP32Radio_setpos($$) {
  my ($device, $posreq) = @_;
  my $pos    = ReadingsVal($device, "pos", 0);
  my $newpos = 1;
  my $command = "";
 
  $posreq = $posreq *1;
  if ($pos<int($posreq)) {
    $command = "uppreset";
$newpos  = $posreq - $pos;
  } elsif ($pos>int($posreq)) {
    $command = "downpreset";
$newpos  = $pos - $posreq;
  }
  #Log3 undef, 1, "pos: $pos ; Newpos: $newpos";
 
  if($pos!=$newpos) {
    fhem ("set ".$device." command ".$command."=".$newpos);
fhem ("setreading ".$device." currentTrackProvider Bibliothek");
  }
 
  return undef;
}

1;
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

tiwo85

Asche auf mein Haupt. An die Mqtt Funktionen habe ich gar nicht gedacht.
@Tobias
Da kommt mir eine Idee:
https://github.com/schreibfaul1/ESP32-vs1053_ext Dort wird tts aufgegriffen.
Man könnte doch die esp8266-Google-tts library in deinen Sketch einbinden?


Gesendet von meinem Huawei P10 Plus mit Tapatalk


Tobias

Ist nicht mein Sketch sondern der von Edzelf. Und ich denke TTS liegt definitiv nicht im Scope eines MP3/Radios ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

tiwo85

Ja hab ich gesehen. Aber soweit ich das hier verfolgt habe, geht es im Thread um TTS und weniger um MP3/Radio. Ich werde die Tage mich mal an den Sketch setzen von schreibfaul1 und Mqtt einpflegen, das sollte keine Kunst sein. Evtl krieg ich auch noch TTS in den Sketch von edzif eingebastelt.

Gesendet von meinem Huawei P10 Plus mit Tapatalk