C'est le métier le plus durable de ma vie. Il a fallu 12 ans entre l'idée et la réalisation finale, pour qu'il puisse être utilisé! Pendant ce temps, un nombre colossal d'événements se sont produits: déménagements, naissances, décès, mais l'idée était avec moi et quoi qu'il arrive, je l'ai complétée. Et je veux vous parler des chemins, des épines, des aspirations qui ont accompagné ce métier et ce qui en est résulté.
Idée
J'ai vu l'idée même d'une radio Wi-Fi basée sur un routeur il y a longtemps dans ce projet . Si quelque chose - c'est 2009. C'était un démon radio, Linux et mpd basé sur un routeur. Alors ce n'étaient pas des termes tout à fait clairs pour moi, mais je voulais vraiment avoir une telle radio. Et j'ai lancé cette idée. De plus, j'ai été très inspiré par n'importe quelle technologie de tube: lampes d'amplification, voyants (6E1P, qui est sur ma photo de profil), écrans CRT . Et VFD affiche (VFD -. Vide fluorescent affichage ou indicateur vide-luminescent russe (VLI), ou indicateur de cathodoluminescent (CLI) sont également très agréable Par
conséquent, j'ai décidé d'utiliser un affichage en espèces alors que je ne savais même pas ce qu'il a été appelé. affichage de l'acheteur.
Donc l'idée: un écran d'acheteur, un ordinateur ou un routeur monocarte, Linux + mpd, un indicateur fluorescent sous vide et une sorte de commandes pour ce truc. Similaire au projet qui m'a inspiré.
Je comprends que j'ai été très en retard avec ce métier, car il existe un tas d'options différentes pour la radio Wi-Fi. Mais il diffère encore conceptuellement, même aujourd'hui, du reste, et je pense qu'il sera intéressant de lire sur la création d'un tel appareil. De plus, je l'ai fait pour l'âme, et non pour la vente.
Concept de base et design
Cette radio de ces années (vers 2010) avait un autre objectif de projet. Pendant ces années, j'étudiais la langue serbe et je voulais avoir un appareil simple, où je recevrais une station de radio serbe en «basculant le commutateur». Les téléphones, les ordinateurs n'étaient pas une option, car ils m'ont beaucoup distrait: au moment où vous l'ouvririez, vous oublieriez ce que vous faisiez. Deuxièmement, je voulais vraiment que le morceau de fer reste aussi similaire que possible à une radio familière ordinaire et même une personne âgée puisse l'utiliser. Et enfin, je voulais que les commandes soient minimalistes: un seul bouton.
J'ai été très inspiré par les solutions de conception des années 30-40 du 20ème siècle dans l'architecture, l'intérieur et, en particulier, dans la conception de récepteurs radio. Ce style s'appelle Art Déco. Dans notre pays, un représentant brillant de ce style est le bâtiment de la bibliothèque Lénine, la station de métro Aeroport, Mayakovskaya, Krasnoselskaya (plus précisément, il a l'influence de ce style). Si nous parlons des récepteurs (dont la conception qu'ils ont déjà reçue de l'architecture), les options les plus intéressantes étaient celles avec l'échelle en haut.
Des décisions de conception qui ont fortement inspiré
Bien sûr, au départ, le corps de cette radio devait être en bois précieux, comme un récepteur sur le dessus. Et même une fois ici sur Habré j'ai rencontré un designer qui faisait un projet similaire (je ne me souviens plus lequel, désolé); et nous avons même fait quelques croquis, pensé au projet, mais encore là je n'ai pas osé prendre un chemin aussi sérieux, mais en vain ... En général, il y avait beaucoup de toutes sortes de rêves et de désirs étranges. Mais tout se résumait à une cruelle réalité.
Premières étapes de mise en œuvre
La base de toute radio Wi-Fi est l'écran de l'acheteur. J'ai choisi l'écran pendant très longtemps, j'ai bêtement fait du shopping et j'ai regardé ce que j'aime le plus. Mon écran préféré est le Posiflex PD-2700 . Je me suis arrêté là-dessus.
Mise sous tension pour la première fois et affichage d'une image à l'écran.
J'ai écrit un article distinct sur l'utilisation de ces écrans. Vous pouvez le lire ici . Par conséquent, je ne m'attarderai pas sur le principe de leur travail en détail.
Le routeur TP-Link 3020, le Nokia N800 (oui, ne soyez pas surpris, le N800), divers ordinateurs portables, ordinateurs industriels de toutes sortes, caisses enregistreuses, Raspberry Pi de différentes générations, appareils à carte unique et bien d'autres ont été essayés comme les «cerveaux» de cette radio. Tout parle de l'universalité des décisions prises. Et pour l'avenir, certaines décisions ont été prises dans un souci de portabilité et non pour réduire le coût de construction.
Mais en général, je n'aimais pas toutes ces solutions, ou elles étaient excessives en termes de capacités pour une telle tâche, ou, au contraire, étaient trop faibles en performances et avaient des problèmes de restitution sonore (par exemple, les routeurs). Ensuite, je vous indiquerai les principaux chemins que j'ai suivis dans la mise en œuvre du projet. Pas de branches sans issue, comme le Nokia N800 (pour toute la romance de cette approche).
Prototype de travail
Le premier prototype fonctionnel, qui était autonome et jouait même d'une radio et se tenait dans la cuisine, j'ai implémenté sur la base d'un routeur TP-Link 3020 et d'une carte son USB chinoise pour 100 roubles. Ce routeur est une excellente chose pour de tels métiers, son principal avantage est que vous pouvez acheter dans le magasin informatique le plus proche, contrairement à toute autre carte unique. Le système d'exploitation principal était OpenWRT, le son était joué par les haut-parleurs les plus deshman, pour 500 roubles, alimentés par USB. En général, tout est en bas. Et cela a même fonctionné! Bref, il vaut mieux voir une fois que lire mille fois.
Après cela, il est devenu clair que la façon de contrôler la vidéo à partir de la tablette n'était pas une option. La signification de la radio est perdue lorsque vous pouvez utiliser la même tablette. Par conséquent, j'ai décidé d'ajouter un contrôle à l'aide d'un encodeur. Initialement, l'encodeur était connecté au GPIO de ce routeur (oui, il a un GPIO à bord), mais je n'aimais pas vraiment son travail et cette solution n'était pas portable, donc à l'avenir j'ai fait un contrôleur d'encodeur séparé basé sur arduino, qui est connecté via UART.
L'encodeur est connecté au GPIO TP-Link 3020.
Après cela, il était nécessaire de "configurer" la station de radio, et je voulais la faire ressembler à de vieilles radios lorsque vous tournez le bouton et que le curseur traverse l'écran. Pour cela, une police verticale de bâton a été mise en œuvre, cinq pièces. Et je l'ai surchargé à chaque fois, lisez comment télécharger des polices dans mon article . Le résultat était une telle solution.
Eh bien, il reste à traverser la radio elle-même avec ces expériences et en conséquence nous obtenons un contrôle pratique. Il a dit en un mot, mais en fait plusieurs mois se sont écoulés, mais le résultat est important pour moi.
Cela ressemble à tout, mais comme d'habitude avec tous mes amis radioamateurs - l'appareil n'a pas d'étui et a commencé à réfléchir à ce qu'il faut faire. J'ai été très inspiré par les récepteurs vintage ouverts des années 30, où il n'y a qu'un coin avec un bouclier et des poignées, et tous les tripes sont libres.
Une variante du prototype
j'ai décidé de la répéter. Pour ce faire, il a déchiré la colonne, en a enlevé les dimensions et en a fait un prototype en carton.
J'ai vidé les haut-parleurs, sorti l'amplificateur et pris des mesures des dimensions
Après avoir démonté la colonne, j'ai sorti l'amplificateur à partir de là, puis j'ai enlevé toutes les dimensions du boîtier, les boutons de l'amplificateur et de l'encodeur, et j'ai tout marqué sur le carton comme cela ressemblerait.
Marquages de taille Je
pensais, qu'est-ce que c'est de plaisanter, laissez-moi voir à quoi cela ressemblera en carton, une sorte de prototype en carton.
Radio en carton
Et ça marche même!
Puis il a copié toutes les dimensions, les a dessinées et les a envoyées à la découpe laser.
Dimensions
Après est venu l'acrylique découpé, et c'est ainsi qu'il se présente après l'assemblage.
Sur le panneau avant, il y a un bouton d'alimentation, un encodeur, un bouton de volume. À l'intérieur, vous pouvez voir qu'il y a une alimentation indépendante, un tas de hubs, eh bien, soyons honnêtes, ça n'a pas l'air très bien.
Comme beaucoup le remarqueront, l'acrylique est transparent. Au départ, je voulais placer l'écran derrière pour qu'il brille à travers (l'écran est déjà blanc, il brille à travers un filtre vert). Mais je n'ai pas aimé la couleur et le contraste.
Sur la photo, il y a de la lumière à travers de l'acrylique orange, une couleur d'affichage honnête (dans la vraie vie, c'est blanc) et un filtre bleu sur l'un des écrans (j'en ai un vert dans ma radio maintenant).
Le design qui en résulte est bien sûr cool, mais je ne me mentirai pas, pas pratique. Bien sûr, cela a fonctionné et j'ai même écouté ce produit pendant un certain temps, mais un certain nombre de problèmes ont été révélés. Premièrement, il était totalement impossible de l'utiliser sous cette forme: il ramasse la poussière, on ne peut rien mettre dessus, ça prend beaucoup de place. Deuxièmement, le TP-Link 3020 s'est avéré plutôt faible pour la radio, et beaucoup ont été confrontés au problème de sa mise en œuvre. OpenWRT n'a pas de support matériel pour la virgule flottante, et donc mpd charge le processeur à 100% et vous pouvez l'entendre dans le son (il y a des clics numériques désagréables). Cela, en général, a mis un terme à une telle mise en œuvre. De plus, un certain nombre de circonstances dans ma vie ne m'ont plus permis de me lancer dans ce projet, et cette radio a été démontée et rangée littéralement dans une boîte.
Décision finale
Mais ne pensez pas que j'ai abandonné. Non, l'idée a continué à vivre. Et maintenant, après un certain temps, j'ai décidé de terminer cette radio. Et il s'est avéré si bien que j'avais un étui que j'ai acheté en Chine. En tant que cerveau, j'ai pris le beaglebone noir, avec lequel j'ai travaillé dans un projet et je connais ses bons et ses mauvais côtés. Le foulard est bien sûr vieux, mais il convient parfaitement à cette tâche. Au départ, je voulais mettre OpenWRT comme système d'exploitation principal, mais j'ai eu un tas de problèmes avec les pilotes Wi-Fi. J'ai pris la carte son sur le populaire DAC PCM2704. Elle est facilement recherchée à cette demande lors d'une vente aux enchères populaire, comme un foulard blanc. Je suis très satisfait de la carte son, mais en général, il était possible de mettre n'importe lequel, même SoundBlaster.
Étapes de prototypage, essai de différentes cartes son, appareils monocarte, images Linux, adaptateurs Wi-Fi et choix de la solution la plus optimale
Dans mon dernier article, j'ai parlé de passer du temps à choisir les composants, sinon il y aura mal à la tête. C'est arrivé de la même manière, je voulais une carte Wi-Fi USB compatible Linux. Et sans hésitation, il a pris le TP-Link N150 pour lui-même. Bref, ne faites pas ça. Elle a bu des tonnes de sang de moi, a passé une semaine sur elle. Je n'ai pas réussi à l'obtenir sous OpenWRT, sur Ubuntu je l'ai commencé avec des danses féroces avec un tambourin. Bref, je l'ai installé conformément à ce manuel (il y a une instruction quelque part au milieu). Le script de démarrage (/etc/rc.local) ressemble à quelque chose comme ça pour moi (après un tas d'expériences).
#!/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
#
En général, après toutes les épreuves, tout cela a commencé et tout cela a été assemblé et mis dans le bâtiment. Je ne décrirai pas tous les détails, car chacun aura le sien. Mais j'ai fait de nouvelles bagues pour les jambes, le fond était en contreplaqué par le bas et j'y ai tout attaché. Le présentoir était monté sur des cadres en bois.
Panneau avant
Tout est contrôlé par un encodeur. Gauche-droite - sélection de la station, en appuyant sur le bouton de l'encodeur - pause; double pression courte sur le bouton - affichage de l'heure et de la date (fonctionne comme une horloge).
Panneau arrière
Malgré le fait qu'il s'agisse exactement d'une radio Wi-Fi, il a laissé la possibilité de se connecter via Ethernet pour le diagnostic et le débogage. Comme vous pouvez le voir, il n'y a pas d'amplificateur dans le boîtier actuellement. Seulement un line-out, ce qui, à mon avis, est encore plus pratique. Jetons un coup d'œil à l'intérieur.
À l'intérieur, à gauche, nous voyons l'alimentation, en dessous sur la face est un affichage dans un cadre en bois, à droite sur la face il y a un encodeur. Au sommet du concentrateur USB, dans lequel l'alimentation est branchée, l'écran est également alimenté par celui-ci, une boîte de son est également insérée dans le concentrateur; le panneau unique lui-même repose sur un coin en aluminium sur des crémaillères, vissé sur du contreplaqué. Le contrôleur d'encodeur est caché sur la droite, il ressemble à ceci.
Contrôleur d'encodeur
Il s'agit d'un arduinka ordinaire, qui est connecté via UART au Beaglebone.
Quelques mots sur le code source et les paramètres
J'ai remarqué que si une description de code est ajoutée à un article, sa lisibilité est immédiatement réduite de moitié. Par conséquent, dans cet article, il y aura très peu de code, bien que deux articles ne puissent être consacrés qu'à la description du code. Je ne décrirai pas le paramétrage du démon mpd, il existe des milliers d'articles, y compris ceux sur Habré, et le manuel lui-même est généralement exhaustif. Je vais omettre la configuration Linux sur Beaglebone. Sauf si je devais activer l'UART pour connecter l'Arduino. Mais cela est également facilement recherché sur Google. Le code source de l'ensemble du projet vit sur github et est accessible à tous.
Je n'analyserai pas tous les points du code. Le travail avec l'affichage était auparavant couvert dans l'article. Je vais passer en revue les fichiers.
Le dossier arduino_encoder contient le projet d'encodeur arduino. Tout y est intuitivement clair et je ne vois aucune raison de régler le problème d'une manière ou d'une autre. Dans le dossier Linux, les codes sources de la radio elle-même, c'était ce code qui errait de projet en projet.
- Makefile
Il s'agit d'un assemblage du projet lui-même, rien de nouveau ici.
- control.c
C'est le programme principal où toute la magie opère.
- uart.c
- uart.h
Voici le code d'initialisation UART prêt à l'emploi. Pour tous ceux qui travaillent sur C avec UART sous Linux, je recommande d'examiner ces deux fichiers. Eh bien, je recommande également à tous ceux qui ont regardé mes webinaires sur le travail avec UART sous Linux une ou deux fois de les examiner.
- display.c
- display.h
- output.h
Comme vous pouvez le deviner, c'est le code pour travailler avec l'affichage. De plus, j'ai dû lui visser le code de conversion de caractères.
- charset_coverter.c
- charset_coverter.h
L'affichage fonctionne en codage CP866. Et même pour afficher un message en russe depuis la console, vous devez utiliser l'astuce suivante:
echo -en " \n dlinyj" | iconv -f UTF-8 -t CP866 > /dev/ttyACM0
Mais, il y a une nuance: il n'y a pas de lettres «e», le signe dur «» et le signe souple «b» sont inversés. Donc, après le décodage, vous devez décoder.
- mpc.c
- mpc.h
Travailler avec le démon mpd. En général, il existe des bibliothèques pour travailler avec, mais comme je n'ai pas besoin d'un très grand nombre de fonctions, j'ai décidé de tout écrire à partir de zéro sur des sockets. Ce sera peut-être utile à quelqu'un.
- term.c
- term.h
Oh, c'est la grande partie. Comme je devais parfois déboguer le code sans affichage, je me suis fait un "simulateur" de l'affichage, avec un contrôle au clavier au lieu d'un encodeur. Cela ressemble à ceci: sur la première image il y a une date et une horloge, sur la seconde une mélodie et une station.
Pour plus de détails sur la façon d'écrire ceci, consultez l'article «Graphiques du terminal» .
Ajouter des stations de radio pour moi est le script suivant.
#! /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
Si vous avez des stations de radio en streaming que vous pouvez recommander, en particulier pour la musique électronique, écrivez dans les commentaires :)
Pour faciliter la gestion et la configuration, j'ai ajouté une interface Web du projet ympd . Ça ressemble à ça.
En conséquence, le fichier /etc/rc.local à la fin ressemble à ceci:
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 &
Oui, oui, je sais que sur Ubuntu systemd et rc.local sont mauvais à utiliser et autres bla, bla, bla. Mais je l'utilise parce que je veux et je peux.
Résultat
Bien sûr, la radio s'est avérée être moins belle et prétentieuse qu'elle ne l'était à l'origine, mais j'ai décidé qu'un oiseau dans ma main vaut mieux qu'une tarte dans le ciel. Il vaut mieux le faire que de prolonger le plaisir pendant plusieurs années avec un résultat peu clair. Néanmoins, bien que peu prévenant, cela me rend très heureux. Alors, que lire un tas de texte, il est temps de regarder une vidéo de son apparence et de son fonctionnement.
La vidéo est un peu vieille, maintenant l'antenne et Ethernet sont connectés et fonctionnent même assez bien.
Où grandir?
Et il y a de la place pour grandir. Une des ramifications de ce projet que j'exploite depuis longtemps est le projet Volumio . C'est un agrégateur de lecteurs agréable qui vous permet d'écouter des stations de radio du monde entier, en streaming et plus encore. Tout le monde est bon, parfaitement ancré avec mon projet et affiche toutes les stations à l'écran. À moins que les commandes ne soient complètement inutiles. Vous pouvez également ajouter une commande vocale, il y a un merveilleux projet Rhasspy , à propos duquel il y avait même un article sur Habré. Il vous permet de faire un contrôle vocal sans vous connecter à un serveur externe!
La seule chose qui vaut la peine d'abandonner MPD est le goulot d'étranglement. S'il n'y a pas de station, il raccroche en attendant. Pas de pré-tamponnage des autres stations, etc. Autrement dit, il y a un sol pour la croissance. Et le sujet est incroyablement intéressant, avec un tas d'idées. Merci d'avoir lu!