Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ein minimales Internetradio für alte und neue Raspberrys
#81
(06.12.2018, 19:57)olli0371 schrieb: ..Wenn ich in den Weihnachtsferien Zeit habe werde ich das mal testen.

so lang könnte ich nicht warten. Ich beschäftige mich heute noch damit, trotz dem handicap zuhause immer noch kein DSL zu haben. Dann wird die SD-Karte anderswo vorbereitet und zuhause nur noch konfiguriert. Und statt Radiosender müssen mp3 herhalten.

Bernhard, was passiert beim Aktualisieren mit den manipulierten Dateien rc-local und vlcd? Obwohl, das werde ich ja sehen.
Gruß,
Jupp
-----------------------------
wenn man nur den Hammer kennt, sieht jedes Problem aus wie ein Nagel
--------
Zensur findet im Endgerät statt (CCC)
Zitieren
#82
noch ein kleiner Hinweis zum Löschen der SD-Karte, falls man statt zu aktualisieren von vorne beginnen will

Raspi-SD-Karte unter Windows löschen
Gruß,
Jupp
-----------------------------
wenn man nur den Hammer kennt, sieht jedes Problem aus wie ein Nagel
--------
Zensur findet im Endgerät statt (CCC)
Zitieren
#83
(07.12.2018, 09:02)saarfranzose schrieb: Bernhard, was passiert beim Aktualisieren mit den manipulierten Dateien rc-local und vlcd? Obwohl, das werde ich ja sehen.

Die solltestes Du aufheben und vorher umbenennen, denn Sie werden bei jedem Installerlauf durch Dateien aus dem iRadio-Ordner ersetzt, weil sich da bei neuen Versionen teilweise Änderungen ergeben. So wird zum Beispiel jetzt ein zusätzlicher Display-Daemon in den Autostart gelegt.
Solltest Du händisch Änderungen (gain-Wert etc.) vorgenommen haben, so baue diese Werte (und nur diese!) wieder an der gleichen Stelle in die neuen Versionen der Dateien ein, diese liegen ja direkt im iRadio-Ordner. Bitte keine Fehler dabei machen, sonst läuft das Paket u.U. nicht mehr richtig oder der Raspberry bootet nicht korrekt. Sind die Änderungen an den neuen Dateien im iRadio-Ordner erfolgt, dann einfach den Installer aufrufen.

Viel Spaß beim Experimentieren
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
#84
Auf Wunsch habe ich jetzt die Unterstützung für oleds mit dem SSD1306 Controller ins Paket aufgenommen. 


.zip   iRadio07122018.zip (Größe: 730,5 KB / Downloads: 23) 07.12.2018 : SSD1306 Unterstützung

Die SSD1306-Oleds können einfach per I2C an den Raspberry angeschlossen werden. Durch Aufruf von sudo ./install_I2C_OLED.sh wird das Internetradio automatisch konfiguriert und der für das OLED passende Displaydaemon gebaut. Nach einem Neustart ist dann alles Einsatzbereit. 

   

Den Code für den OLED-Daemonen findet man in /iRadio/display/oled  --- ist die Datei displayd.c, das schmale API mit allen Methoden gibt es in oled96.h, weiteren Democode in sample.c . Wie eigener Code gebaut wird, verraten die Makefiles. Bei Unklarheiten fragen.
Ich habe den Code wieder extra sehr sehr einfach gehalten und nach dem Schema gestrickt, nachdem bereichts der LCD-Daemon erstellt wurde. Damit sollten man in wenigen Minuten seine grafische Ausgabe selbst anpassen und auch andere Informationen anzeigen können.

Die Installation des iRadios geht wie gewohnt. Zip-Archiv im Standardnutzerverzeichnis /home/pi/ entpacken, sodaß es in /home/pi/iRadio zuliegen kommt. Danach den Hauptinstaller mit sudo ./install.sh starten. Der ganze Installationsvorgang kann etwas Zeit beanspruchen, da die nötigen Programme aus dem Internet installiert werden oder bei bestehender iRadio-Installation durch neue Versionen ersetzt werden.

Besteht eventuell Bedarf an einem fertigen Linuximage? Sollen irgendwelche Displays zusätzlich aufgenommen werden? Wird weiterer Democode benötigt? Eventuell für einen zweiten Encoder zu Lautstärkeneinstellung, .... schreibt mir Eure Ideen und Wünsche was Ihr gerne noch haben wollt.

