Dies ist das langlebigste Handwerk in meinem Leben. Es dauerte 12 Jahre von der Idee bis zur endgültigen Realisierung, damit es verwendet werden konnte! Während dieser Zeit ereignete sich eine kolossale Anzahl von Ereignissen: Umzüge, Geburten, Todesfälle, aber die Idee war bei mir und egal was, ich habe sie abgeschlossen. Und ich möchte Ihnen von den Wegen, Dornen, Bestrebungen erzählen, die dieses Handwerk begleiteten, und was daraus resultierte.
Idee
Ich habe in diesem Projekt vor langer Zeit die Idee eines Wi-Fi-Radios gesehen, das auf einem Router basiert . Wenn überhaupt, ist dies 2009. Es war ein Router-basierter Radio-, Linux- und MPD-Daemon. Dann waren das für mich keine ganz klaren Begriffe, aber ich wollte wirklich so ein Radio haben. Und ich habe diese Idee angeregt. Außerdem hat mich jede Lampentechnologie sehr inspiriert: Verstärkungslampen, Anzeigelampen (6E1P, auf meinem Profilbild), CRT-Bildschirme . Sehr erfreulich sind auch VFD-Displays (VFD - Vacuum Fluorescent Display oder in Russisch Vacuum-Luminescent Indicator (VLI) oder Cathodoluminescent Indicator (CLI).
Deshalb habe ich mich für ein Cash Display entschieden. Dann wusste ich nicht einmal, wie es heißt Käuferanzeige.
Also die Idee: ein Käufer-Display, ein Single-Board-Computer oder -Router, Linux + mpd, eine Vakuum-Fluoreszenz-Anzeige und eine Art Steuerung für dieses Zeug. Ähnlich dem Projekt, das mich inspiriert hat.
Ich verstehe, dass ich mit diesem Handwerk sehr spät gekommen bin, da es eine Reihe verschiedener Optionen für Wi-Fi-Radio gibt. Trotzdem unterscheidet es sich konzeptionell auch heute noch von den anderen, und ich denke, es wird interessant sein, über die Entwicklung eines solchen Geräts zu lesen. Außerdem habe ich es für die Seele getan und nicht zum Verkauf.
Grundlegendes Konzept und Design
Dieses Radio hatte in jenen Jahren (ungefähr 2010) ein anderes Projektziel. In jenen Jahren lernte ich die serbische Sprache und wollte ein einfaches Gerät haben, mit dem ich einen serbischen Radiosender empfangen konnte, indem ich den Schalter umlegte. Telefone und Computer waren keine Option, da sie mich selbst sehr ablenkten: Wenn Sie sie öffneten, würden Sie vergessen, was Sie taten. Zweitens wollte ich wirklich, dass das Stück Eisen einem gewöhnlichen vertrauten Radio so ähnlich wie möglich bleibt und sogar eine ältere Person es benutzen kann. Und schließlich wollte ich, dass die Steuerung minimalistisch ist: eine Taste.
Ich war sehr inspiriert von den Designlösungen der 30-40er Jahre des 20. Jahrhunderts in Bezug auf Architektur, Innenausstattung und insbesondere im Design von Funkempfängern. Dieser Stil heißt Art Deco. In unserem Land ist das Gebäude der Lenin-Bibliothek, der U-Bahn-Station Aeroport, Mayakovskaya, Krasnoselskaya (genauer gesagt, es hat den Einfluss dieses Stils) ein hervorragender Vertreter dieses Stils. Wenn wir über die Empfänger sprechen (deren Design sie bereits von der Architektur erhalten haben), dann waren die interessantesten Optionen diejenigen mit der Skala oben.
Designentscheidungen, die stark inspirierten
Natürlich war ursprünglich geplant, die Karosserie dieses Radios aus Edelholz herzustellen, wie ein Empfänger darüber. Und selbst als ich hier auf Habré war, traf ich einen Designer, der ein ähnliches Projekt machte (ich kann mich nicht erinnern, welches, sorry). und wir haben sogar ein paar Skizzen gemacht, über das Projekt nachgedacht, aber trotzdem habe ich es nicht gewagt, einen so ernsten Weg zu gehen, aber vergebens ... Im Allgemeinen gab es viele allerlei seltsame Träume und Wünsche. Aber es kam alles auf eine grausame Realität an.
Erste Schritte der Implementierung
Die Basis aller Wi-Fi-Funkgeräte ist das Display des Käufers. Ich habe das Display sehr lange ausgewählt, bin dumm einkaufen gegangen und habe geschaut, was mir am besten gefällt. Mein Lieblingsdisplay ist das Posiflex PD-2700 . Ich blieb stehen.
Zum ersten Mal einschalten und ein Bild auf dem Bildschirm anzeigen.
Ich habe einen separaten Artikel über die Arbeit mit diesen Anzeigen geschrieben. Sie können es hier lesen . Daher werde ich nicht im Detail auf das Prinzip ihrer Arbeit eingehen.
Der TP-Link 3020-Router, das Nokia N800 (ja, wundern Sie sich nicht, das N800), verschiedene Laptops, Industriecomputer aller Art, Registrierkassen, Raspberry Pi verschiedener Generationen, Einplatinengeräte und vieles mehr wurden als "Gehirn" dieses Radios anprobiert. Alles spricht für die Universalität der getroffenen Entscheidungen. Mit Blick auf die Zukunft wurden einige Entscheidungen getroffen, um die Portabilität zu gewährleisten und die Baukosten nicht zu senken.
Aber im Allgemeinen mochte ich nicht alle diese Lösungen, entweder waren sie in Bezug auf die Fähigkeiten für eine solche Aufgabe übermäßig hoch, oder im Gegenteil, sie waren zu leistungsschwach und hatten Probleme mit der Tonwiedergabe (z. B. Router). Als nächstes werde ich Ihnen die Hauptpfade erläutern, die ich bei der Umsetzung des Projekts eingeschlagen habe. Keine Sackgassen wie das Nokia N800 (bei aller Romantik dieses Ansatzes).
Arbeitender Prototyp
Der erste funktionierende Prototyp, der autonom war und sogar Radio spielte und in der Küche stand, implementierte ich auf Basis eines TP-Link 3020-Routers und einer chinesischen USB-Soundkarte für 100 Rubel. Dieser Router ist eine großartige Sache für solche Handwerke. Sein Hauptvorteil ist, dass Sie ihn im Gegensatz zu jeder anderen Einzelplatine im nächsten Computergeschäft kaufen können. Das Hauptbetriebssystem war OpenWRT, der Sound wurde über die meisten Deshman-Lautsprecher für 500 Rubel mit USB abgespielt. Im Allgemeinen ist alles unten. Und es hat sogar funktioniert! Kurz gesagt, es ist besser, einmal zu sehen, als tausendmal zu lesen.
Danach wurde klar, dass die Steuerung des Videos vom Tablet aus keine Option ist. Die Bedeutung von Radio geht verloren, wenn Sie dasselbe Tablet verwenden können. Aus diesem Grund habe ich beschlossen, die Steuerung mithilfe eines Encoders hinzuzufügen. Ursprünglich war der Encoder mit dem GPIO dieses Routers verbunden (ja, er hat einen GPIO an Bord), aber seine Arbeit hat mir nicht wirklich gefallen und diese Lösung war nicht portabel. Deshalb habe ich in Zukunft einen separaten Encoder-Controller auf Arduino-Basis erstellt, der über UART verbunden ist.
Der Encoder ist mit dem GPIO TP-Link 3020 verbunden.
Danach musste der Radiosender "konfiguriert" werden, und ich wollte, dass er wie bei alten Radios aussieht, wenn Sie den Knopf drehen und der Schieberegler über den Bildschirm läuft. Hierzu wurde eine vertikale Stickschrift mit fünf Teilen implementiert. Und ich habe es jedes Mal überladen und in meinem Artikel gelesen, wie man Schriftarten herunterlädt . Das Ergebnis war eine solche Lösung.
Nun, es bleibt, das Radio selbst mit diesen Experimenten zu überqueren, und als Ergebnis erhalten wir eine bequeme Kontrolle. Er sagte auf den Punkt gebracht, aber tatsächlich sind mehrere Monate vergangen, aber das Ergebnis ist mir wichtig.
Es scheint alles zu sein, aber wie bei allen Funkfreunden meiner Freunde üblich - das Gerät hat keinen Fall und begann darüber nachzudenken, was zu tun ist. Ich war sehr inspiriert von den offenen Vintage-Empfängern der 30er Jahre, wo es nur eine Ecke mit einem Schild und Griffen gibt und alle Eingeweide frei sind.
Eine Variante des Prototyps habe
ich beschlossen, ihn zu wiederholen. Dazu riss er die Säule auseinander, entfernte die Maße und fertigte einen Prototyp aus Pappe.
Ich nehme die Lautsprecher aus, nehme den Verstärker heraus und messe die Abmessungen.
Nachdem ich die Säule zerlegt hatte, nahm ich den Verstärker von dort heraus, nahm alle Abmessungen des Gehäuses, des Verstärkers und der Encoderknöpfe ab und markierte alles auf dem Karton so, wie es aussehen würde.
Größenmarkierungen Ich
dachte, was zum Teufel scherzt, lass mich sehen, wie es in Pappe aussehen wird, einer Art Pappprototyp.
Kartonradio
Und es funktioniert sogar!
Dann kopierte er alle Maße, zeichnete und schickte sie zum Laserschneiden.
Abmessungen Das
geschnittene Acryl kam nach, und so sieht es nach der Montage aus.
Auf der Vorderseite befinden sich ein Netzschalter, ein Encoder und ein Lautstärkeregler. Im Inneren sieht man, dass es eine unabhängige Stromversorgung gibt, eine Reihe von Hubs. Nun, seien wir ehrlich, es sieht nicht sehr gut aus.
Wie viele vielleicht bemerken, ist Acryl transparent. Anfangs wollte ich das Display so platzieren, dass es durchscheint (das Display ist bereits weiß, es scheint durch einen grünen Filter). Aber ich mochte die Farbe und den Kontrast nicht.
Auf dem Foto gibt es Licht durch orangefarbenes Acryl, eine ehrliche Anzeigefarbe (im Leben ist es Weiß) und einen Blaufilter eines der Anzeigen (ich habe jetzt Grün in meinem Radio).
Das resultierende Design ist natürlich cool, aber ich werde mich nicht selbst belügen, nicht praktisch. Natürlich hat es funktioniert und ich habe mir dieses Produkt sogar einige Zeit angehört, aber eine Reihe von Problemen wurden aufgedeckt. Erstens war es völlig unmöglich, es in dieser Form zu verwenden: Es sammelt Staub, man kann nichts darauf legen, es nimmt viel Platz ein. Zweitens erwies sich TP-Link 3020 als ziemlich schwach für das Radio, und viele standen vor dem Problem der Implementierung. OpenWRT bietet keine Hardware-Unterstützung für Gleitkommawerte. Daher lädt mpd den Prozessor zu 100% und Sie können ihn im Sound hören (es gibt unangenehme digitale Klicks). Dies setzte einer solchen Umsetzung im Allgemeinen ein Ende. Außerdem erlaubten mir einige Umstände in meinem Leben nicht mehr, mich an diesem Projekt zu beteiligen, und dieses Radio wurde zerlegt und buchstäblich in einer Schachtel verstaut.
Endgültige Entscheidung
Aber glaube nicht, dass ich einfach aufgegeben habe. Nein, die Idee lebte weiter. Und jetzt, nach einer Weile, beschloss ich, dieses Radio auszuschalten. Und es stellte sich so gut heraus, dass ich einen Koffer hatte, den ich in China gekauft hatte. Als Gehirn habe ich Beaglebone Black genommen, mit dem ich in einem Projekt gearbeitet habe und dessen gute und schlechte Seiten ich kenne. Der Schal ist natürlich alt, passt aber perfekt zu dieser Aufgabe. Ursprünglich wollte ich OpenWRT als Hauptbetriebssystem verwenden, hatte dort jedoch einige Probleme mit Wi-Fi-Treibern. Ich habe die Soundkarte auf den beliebten PCM2704 DAC genommen. Sie wird auf dieser Anfrage bei einer beliebten Auktion, wie einem weißen Schal, leicht gesucht. Ich bin sehr zufrieden mit der Soundkarte, aber im Allgemeinen war es möglich, eine zu platzieren, sogar SoundBlaster.
Prototyping-Phasen, Testen verschiedener Soundkarten, Single-Board-Geräte, Linux-Images, Wi-Fi-Adapter und Auswahl der optimalsten Lösung
In meinem letzten Artikel habe ich darüber gesprochen, wie viel Zeit für die Auswahl von Komponenten aufgewendet wird, da sonst Kopfschmerzen auftreten. Es passierte genauso, ich wollte eine Linux-fähige USB-Wi-Fi-Karte. Und ohne zu zögern nahm er TP-Link N150 für sich. Kurz gesagt, tu das nicht. Sie trank Tonnen von Blut von mir und verbrachte eine Woche mit ihr. Ich habe es nicht unter OpenWRT geschafft, unter Ubuntu habe ich es mit einigen heftigen Tänzen mit einem Tamburin begonnen. Kurz gesagt, ich habe es gemäß diesem Handbuch installiert (irgendwo in der Mitte befindet sich eine Anleitung). Das Startskript (/etc/rc.local) sieht für mich ungefähr so aus (nach einer Reihe von Experimenten).
#!/bin/sh
PATH="/sbin:/bin:/usr/bin"
ps -ef|grep wpa|awk '{print $2}' |xargs -i kill {}
#in case you want to test the script
ifdown wlan0
sleep 0.1
ifup wlan0
sleep 0.1
ifup wlan0
sleep 0.1
ifup wlan0
sleep 0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
#END
sleep 30
#
Im Allgemeinen begann nach all den Prüfungen alles und alles wurde zusammengebaut und in das Gebäude gebracht. Ich werde nicht alle Details beschreiben, weil jeder seine eigenen haben wird. Aber ich habe neue Buchsen für die Beine gemacht, der Boden war von unten aus Sperrholz und ich habe alles daran befestigt. Das Display wurde auf Holzrahmen montiert.
Frontplatte
Alles wird von einem Encoder gesteuert. Links-rechts - Senderauswahl, Drücken der Encoder-Taste - Pause; zweimal kurzes Drücken der Taste - Anzeige von Uhrzeit und Datum (funktioniert wie eine Uhr).
Rückseite
Trotz der Tatsache, dass es sich genau um ein Wi-Fi-Radio handelt, blieb die Möglichkeit, eine Verbindung über Ethernet für Diagnose und Debugging herzustellen. Wie Sie sehen, befindet sich derzeit kein Verstärker im Gehäuse. Nur eine Aufstellung, die meiner Meinung nach noch bequemer ist. Werfen wir einen Blick hinein.
Links drinnen sehen wir das Netzteil, unten auf der Vorderseite befindet sich ein Display in einem Holzrahmen, rechts ist ein Encoder auf der Vorderseite. An der Oberseite des USB-Hubs, an den die Stromversorgung angeschlossen ist, wird das Display ebenfalls von dort mit Strom versorgt. Eine Soundbox wird ebenfalls in den Hub eingesetzt. Die Einzelplatte selbst steht auf einer Aluminiumecke auf Gestellen, die mit Sperrholz verschraubt sind. Der Encoder-Controller ist rechts versteckt, so sieht es aus.
Encoder-Controller
Dies ist eine gewöhnliche Arduinka, die über UART mit dem Beaglebone verbunden ist.
Ein paar Worte zum Quellcode und den Einstellungen
Ich habe festgestellt, dass die Lesbarkeit eines Artikels sofort um die Hälfte verringert wird, wenn einem Artikel eine Codebeschreibung hinzugefügt wird. Daher wird es in diesem Artikel sehr wenig Code geben, obwohl zwei Artikel nur der Beschreibung des Codes gewidmet sein können. Ich werde die Einstellung des mpd-Daemons nicht beschreiben, es gibt Tausende von Artikeln, einschließlich derer über Habré, und das Handbuch selbst ist normalerweise vollständig. Ich werde das Linux-Setup auf Beaglebone weglassen. Es sei denn, ich musste den UART einschalten, um das Arduino anzuschließen. Dies ist aber auch leicht zu googeln. Der Quellcode des gesamten Projekts lebt von Github und steht allen zur Verfügung.
Ich werde nicht alle Punkte des Codes analysieren. Die Arbeit mit dem Display wurde zuvor im Artikel behandelt. Ich werde die Akten durchgehen.
Der Ordner arduino_encoder enthält das Arduino-Encoder-Projekt. Dort ist alles intuitiv klar und ich sehe keinen Grund, es irgendwie zu klären. Im Linux-Ordner, den Quellcodes des Radios selbst, wanderte dieser Code von Projekt zu Projekt.
- Makefile
Dies ist eine Zusammenstellung des Projekts selbst, hier nichts Neues.
- control.c
Dies ist das Master-Programm, in dem die ganze Magie geschieht.
- uart.c
- uart.h
Hier ist der vorgefertigte UART-Initialisierungscode. Für alle, die mit CART mit UART unter Linux arbeiten, empfehle ich, diese beiden Dateien zu untersuchen. Nun, ich empfehle auch jedem, der sich meine Webinare über die ein- oder zweimalige Arbeit mit UART unter Linux angesehen hat, diese ebenfalls anzuschauen.
- display.c
- display.h
- output.h
Wie Sie vielleicht erraten haben, ist dies der Code für die Arbeit mit dem Display. Außerdem musste ich den Zeichenkonvertierungscode darauf schrauben.
- charset_coverter.c
- charset_coverter.h
Das Display arbeitet in CP866-Codierung. Und selbst um eine Nachricht auf Russisch von der Konsole aus anzuzeigen, müssen Sie den folgenden Trick anwenden:
echo -en " \n dlinyj" | iconv -f UTF-8 -t CP866 > /dev/ttyACM0
Es gibt jedoch eine Nuance: Es gibt keine Buchstaben "e", das harte Vorzeichen "" und das weiche Vorzeichen "b" sind umgekehrt. Nach dem Dekodieren müssen Sie also dekodieren.
- mpc.c
- mpc.h.
Arbeiten mit mpd Daemon. Im Allgemeinen gibt es Bibliotheken, um damit zu arbeiten, aber da ich nicht sehr viele Funktionen benötige, habe ich beschlossen, alles von Grund auf neu auf Sockets zu schreiben. Vielleicht ist es für jemanden nützlich.
- term.c
- term.h
Oh, das ist der große Teil. Da ich den Code manchmal ohne Anzeige debuggen musste, machte ich mich zu einem "Simulator" der Anzeige mit Tastatursteuerung anstelle eines Encoders. Es sieht so aus: Auf dem ersten Bild gibt es ein Datum und eine Uhr, auf dem zweiten eine Melodie und einen Sender.
Weitere Informationen zum Schreiben finden Sie im Artikel "Terminal Graphics" .
Das Hinzufügen von Radiosendern ist für mich das folgende Skript.
#! /bin/sh -
# Some configuration settings
VOLUME=60
#mpc volume $VOLUME # adjust this to suit your speakers/amplifier
mpc clear # clear current playlist
mpc add http://relay3.slayradio.org:8000/ #*Slay Radio
mpc add http://fr1.streamhosting.ch:8080 #*lounge-radio.com
mpc add http://us-tx1.streams.bassdrive.com:9000/ #*DnBHeaven.com
mpc add http://uk2.internet-radio.com:31491 #*AmbientRadio.org
mpc add http://www.partyvibe.com:8010/ #*PARTY VIBE RADIO
mpc add http://streamer.psyradio.org:8120 #*psyradio chillout
mpc add http://live.coolradio.rs/cool128
mpc add http://big2.bigportal.ba:8100/big2
Wenn Sie Streaming-Radiosender haben, die Sie empfehlen können, insbesondere für elektronische Musik, schreiben Sie in die Kommentare :)
Zur Vereinfachung der Verwaltung und Konfiguration habe ich eine Weboberfläche aus dem ympd- Projekt hinzugefügt . Es sieht aus wie das.
Infolgedessen sieht die Datei /etc/rc.local am Ende folgendermaßen aus:
sleep 30
/home/ubuntu/addradio.sh > /dev/null 2>&1 &
/home/ubuntu/wifi-radio/Linux/control > /dev/null 2>&1 &
/home/ubuntu/ympd --webport 80 > /dev/null 2>&1 &
Ja, ja, ich weiß, dass auf Ubuntu systemd und rc.local schlecht zu bedienen sind und andere bla, bla, bla. Aber ich benutze es, weil ich will und ich kann.
Ergebnis
Natürlich stellte sich heraus, dass das Radio nicht so schön und anmaßend war, wie es ursprünglich beabsichtigt war, aber ich entschied, dass ein Vogel in meiner Hand besser ist als ein Kuchen am Himmel. Es ist besser, dies zu tun, als das Vergnügen mit einem unklaren Ergebnis um mehrere Jahre zu verlängern. Trotzdem, obwohl unscheinbar, macht es mich sehr glücklich. Wenn Sie also eine Menge Text lesen möchten, ist es Zeit, sich ein Video anzusehen, wie alles aussieht und funktioniert.
Das Video ist etwas alt, jetzt sind Antenne und Ethernet verbunden und funktionieren sogar ganz gut.
Wo soll man wachsen?
Und es gibt Raum zum Wachsen. Einer der Ableger dieses Projekts, den ich seit langem ausgenutzt habe, ist das Volumio- Projekt . Es ist ein wunderbarer Player-Aggregator, mit dem Sie Radiosender aus aller Welt, Streaming und mehr hören können. Jeder ist gut, perfekt an mein Projekt angedockt und zeigt alle Stationen auf dem Bildschirm an. Es sei denn, die Kontrollen waren völlig nutzlos. Sie können auch Sprachsteuerung hinzufügen, es gibt ein wunderbares Rhasspy- Projekt , über das es sogar einen Artikel über Habré gab. Sie können die Sprachsteuerung vornehmen, ohne eine Verbindung zu einem externen Server herzustellen!
Das einzige, was es wert ist, mpd loszuwerden, ist der Engpass. Wenn es keine Station gibt, legt er auf und wartet darauf. Keine Vorpufferung anderer Stationen usw. Das heißt, es gibt Boden für Wachstum. Und das Thema ist wahnsinnig interessant, mit einer Menge Ideen. Danke fürs Lesen!