Radio internet tabung hangat



Ini adalah kerajinan tangan terpanjang dalam hidup saya. Butuh waktu 12 tahun dari ide hingga realisasi akhir, sehingga bisa digunakan! Selama waktu ini, sejumlah besar peristiwa terjadi: relokasi, kelahiran, kematian, tetapi idenya ada bersama saya dan apa pun yang terjadi, saya menyelesaikannya. Dan saya ingin memberi tahu Anda tentang jalan setapak, duri, aspirasi yang menyertai kerajinan ini dan apa hasilnya.



Ide



Saya sudah lama sekali melihat ide radio Wi-Fi berdasarkan router dalam proyek ini . Jika ada, ini tahun 2009. Itu adalah radio berbasis router, Linux dan mpd daemon. Maka ini bukanlah istilah yang sepenuhnya jelas bagi saya, tetapi saya benar-benar ingin memiliki radio seperti itu. Dan saya mengobarkan ide ini. Selain itu, saya sangat terinspirasi oleh teknologi lampu apa pun: lampu penguatan, lampu indikator (6E1P, yang ada di foto profil saya), layar CRT . Dan VFD-display (VFD - Vacuum Fluorescent Display atau dalam Russian Vacuum-luminescent indicator (VLI), atau cathodoluminescent indicator (CLI) juga sangat menyenangkan.



Oleh karena itu, saya memutuskan untuk menggunakan tampilan tunai. Kemudian saya bahkan tidak tahu apa namanya tampilan pembeli.



Jadi idenya: layar pembeli, beberapa komputer papan tunggal atau router, Linux + mpd, indikator fluoresen vakum dan semacam kontrol untuk barang ini. Mirip dengan proyek yang menginspirasi saya.



Saya mengerti bahwa saya sangat terlambat dengan kerajinan ini, karena ada banyak opsi berbeda untuk radio Wi-Fi. Tapi tetap saja berbeda secara konseptual, bahkan hari ini, dari yang lain, dan saya pikir akan menarik untuk membaca tentang pembuatan perangkat semacam itu. Apalagi, saya melakukannya untuk jiwa, dan bukan untuk dijual.



Konsep dan desain dasar



Radio ini pada tahun-tahun itu (sekitar 2010) memiliki tujuan proyek lain. Pada tahun-tahun itu saya belajar bahasa Serbia dan saya ingin memiliki perangkat sederhana, di mana saya akan menerima stasiun radio Serbia dengan "menekan tombol". Telepon, komputer bukanlah pilihan, karena mereka sendiri sangat mengganggu saya: saat Anda membukanya, Anda akan lupa apa yang Anda lakukan. Kedua, saya benar-benar ingin potongan besi itu tetap semirip mungkin dengan radio biasa yang biasa dan bahkan orang tua pun dapat menggunakannya. Dan terakhir, saya ingin kontrolnya minimalis: satu tombol.



Saya sangat terinspirasi oleh solusi desain dari 30-40-an abad ke-20 dalam arsitektur, interior dan, khususnya, desain penerima radio. Gaya ini disebut Art Deco. Di negara kita, perwakilan cemerlang dari gaya ini adalah bangunan Perpustakaan Lenin, stasiun metro Aeroport, Mayakovskaya, Krasnoselskaya (lebih tepatnya, memiliki pengaruh gaya ini). Jika kita berbicara tentang penerima (desain yang telah mereka terima dari arsitektur), maka opsi yang paling menarik adalah yang memiliki skala di atas.





Keputusan desain yang sangat menginspirasi



Tentu saja, awalnya bodi radio ini direncanakan akan dibuat dari kayu mulia, seperti receiver di atasnya. Dan bahkan sekali di sini di Habré saya bertemu dengan seorang desainer yang melakukan proyek serupa (saya tidak ingat yang mana, maaf); dan kami bahkan membuat beberapa sketsa, memikirkan proyek itu, tetapi tetap saja saya tidak berani mengambil jalan yang begitu serius, tetapi sia-sia ... Secara umum, ada banyak jenis mimpi dan keinginan yang aneh. Tapi itu semua bermuara pada kenyataan yang kejam.



Langkah pertama implementasi



Dasar dari semua radio Wi-Fi adalah tampilan pembeli. Saya memilih tampilan untuk waktu yang sangat lama, dengan bodohnya pergi berbelanja dan melihat apa yang paling saya sukai. Layar favorit saya adalah Posiflex PD-2700 . Saya berhenti di situ.





Menyalakan untuk pertama kalinya, dan menampilkan gambar di layar.



Saya menulis artikel terpisah tentang bekerja dengan tampilan ini. Anda bisa membacanya disini . Karena itu, saya tidak akan membahas prinsip pekerjaan mereka secara detail.



Router TP-Link 3020, Nokia N800 (ya, jangan heran, N800), berbagai laptop, komputer industri dari semua garis, mesin kasir, Raspberry Pi dari berbagai generasi, perangkat papan tunggal dan banyak lagi telah dicoba sebagai "otak" dari radio ini. Semuanya berbicara tentang universalitas keputusan yang dibuat. Dan ke depan, beberapa keputusan dibuat demi portabilitas, dan bukan untuk mengurangi biaya konstruksi.



Tetapi secara umum, saya tidak suka semua solusi ini, atau mereka berlebihan dalam hal kemampuan untuk tugas semacam itu, atau, sebaliknya, kinerjanya terlalu rendah dan bermasalah dengan reproduksi suara (misalnya, router). Selanjutnya, saya akan memberi tahu Anda jalur utama yang saya ikuti dalam implementasi proyek. Tidak ada cabang buntu, seperti Nokia N800 (untuk semua romansa pendekatan ini).



Prototipe kerja



Prototipe kerja pertama, yang otonom dan bahkan memainkan radio dan berdiri di dapur, saya implementasikan berdasarkan router TP-Link 3020 dan kartu suara USB Cina seharga 100 rubel. Router ini adalah hal yang hebat untuk kerajinan semacam itu, keuntungan utamanya adalah Anda dapat membeli di toko komputer terdekat, tidak seperti papan tunggal lainnya. OS utama adalah OpenWRT, suara diputar melalui speaker paling deshman, seharga 500 rubel, didukung oleh USB. Secara umum, semuanya ada di bawah. Dan itu bahkan berhasil! Singkatnya, lebih baik melihat sekali daripada membaca seribu kali.





Setelah itu, menjadi jelas bahwa cara mengontrol video dari tablet bukanlah suatu pilihan. Arti radio hilang bila Anda dapat menggunakan tablet yang sama. Oleh karena itu, saya memutuskan untuk menambahkan kontrol menggunakan encoder. Awalnya, encoder terhubung ke GPIO dari router ini (ya, ada GPIO on board), tetapi saya tidak terlalu suka pekerjaannya dan solusi ini tidak portabel, jadi di masa depan saya membuat pengontrol encoder terpisah berdasarkan arduino, yang terhubung melalui UART.







Encoder terhubung ke GPIO TP-Link 3020.



Setelah itu, stasiun radio perlu "dikonfigurasi", dan saya ingin membuatnya terlihat seperti di radio lama saat Anda memutar kenop dan penggeser berjalan melintasi layar. Untuk ini, font tongkat vertikal diimplementasikan, lima bagian. Dan saya membebani setiap waktu, membaca tentang cara mengunduh font di artikel saya . Hasilnya adalah solusi seperti itu.





Yah, tetap menyilang radio itu sendiri dengan eksperimen ini dan sebagai hasilnya kami mendapatkan kontrol yang nyaman. Dia berkata secara singkat, tetapi sebenarnya beberapa bulan telah berlalu, tetapi hasilnya penting bagi saya.





Sepertinya segalanya, tetapi seperti biasa dengan semua amatir radio teman saya - perangkat tidak memiliki kasing, dan mulai memikirkan apa yang harus dilakukan. Saya sangat terinspirasi oleh receiver vintage tahun 30-an yang terbuka, di mana hanya ada sudut dengan perisai dan pegangan, dan semua nyali gratis.





Sebuah varian dari prototipe



saya memutuskan untuk mengulanginya. Untuk melakukan ini, dia merobek kolom, mengeluarkan dimensinya dan membuat prototipe dari karton.





Saya mengeluarkan speaker, mengeluarkan amplifier dan mengukur dimensinya.



Setelah saya membongkar kolom, saya mengeluarkan amplifier dari sana, lalu saya melepas semua dimensi casing, tombol amplifier dan encoder, dan menandai semua yang ada di karton seperti yang terlihat.





Tanda-tanda ukuran Saya



pikir, bercanda, coba saya lihat tampilannya di karton, semacam prototipe karton.





Radio Cardboard



Dan bahkan berfungsi!





Kemudian dia menyalin semua dimensi, menggambar dan mengirimnya ke pemotongan laser.





Dimensi



Akrilik yang dipotong muncul setelahnya, dan beginilah tampilannya setelah dirakit.







Di panel depan ada tombol power, encoder, kenop volume. Di dalam, Anda dapat melihat bahwa ada unit catu daya independen, banyak hub, jujur ​​saja, tampilannya tidak terlalu bagus.







Seperti yang diketahui banyak orang, akrilik itu transparan. Awalnya, saya ingin menempatkan tampilan di belakangnya agar bersinar melalui itu (tampilan sudah putih, itu bersinar melalui filter hijau). Tapi saya tidak suka warna dan kontrasnya.







Di foto, ada cahaya melalui akrilik oranye, warna tampilan yang jujur ​​(dalam kehidupan nyata warnanya putih), dan filter biru dari salah satu tampilan (saya punya yang hijau di radio saya sekarang).



Desain yang dihasilkan memang keren tentunya, tapi saya tidak akan membohongi diri sendiri, tidak praktis. Tentu saja, itu berhasil dan saya bahkan mendengarkan produk ini selama beberapa waktu, tetapi sejumlah masalah terungkap. Pertama, sangat tidak mungkin untuk menggunakannya dalam bentuk ini: alat ini mengumpulkan debu, Anda tidak dapat meletakkan apapun di atasnya, ini membutuhkan banyak ruang. Kedua, TP-Link 3020 ternyata agak lemah untuk radio, dan banyak yang menghadapi masalah implementasinya. OpenWRT tidak memiliki dukungan perangkat keras untuk floating point, dan oleh karena itu mpd memuat prosesor sebesar 100% dan Anda dapat mendengarnya dalam suaranya (ada klik digital yang tidak menyenangkan). Itu, secara umum, mengakhiri implementasi seperti itu. Ditambah lagi, sejumlah keadaan dalam hidup saya tidak memungkinkan saya untuk terlibat dalam proyek ini lagi, dan radio ini dibongkar dan disimpan secara harfiah di dalam kotak.



Keputusan terakhir



Tapi jangan berpikir bahwa saya menyerah begitu saja. Tidak, idenya terus hidup. Dan sekarang, setelah beberapa saat, saya memutuskan untuk mematikan radio ini. Dan ternyata sangat bagus sehingga saya memiliki kasing yang saya beli di China. Sebagai otak, saya mengambil beaglebone black, yang saya kerjakan dalam satu proyek dan saya tahu sisi baik dan buruknya. Syal tentu saja sudah tua, tapi sangat cocok untuk tugas ini. Awalnya, saya ingin menempatkan OpenWRT sebagai OS utama, tetapi mendapat banyak masalah dengan driver Wi-Fi di sana. Saya mengambil kartu suara di PCM2704 DAC yang populer. Dia dengan mudah dicari berdasarkan permintaan ini di lelang populer, seperti syal putih. Saya sangat senang dengan kartu suara, tetapi secara umum dimungkinkan untuk menempatkan apapun, bahkan SoundBlaster.





Tahapan pembuatan prototipe, mencoba berbagai kartu suara, perangkat papan tunggal, gambar Linux, adaptor Wi-Fi, dan memilih solusi yang paling optimal



Dalam artikel terakhir saya, saya berbicara tentang menghabiskan waktu untuk memilih komponen, jika tidak, akan ada sakit kepala. Itu terjadi dengan cara yang sama, saya menginginkan kartu Wi-Fi USB berkemampuan Linux. Dan tanpa ragu dia mengambil TP-Link N150 untuk dirinya sendiri. Singkatnya, jangan lakukan ini. Dia minum banyak darah dariku, menghabiskan waktu seminggu untuknya. Di bawah OpenWRT, saya tidak bisa mendapatkannya, di Ubuntu saya memulainya dengan beberapa tarian ganas dengan rebana. Singkatnya, saya menginstalnya sesuai dengan manual ini (ada instruksi di suatu tempat di tengah). Skrip startup (/etc/rc.local) terlihat seperti ini untuk saya (setelah banyak percobaan).



#!/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
#    


Secara umum, setelah semua cobaan berat, semua ini dimulai dan semua ini dikumpulkan dan dimasukkan ke dalam gedung. Saya tidak akan menjelaskan semua detailnya, karena setiap orang pasti punya. Tetapi saya membuat busing baru untuk kaki-kaki, bagian bawahnya terbuat dari kayu lapis dari bawah dan saya menempelkan semuanya padanya. Layarnya dipasang pada bingkai kayu.





Panel depan



Semuanya dikontrol oleh encoder. Kiri-kanan - pemilihan stasiun, menekan tombol encoder - jeda; tekan sebentar dua kali pada tombol - tampilan waktu dan tanggal (bekerja seperti jam).





Panel belakang



Terlepas dari kenyataan bahwa ini sebenarnya adalah radio Wi-Fi, ia meninggalkan kemungkinan untuk terhubung melalui Ethernet untuk diagnostik dan debugging. Seperti yang Anda lihat, tidak ada amplifier dalam casing sekarang. Hanya line-out, yang menurut saya, lebih nyaman. Mari kita lihat ke dalam.







Di dalam di sebelah kiri kita melihat catu daya, di bawah adalah tampilan dalam bingkai kayu, di sebelah kanan di bagian depan terdapat encoder. Di bagian atas hub USB, tempat daya dicolokkan, layar juga diberi daya darinya, kotak suara juga dimasukkan ke hub; papan tunggal itu sendiri berdiri di sudut aluminium pada rak, disekrup ke kayu lapis. Pengontrol encoder disembunyikan di sebelah kanan, terlihat seperti ini.





Pengontrol encoder



Ini adalah arduinka umum yang dihubungkan melalui UART ke Beaglebone.



Penjelasan tentang kode sumber dan pengaturan



Saya perhatikan bahwa jika deskripsi kode ditambahkan ke artikel, maka keterbacaannya segera berkurang setengahnya. Oleh karena itu, dalam artikel ini hanya akan ada sedikit kode, meskipun dua artikel hanya dapat dikhususkan untuk deskripsi kode. Saya tidak akan menjelaskan setting dari mpd daemon, ada ribuan artikel, termasuk yang ada di Habré, dan manualnya sendiri biasanya lengkap di dalamnya. Saya akan menghilangkan penyiapan Linux di Beaglebone. Kecuali saya harus menyalakan UART untuk menghubungkan Arduino. Tapi ini juga mudah dicari di Google. Kode sumber dari seluruh proyek berada di github dan tersedia untuk semua orang.



Saya tidak akan menganalisis semua poin kode. Bekerja dengan tampilan telah dibahas sebelumnya dalam artikel. Aku akan memeriksa file-nya.



Folder arduino_encoder berisi proyek encoder arduino. Semuanya intuitif di sana dan saya tidak melihat alasan untuk mengatasinya. Di folder Linux, kode sumber radio itu sendiri, kode inilah yang mengembara dari proyek ke proyek.



  • Makefile


Ini adalah rakitan proyek itu sendiri, tidak ada yang baru di sini.



  • kontrol. c


Ini adalah program master tempat semua keajaiban terjadi.



  • uart.c
  • uart.h


Berikut adalah kode inisialisasi UART yang sudah jadi. Untuk semua orang yang bekerja pada C dengan UART di Linux, saya sarankan untuk melihat kedua file ini. Saya juga merekomendasikan semua orang yang menonton webinar saya tentang bekerja dengan UART di Linux satu atau dua kali untuk memeriksanya.



  • display.c
  • display.h
  • output.h


Seperti yang Anda duga, ini adalah kode untuk bekerja dengan tampilan. Plus, saya harus mengacaukan kode konversi karakter ke sana.



  • charset_coverter.c
  • charset_coverter.h


Layar berfungsi dalam pengkodean CP866. Dan bahkan untuk menampilkan pesan dalam bahasa Rusia dari konsol, Anda harus menggunakan trik berikut:



echo -en " \n dlinyj" | iconv -f UTF-8 -t CP866 > /dev/ttyACM0


Tapi, ada nuansa: tidak ada huruf "e", tanda keras "" dan tanda lunak "b" terbalik. Jadi setelah decoding, Anda perlu melakukan decode.



  • mpc.c
  • mpc.h


Bekerja dengan mpd daemon. Secara umum, ada perpustakaan untuk bekerja dengannya, tetapi karena saya tidak memerlukan banyak fungsi, saya memutuskan untuk menulis semuanya dari awal pada soket. Mungkin itu akan berguna bagi seseorang.



  • term.c
  • term.h


Oh, itu bagian yang hebat. Karena terkadang saya harus men-debug kode tanpa tampilan, saya menjadikan diri saya sendiri "simulator" tampilan, dengan kontrol keyboard, bukan encoder. Ini terlihat seperti ini: di gambar pertama ada tanggal dan jam, di gambar kedua ada melodi dan stasiun.









Untuk detail lebih lanjut tentang cara menulis ini, lihat artikel "Grafik Terminal" .



Menambahkan stasiun radio untuk saya adalah skrip berikut.



#! /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


Jika Anda memiliki stasiun radio streaming yang dapat Anda rekomendasikan, terutama untuk musik elektronik, tulis di komentar :)