Viel Spaß beim Basteln,
euer 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
#85
Hallo Bernhard. Als zusätzliches Display wäre noch an ein TFT mit ST7735 Controller zu denken. Dann dürfte die gängige Bastlerhardware abgedeckt sein. Einen weiteren Rotary für die Lautstärke kann man sich ja aus dem gpiod ableiten. Neue Pins vergeben, die Steuerkommandos für vlc anpassen, dann den Daemon bauen und in rc.local eintragen.
Zitieren
#86
(08.12.2018, 13:09)OttoBerger schrieb: Hallo Bernhard. Als zusätzliches Display wäre noch an ein TFT mit ST7735 Controller zu denken. Dann dürfte die gängige Bastlerhardware abgedeckt sein.

Der Wunsch ist mir ein Befehl, ein solches Display habe ich sogar hier und damit erscheint auch gleich die nächste Version des iRadio:

Download: 
.zip   iRadio08122018.zip (Größe: 751,96 KB / Downloads: 15) : 08.Dez.2018 - Unterstützung für TFTs mit ST7735 hinzugefügt


Mit dem Befehl sudo install_ST7735_TFT.sh wird ein Displaydaemon für ein solches TFT gebaut und im System installiert. Das Anschlußschema ist in der Datei wiring.txt aufgezeigt.

   

Den Code für den Displaydaemon habe ich wieder ganz genauso einfach gehalten, wie schon für das LCD und OLED. Der Code ist in /iRadio/display/st7735/displayd zufinden, es ist die Datei displayd.c . Es wurden nur der Initialisierungsteil und die Befehle für die Textausgabe geändert. 
Sehr einfach und verständlich also. Gebaut wird der Daemon mit dem beiliegenden Buildscript.

Wie man unschwer erkennen kann, liegt der Treibercode im src-Verzeichnis und mit der TFT_ST7735 - Klasse in tft_st7735.h bzw. cpp hat man ein sehr umfangreiches und flexibles API.

Code:
class TFT_ST7735
{
 private:
   unsigned char _channel;
   unsigned char _rs;
   unsigned char _rst;
   int           _speed;
   unsigned int  _background;
   unsigned char _cursor_x;
   unsigned char _cursor_y;

   void writecommand (unsigned char);
   void writedata    (unsigned char *data, int len);
   void writedata    (unsigned char data);

   void setAddrWindow (unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1);
   void bulkDrawColor (unsigned int color, unsigned int length);
   void bulkDrawChar  (unsigned char x, unsigned char y, char c, unsigned int color);
   void pushColor     (unsigned int color);
   void drawFastLine  (unsigned char x, unsigned char y, unsigned char length, unsigned int color, unsigned char rotflag);

 public:
   /** @brief Constructor of the class
    *
    *  @param channel SPI channel (0 or 1)
    *  @param rs Pin number of the command/data signal
    *  @param rst Pin number of the reset signal
    *  @param speed clock rate for the SPI channel (e.g.32000000 for 32MHz)
    *
    *  @return should not return a value
    *
    */
   TFT_ST7735(unsigned char channel, unsigned char rs, unsigned char rst, int speed);

   /** @brief Common initilisation
    *
    *  Initialize SPI (via wiringPi) and reset display
    *
    *  @return void
    */
   void commonInit(void);

   /** @brief Initilisation display
    *
    *  @return void
    */
   void initB(void);

   /** @brief Initilisation display
    *
    *  @return void
    */
   void initR(void);

   /** @brief Draw a single pixel
    *
    *  @param x x-coordinate of the pixel
    *  @param y y-coordinate of the pixel
    *  @param color color of the pixel in 5-6-5 format ( see Color565(r,g,b) )

    *  @return void
    */
   void drawPixel(unsigned char x, unsigned char y, unsigned int color);

   /** @brief Clear screen with the specified color
    *
    *  @param color color of the background in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void clearScreen(unsigned int color);

   /** @brief Clear screen with the actual background color
    *
    *  @return void
    */
   void clearScreen(void);

   /** @brief Set background color to the specified color
    *
    *  @param color color of the background in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void setBackground (unsigned int color);

   /** @brief Set cursor to the specified position
    *
    *  @param x x-coordinate of the cursor
    *  @param y y-coordinate of the cursor
    *
    *  @return void
    */
   void setCursor (unsigned char x, unsigned char y);

   /** @brief Draw a string using the cursor position
    *
    *  @param *c pointer to the string
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *  @param size  factor for the size (1 = standard)
    *
    *  @return void
    */
   void drawString(const char *c, unsigned int color, unsigned char size);

   /** @brief Draw a string using the specified position
    *
    *  @param x start position of the string
    *  @param y start position of the string
    *  @param *c pointer to the string
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *  @param size  factor for the size (1 = standard)
    *
    *  @return void
    */
   void drawString(unsigned char x, unsigned char y, const char *c, unsigned int color, unsigned char size);

   /** @brief Draw a single character using the cursor position
    *
    *  @param c character to display
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *  @param size  factor for the size (1 = standard)
    *
    *  @return void
    */
   void drawChar(char c, unsigned int color, unsigned char size);

   /** @brief Draw a single character using the specified position
    *
    *  @param x start position of the character
    *  @param y start position of the character
    *  @param c character to display
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *  @param size  factor for the size (1 = standard)
    *
    *  @return void
    */
   void drawChar(unsigned char x, unsigned char y, char c, unsigned int color, unsigned char size);

   /** @brief Draw a vertical line
    *
    *  @param x start position of the line
    *  @param y start position of the line
    *  @param length length of the line
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void drawVerticalLine(unsigned char x, unsigned char y, unsigned char length, unsigned int color);

   /** @brief Draw a horizontal line
    *
    *  @param x start position of the line
    *  @param y start position of the line
    *  @param length length of the line
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void drawHorizontalLine(unsigned char x, unsigned char y, unsigned char length, unsigned int color);

   /** @brief Draw a user defined line
    *
    *  @param x0 start position of the line
    *  @param y0 start position of the line
    *  @param x1 end position of the line
    *  @param y1 end position of the line
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void drawLine(unsigned int x0, unsigned int y0, int x1, int y1, unsigned int color);

   /** @brief Draw a rectangle
    *
    *  @param x upper left corner of the rectangle
    *  @param y upper left corner of the rectangle
    *  @param w width of the rectangle
    *  @param h height of the rectangle
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void drawRect(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned int color);

   /** @brief Draw a filled rectangle
        *
        *  @param x upper left corner of the rectangle
        *  @param y upper left corner of the rectangle
        *  @param w width of the rectangle
        *  @param h height of the rectangle
        *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
        *
        *  @return void
        */
   void fillRect(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned int color);

   /** @brief Draw a circle
    *
    *  @param x0 center of the circle
    *  @param y0 center of the circle
    *  @param r radius of the circle
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void drawCircle(unsigned char x0, unsigned char y0, unsigned char r, unsigned int color);

   /** @brief Draw a filled circle
    *
    *  @param x0 center of the circle
    *  @param y0 center of the circle
    *  @param r radius of the circle
    *  @param color color in 5-6-5 format ( see Color565(r,g,b) )
    *
    *  @return void
    */
   void fillCircle(unsigned char x0, unsigned char y0, unsigned char r, unsigned int color);

   /** @brief rotate display
    *
    *  @param value true: rotate display by 180 degree
    *
    *  @return void
    */

   void setRotation(bool value);

   /** @brief rotate display
    *
    *  @param value enum rotate_E
    *
    *  @return void
    */
   void setRotation(rotate_E value);



};

Mit diesen Grafikprimitiven lässt sich noch viel mehr als nur farbiger Text unterschiedlicher Größe ausgeben. So wäre es denkbar  ein Plattencover des aktuell gespielten Titels zu holen und im TFT zu zeichnen, eine komplette Menuebedienung zu realisieren oder ein Standby-Screen mit Wettervorhersage oder Uhrzeit zu implementieren. Experimentiert ruhig etwas, das iRadio gibt ja einen guten Rahmen für solche Entwicklungen.


(08.12.2018, 13:09)OttoBerger schrieb: Einen weiteren Rotary für die Lautstärke kann man sich ja aus dem gpiod ableiten. Neue Pins vergeben, die Steuerkommandos für vlc anpassen, dann den Daemon bauen und in rc.local eintragen.

Ja so wäre das genau richtig!

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
#87
Hallo Zusammen,