Untuk kemudahan manajemen dan konfigurasi, saya menambahkan sendiri antarmuka web dari proyek ympd . Ini terlihat seperti ini.





Hasilnya, file /etc/rc.local pada akhirnya akan terlihat seperti ini:



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 &


Ya, ya, saya tahu bahwa di Ubuntu systemd dan rc.local buruk untuk digunakan dan lainnya bla, bla, bla. Tetapi saya menggunakannya karena saya ingin dan saya bisa.



Hasil



Tentu saja, radio itu ternyata tidak seindah dan megah seperti yang dimaksudkan semula, tapi kuputuskan bahwa seekor burung di tanganku lebih baik daripada kue di langit. Lebih baik melakukannya daripada memperpanjang kesenangan selama beberapa tahun lagi dengan hasil yang tidak jelas. Meski demikian, meski tidak memiliki, itu membuat saya sangat bahagia. Jadi apa yang harus membaca sekumpulan teks, saatnya menonton video tentang bagaimana semuanya terlihat dan berfungsi.







Videonya agak tua, sekarang antena dan Ethernet terhubung dan bahkan berfungsi dengan baik.



Di mana tumbuh?



Dan ada ruang untuk berkembang. Salah satu cabang dari proyek ini yang telah saya manfaatkan sejak lama adalah proyek Volumio . Ini adalah agregator pemain menyenangkan yang memungkinkan Anda mendengarkan stasiun radio dari seluruh dunia, streaming, dan banyak lagi. Semuanya bagus, terpasang sempurna dengan proyek saya dan menampilkan semua stasiun di layar. Kecuali kontrolnya sama sekali tidak berguna. Anda juga dapat menambahkan kontrol suara, ada proyek Rhasspy yang luar biasa , yang bahkan ada artikel di Habré. Ini memungkinkan Anda membuat kontrol suara tanpa terhubung ke server eksternal!



Satu-satunya hal yang layak untuk membuang mpd adalah kemacetannya. Jika tidak ada stasiun, dia menutup telepon menunggu. Tidak ada pra-buffering untuk stasiun lain, dll. Artinya, ada tanah untuk tumbuh. Dan topiknya sangat menarik, dengan banyak ide. Terima kasih sudah membaca!






All Articles