ich erhielt eine Frage per Mail wie man einen Raspberry mit dem iRadio als Nachrüstung für ein altes Radio nutzen könnte, ohne das man an dem Radio Modifikationen vornehmen 
kann. Meine Umbauten schocken offensichtlich einige Sammler ab. Vielleicht hier nochmal für alle Nutzer die Möglichkeiten die es gibt.

1. -die legale Variante-  Man verwendet am Audioausgang einen Klinkenstecker, über dem das Audiosignal des DAC abgegriffen wird. Dieses analoge Audiosignal wird nun entweder
direkt dem Gerät kabelgebunden zugespielt oder aber über einen legalen FM-Transmitter ins UKW-Teil (wenn vorhanden) gesendet.

2. -die nicht ganz so legale Variante- Der Raspberry besitzt einen PWM-Ausgang über den ein Signal von wenigen kHz bis 1500 MHz erzeugt werden kann. Über diesen Ausgang kann man ein  HF Signal in allen nur erdenklichen analogen und digitalen Modulationsarten ausgeben. Dazu nochmal ein Link zu einem Projekt an dem ich ebenfalls nicht mehr ganz unschuldig bin.

https://github.com/F5OEO/rpitx

Nachdem ihr den Pi soweit initialisiert habt und das iRadio läuft, ladet euch im /iRadio Ordner dieses Projekt mit folgenden Befehlen runter:

Code:
git clone https://github.com/F5OEO/rpitx
cd rpitx
./install.sh

Es werden dann noch einige Pakete aus dem Netz geladen und gleich auch übersetzt. Der ganze Vorgang dauert etwas.

Ein Blick ins Verzeichnis zeigt was hier so alles möglich ist und noch möglich werden wird. VFO bis 1.5 GHz, FM (Mono+Stereo+RDS), AM, SSB, verschiedene digitale Betriebsarten, DCF77, ... usw.
Das alles wird rein in Software erzeugt und das Signal über ein GPIO ausgegeben. Achtet aber bitte darauf wenigstens ein Bandpass nachzuschalten, denn auf den höheren Frequenzen kommt man schon ein Stück weit wenn eine Antenne dran hängt! 

Nun kann man die PCM-Samples die das iRadio ausgibt direkt von vlc oder von alsa in den Stdout schicken lassen. Auch ein temporärer FIFO (/dev/radio o.ä.) wäre möglich. Über den Pipe-Operator ist die Übergabe des Audiodatenstroms an die oben erstellten Programme möglich. Für den UKW-Modulator pifmrds zum Beispiel werden hier Lösungen gezeigt: https://github.com/F5OEO/rpitx/tree/master/src/pifmrds   Stichwort: Piping audio into pifmrds

Damit ließe sich das iRadio auf dem Luftweg an ein altes Radio senden. Über einen kleinen Daemonen könnte man die Metadaten holen und daraus die Daten für die RDS Generierung ableiten. Auch eine Mittelwellenaussendung mit PCM-AM/DSB auf einem anderen Softwaremodulator wäre möglich. Auch der kleine Ur-Pi hat dazu noch genügend freie CPU-Leistung wie ich gerade überprüft habe, nichts stockt und die Übertragung ist absolut klar. Alles in Deutschland nicht so ganz legal, aber ich will die Lösung auch nur genannt haben. 

Man braucht also außer einem Raspberry auf dem das iRadio oder die Pimoroni-Software und o.g. Software läuft nichts weiter als ein bisschen Kleinzeug für einen Filter/Antenne. Der Pi kann dann neben dem Radio liegen, im Radio wird nichts verbaut. Die Bedienung kann ja per SSH, Webinterface oder über Drehencoder/Display erfolgen. 

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
#88
Danke für den Tipp Bernhard. Ich habe es gleich ausprobiert. Wichtig ist einen Tiefpass direkt als Stecker auf den Sendepin 7 zu setzen. Die erste Oberwelle war gut 32 dB tiefer. Mit einer kleinen Teleskopantene kommt man gut 500m weit, also vorsichtig sein und zusätzlich einen Abschwächer verwenden. Die Klangqualität ist Super, der Modulator macht ja ein Resampling des Audiosignals mit hoher Frequenz. Rds funktioniert auf ejnem dabman 200 auch tadellos. Mittelwelle habe ich noch nicht getestet, hole ich nach.

Baust du eine Sendefunktion direkt mit in iRadio ein?

Otto.
Zitieren
#89
Hallo Bernhard,
das farbige OLED sieht richtig klasse aus. Ich habe eine Frage zu den OLED-Displays. Man sagt denen nach das sie eine begrenzte Lebensdauer haben. Mein Huaway P20 pro hat zum Beispiel so ein Display.
Weist du da näheres über die Lebensdauer von OLED?
Grün statt Braun
Gruß aus der Pfalz
Gery



Zitieren
#90
Hallo Zusammen,

ein Programm zum Senden des Internetprogramms auf UKW oder MW könnte ich hinzufügen, allerdings ist das iRadio-Paket dann nur noch für Raspberry geeignet. Zwar nennt sich dieser Thread " Ein minimales Internetradio für alte und neue Raspberrys", aber das stimmt so nicht ganz. Mit dem aktuellen Paket können auch Kleinrechner wie der BananaPi, die Rechner von Odroid und noch einige weitere genutzt werden.
So weit ich weiß sind diese anderen Rechner, im Gegensatz zum Raspberry, aber nicht in der Lage einfach mit Bordmitteln ein HF-Signal zu erzeugen.

Eine weitere Sache steckt im Wort "minimales". Ich habe keinen Schimmer wie groß ein zip-Anhang im Forum überhaupt sein kann/darf und wie weit das Paket noch wachsen kann, bevor ich mir einen anderen Speicherort zum Verteilen des Archiv suchen muss.
Ich bin ja positiv überrascht und froh das es da jetzt schon keine Probleme mit den etwas mehr als 750 kb gibt. Thumbs_up
Einige Treiber und Democodes werden sicher noch hinzukommen müssen.

Wird denn so eine Sendefunktion überhaupt von den Nutzern in Projekten gebraucht? So ganz legal ist die Sache ja nicht und Diskussionen darüber will ich eigentlich auch nicht im Thread dazu sehen. Jeder soll nach seinem Willen basteln und Schwarzfunken wie er es vertreten kann.

Zu Gery: OLEDs verlieren mit der Zeit an Leuchtkraft. Je nach Modul habe ich von einer Reduktion um 50% bei 20000-50000 Betriebsstunden in den Datenblättern gelesen. Nun gibt es einige preiswerte Module wie das SSD1306 OLED im Beitrag vom 7.12, da scheint es gute und schlechte Chargen zu geben. Die eine Hältfe von denen hat nach einem Jahr Dauerbetrieb nur noch 10-20% der Ausgangshelligkeit, andere vielleicht bei 70-80%, wieder andere Matrixfehler. Ich kann ja mal eine Fotoserie zum Vergleich zwischen neu und gebraucht SSD1306-OLEDs erstellen, ein Unterschied wie Tag und Nacht. Richtige Markendisplays dagegen haben (zumindest für mein Auge) bis jetzt keine solche Helligkeitsverluste gezeigt.


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
#91
das Wort "minimal" könnte man aus der Themenüberschrift wirklich entfernen. Die Entwicklung geht immer mehr zu einem ausgewachsenen, flexiblen Internetradio. Auch das rpitx wäre eine sinnvolle Erweiterung wo sich wieder ungeahnte Möglichkeiten ergeben. Ich stelle mir ein VE Projekt vor bei dem der VE wieder als Audion arbeitet so wie er geplant war und der interne Raspberry ein AM Signal verdrahtet an den Antenneneingang gibt. Vielleicht kann man die Sendeleistung ja begrenzen auf den dafür notwendigen Pegel.
Gruß,
Jupp
-----------------------------
wenn man nur den Hammer kennt, sieht jedes Problem aus wie ein Nagel
--------
Zensur findet im Endgerät statt (CCC)
Zitieren
#92
ich hab noch ein paar 16x2 - Displays. Die verschlucken den halben Text, sind aber gut ablesbar. Das hier kommt wahrscheinlich in mein Briconti-Radio. Betrieb über einen Level-Converter.

   
Gruß,
Jupp
-----------------------------
wenn man nur den Hammer kennt, sieht jedes Problem aus wie ein Nagel
--------
Zensur findet im Endgerät statt (CCC)
Zitieren
#93
Du kannst und sollst ja den displayd nach deinen eigenen Ideen umsetzen. Das mitgelieferte ist nur eine Demo und soll als Schablone dienen.
Man könnte zum Beispiel den aktuell gespielten Titel durch das Display scrollen lassen. In Google findet man unter "text scrolling c c++" einiges Verwertbares wenn man nicht selbst einen Algorithmus schreiben möchte. Letzteres empfehle ich aber ausdrücklich, denn da lernt man vieles dazu. Versuche es einfach mal.
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
#94
So nun hat mir die Forensoftware gesagt wie groß das iRadio maximal werden darf, es sind 2 MByte. Aus diesem Grund kann ich die Sendefähigkeit des iRadios nur mit einem Onlineinstaller nachreichen. Dies tue ich nun mit dem Script im Ordner "experimental".

Nachdem das iRadio ganz normal installiert ist, lässt sich durch Aufrufen des Scriptes install_TX_Support.sh der Raspberry sendetauglich machen. 
Es werden die rpitx und auch die csdr Programme aus dem Netz geladen, gebaut und installiert. Nach einem Reboot steht alles bereit um das eigene Internetradio in die Luft zu bekommen. Beachtet dazu die Programme und Scripte in /experimental/rpitx . Mit testvfo.sh lässt sich zum Beispiel ein Signalgenerator von wenigen kHz bis 1.5 GHz realisieren, mit pifmrds generiert man sein eigenes UKW - Stereoprogramm mit RDS Aussendung.
Der Syntax lautet hier zum Beispiel:

Syntax: pifmrds [-freq freq] [-audio file] [-ppm ppm_error] [-pi pi_code]

                  [-ps ps_text] [-rt rt_text] [-ctl control_pipe]


mit sudo ./pifmrds -freq 100.0 -audio -  sendet man einem durch Piping W-FM modulierbaren Träger auf 100.0 MHz, RDS Daten wurden hier jetzt vernachlässigt.
mit sudo ./pifmrds -freq 70.5 -audio sampleaudio.wav  sendet man einen durch die Datei sampleaudio.wav W-FM modulierten Träger auf 70.5 MHz im OIRT Band.


Als Frequenz kann man hier den kompletten Frequenzumfang(!) nutzen. Bitte denkt nicht daran N-FM moduliert im BOS-Band zu operieren oder AM-moduliert im AIR-Band zu senden. Ihr kommt auf diesen Bändern mit dem Pi und wenig Draht schon sehr sehr weit. Ein kleines Jumperkabel auf dem Pi reicht aus um mein ganzes Grundstück zu versorgen! Und benutzt bitte Bandfilter um unbedingt die Oberwellen um möglichst viele dB zu drücken!!!

Mit csdr könnt Ihr dann die gesammte Signalkette von HF über Demodulation bis NF bzw. NF über Modulator nach HF rein in der Console zusammen-pipen!

Beispiel für die Erzeugung einer AM-Modulation auf der Mittelwelle:

(while true; do cat music48000.raw; done) | csdr convert_i16_f | csdr gain_ff 1.0 | csdr dsb_fc | csdr add_dcoffset_cc | sudo rpitx -i- -m IQFLOAT -f 1600

Hier liegt die NF in Rohsamples in der Datei music48000.raw vor und wird durch cat in den Signalweg gepiped.
Über den Gain-Wert lässt sich das Signal verstärken um die Modulationstiefe einzustellen, gefolgt von einem Pipen in den AM-DSB-Modulator der ein komplexes Basisband um DC herum erzeugt. Anschließend wird ein DC-Offset hinzugefüht und das Signal über rpitrx mit Trägersignal auf 1600 kHz abgestraht.

Welche Befehle es gibt und was die Befehle genau machen seht in in der angehängten Doku, die leider nicht mit ins iRadio-Archiv passt.

Natürlich kann anstelle der Datei auch ein Programm (VLC) stehen, was seine Ausgabe in die Pipe leitet, auch ein FIFO oder ähnliches lässt sich verwenden.
Legt dann solche Operationen am Besten in ein temporäres Dateisystem/Pipe im RAM! /dev/shm (Shared Memory) würde sich anbieten.
Auch ALSA bietet die Möglichkeit direkt die Daten über ein Loopback bereitzustellen.

VLC muss für den Sendebetrieb in der Regel anders gestartet werden wenn man die Ausgabe in einen Pipe leiten will.  Dazu müsst Ihr  vlcd abändern oder besser eine zweite Version erstellen damit Ihr zwischen regulären Internetradiobetrieb und Sendebetrieb umschalten könnt.

Mit diesen Aufruf cvlc -vvv http://str0.creacast.com/hitradio_ohr_thema1  --sout "#transcode{acodec=s16l,channels=2}Confusedtd{access=file,mux=wav,dst=-}"   , wird
vlc dazu angehalten das Schwarzwaldradio wiederzugeben und nach einer Transcodierung signed16Bit, 2 Kanäle, die Ausgabe als wav nach stdout zu schicken.
Dort können dann die Daten zur weiteren Bearbeitung in der Signalkette abgeholt werden. Natürlich kann man auch hier im Befehl wieder die Playlist als Senderliste und das Remote-Interface plus Webinterface hinzunehmen. So funktioniert dann auch wieder der Drehencoder, Display etc. nur die Audioausgabe geht auf den Sender statt in den Kopfhörer oder über HDMI zum Monitor. Ein dualer Betrieb (Audiokarte und Sender) sind auch möglich, der Befehl ändert sich dann entsprechend der Dokumentation zu VLC.

Das neue iRadio-Archiv gibt es hier:
.zip   iRadio14122018.zip (Größe: 752,53 KB / Downloads: 29) : 14-12-2018 : Onlineinstaller für Sendebetrieb hinzugefügt.


Die Doku/Appnote zu csdr und rpitx hänge ich extra als Anhang an:
.zip   docs.zip (Größe: 1,55 MB / Downloads: 27)


Ich möchte im weiteren Thread bitte keine Kommentare zur Gesetzeslage sehen!!! Bitte lest die Dokumentation und die Projektseiten gründlich durch! Fragen zum Sendebetrieb bitte der Übersichtlichkeit nicht hier in den Thread stellen. Danke!

Viel Spaß beim Experimentieren
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
#95
(14.12.2018, 15:28)Bernhard45 schrieb: So nun hat mir die Forensoftware gesagt wie groß das iRadio maximal werden darf, es sind 2 MByte. Aus diesem Grund kann ich die Sendefähigkeit des iRadios nur mit einem Onlineinstaller nachreichen. Dies tue ich nun mit dem Script im Ordner "experimental".

Nachdem das iRadio ganz normal installiert ist, lässt sich durch Aufrufen des Scriptes install_TX_Support.sh der Raspberry sendetauglich machen. .

bis hierher bin ich vorgedrungen, und weis nicht mehr weiter. Ziel ist den Internetstream auf Langwelle verdrahtet in den Antenneneingang eines AM-Radio einzuspeisen mit einer Leistung die soweit reduziert ist daß dies rauschfrei möglich ist. Hast du noch einen Tipp für mich, Bernhard?
Gruß,
Jupp
-----------------------------
wenn man nur den Hammer kennt, sieht jedes Problem aus wie ein Nagel
--------
Zensur findet im Endgerät statt (CCC)
Zitieren
#96
Ich biete hier keinerlei Unterstützung oder Anleitungen zum Sendethema an! Die Sendefunktion wird von meiner Seite auch niemals Einzug in die Signalkette von iRadio halten. Der Onlineinstaller und gesamte "Experimental"-Ordner wird in der nächsten Version nicht mehr vorhanden sein!

Hilfe zu den Programmen und Bibliotheken, die den Pi zum Senden bringen, bekommt man auf den jeweiligen Projektseiten. Bei Problemen kann man dort auch seine Sorgen an die Entwickler loswerden.

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
#97
alles klar, verstehe ich, Bernhard. Ich werde nichts tun wo nicht in einem garantiert sicheren Bereich bin.
Gruß,
Jupp
-----------------------------
wenn man nur den Hammer kennt, sieht jedes Problem aus wie ein Nagel
--------
Zensur findet im Endgerät statt (CCC)
Zitieren
#98
Wollen wir uns jetzt von selbsternannten Gesetzeshütern den Spaß verderben lassen? Du gibst zu schnell nach Bernhard!
Zitieren
#99
Nein! Aber so ganz unrecht hat die Opposition auch nicht. Du müsstest Dich ja mit der Problematik aus deiner beruflichen Laufbahn her auskennen.
Hier kommen über Suchmaschinen einige Jugendliche und Kinder vorbei. Die haben nicht die Messmittel und auch nicht die Ahnung ein Signal wie es der Pi ausgibt zu händeln - und schwups funken die Raspberrys auf dem Flugfunkband oder in andere kritische Rettungsdienste rein. Es war wohl ein Fehler die letzte iRadio-Version zu releasen, leider kann ich es jetzt nicht mehr rückgängig machen. Streicht einfach alles ab Post #94 bis hierher gedanklich aus dem Kopf.
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
Hallo Bernhard,
beim Basteln mit dem iRadio Software Baukasten sind mir zwei kleine Fehler im
vlcd Script aufgefallen.
in Zeile 13 und 33 muss es "sudo chown -R pi:pi /home/pi/.config/vlc/" heißen.

Weiter mach es Sinn, nach Zeile 33 die Variable "playlist" auf "/etc/vlcd/default.m3u"
zu setzen. Falls vor dem Kopiervorgang dort noch keine Playlist lag, nutzt VLC diese
ansonsten erst nach dem nächsten Neustart.  

Gruß aus Kiel
Holger

Code:
#!/usr/bin/env bash

sed -i 's/geteuid/getppid/' /usr/bin/vlc
sudo mkdir -p /var/run/vlcd


# Updates on sdcard /boot
if [ -n $(cat /etc/passwd | grep -w "pi:") ]; then
   sudo chown pi:pi /var/run/vlcd
   if [ -f /boot/playlist.m3u ]; then
       mkdir -p /home/pi/.config/vlc
       sudo mv -f /boot/playlist.m3u /home/pi/.config/vlc/
#Zeile gändert alt: sudo chmod -R pi:pi /home/pi/.config/vlc/
       sudo chown -R pi:pi /home/pi/.config/vlc/  
   fi
   if [ -f /home/pi/.config/vlc/playlist.m3u ]; then
       playlist="/home/pi/.config/vlc/playlist.m3u"
   else
       playlist="/etc/vlcd/default.m3u"
   fi
else
   playlist="/etc/vlcd/default.m3u"
fi

if [ -f /boot/wpa_supplicant.conf ]; then
  sudo mv -f /boot/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf
fi

# Updates on usb flash /dev/sda1
sudo mount /dev/sda1 /mnt

if [ -f /mnt/playlist.m3u ]; then
       sudo mv -f /mnt/playlist.m3u /home/pi/.config/vlc/
#Zeile gändert alt: sudo chmod -R pi:pi /home/pi/.config/vlc/
       sudo chown -R pi:pi /home/pi/.config/vlc/
#Zeile eingefügt
playlist="/etc/vlcd/default.m3u"
fi

if [ -f /mnt/wpa_supplicant.conf ]; then
  sudo mv -f /mnt/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf
  sudo reboot
fi
sudo umount /dev/sda1

# Startup vlc
volpref=$(grep "^alsa-gain" ~/.config/vlc/vlcrc)

if [ -z $volpref ]; then
   volpref="alsa-gain 0.065"
fi

/usr/bin/vlc \
--verbose 2 \
--file-logging \
--logfile /var/run/vlcd/vlcd.log \
--$volpref \
--audio-filter compressor,volnorm \
--norm-buff-size 10 \
--norm-max-level 80.0 \
--norm-max-level -3 \
--compressor-attack 50.0 \
--compressor-release 200.0 \
--compressor-ratio 20.0 \
--compressor-threshold 0.0 \
--compressor-rms-peak 0.0 \
--compressor-knee 1.0 \
--compressor-makeup-gain 0.0 \
--intf dummy \
--extraintf rc:http \
--rc-host 0.0.0.0:9294 --rc-fake-tty \
--http-host 0.0.0.0 --http-port 8080 --http-password raspberry \
--no-quiet \
--daemon \
--pidfile /var/run/vlcd/vlcd.pid \
$playlist
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  iRadio SDR-Zuspieler für alte Radios Bernhard45 0 238 18.11.2019, 17:38
Letzter Beitrag: Bernhard45
  Ein Internetradio Bausatz von PIMORONI Bernhard45 191 17.209 02.09.2019, 11:19
Letzter Beitrag: Bernhard45
Brick noch ein Internetradio norbert_w 21 2.109 12.03.2019, 21:00
Letzter Beitrag: norbert_w
  DAB+, FM, AM, Internetradio ... eine Bauanleitung Bernhard45 6 1.236 09.03.2019, 19:58
Letzter Beitrag: vision-eyes
  Metz Baby Internetradio saarfranzose 37 3.013 07.03.2019, 23:31
Letzter Beitrag: Bernhard45

Gehe zu: