Съдържание:

Ретро идиотска кутия: 10 стъпки
Ретро идиотска кутия: 10 стъпки

Видео: Ретро идиотска кутия: 10 стъпки

Видео: Ретро идиотска кутия: 10 стъпки
Видео: Динко Вълев иска да вкара Стоян Колев в багажника 2024, Ноември
Anonim
Ретро идиотска кутия
Ретро идиотска кутия

Намерих стар преносим телевизор Magnavox от 1984 г., седнал на рафт в местния магазин за спестявания. Помислих си: "О, СТРАХОТНО!" При по -нататъшна проверка забелязах цената от 15 долара, затова реших да го занеса вкъщи и да направя нещо надуто от него. Спомням си, че гледах повторения като дете на всички велики класици в славно черно и бяло и исках да превърна това в реалност отново.

Проблемът е, че там вече няма аналогови станции и това е напълно неспособно да извършва ATSC декодиране или цифрово декодиране. Забелязах наличието на AV връзка отстрани и имах няколко малинови пи около себе си, затова реших да се впусна в приключение, за да разбера как мога да предавам канали към това. Искам да го направя и остър. Няма да го пускам на 9 D-клетъчни батерии, така че мога да скрия rpi в отделението за батерии с множество други екстри.

Стъпка 1: Вземете добър IPTV списък

Вземете добър IPTV списък
Вземете добър IPTV списък

Daily IPTV List има фантастична селекция от безплатни iptv станции, организирани по държави. Изберете държавата по избор и изтеглете файла m3u.

За софтуера, който е в това, m3u е необходим формат. Можете да прочетете повече за спецификата на формата тук.

Стъпка 2: Предварителен експеримент с код

Кодът на python, който ще напишем, анализира m3u файла в списък със станции.

#!/usr/bin/python3

импортиране на подпроцес от sys импортиране на клас argv Станция: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = с open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') като m3u: i = 0 за линия в m3u: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] ред = следващ (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 process = subprocess. Popen (['vlc', '--loop', '--intf', 'манекен', '--fullscreen', channel_list [int (argv [1])]. адрес])

Нека разбием това.

#!/usr/bin/python3

Това казва на bash, че ще използваме python3 за интерпретация на този файл.

импортиране на подпроцес от sys внос argv

Ще се нуждаем от модула на подпроцеса, за да стартираме нашия vlc екземпляр, и ще ни трябва argv, за да изберем в кой канал ще стартираме vlc.

class Station: def _init _ (self): self.channel = 0 self.name = "self.address ="

Това определя клас, наречен Station. Всеки канал ще има номер на канал, името на канала, взето от m3u файла, и адрес, откъдето този канал предава поточно.

channel_list =

Това е списък, който ще съхранява всички канали, анализирани от m3u файла.

с отворен ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') като m3u: i = 0 за линия в m3u: if line.startswith ('#EXTINF'): this = Station () this.name = line.split (',') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1

Този цикъл отваря m3u плейлиста и поглъща данните. файловите редове m3u, които ни интересуват, започват с #EXTINF, Това показва нов запис във файла на плейлиста. Следващата стойност на интерес е името, което е на същия ред като #EXTINF, но със запетая между тях. Следващият ред на този конкретен m3u е адресът на потока. Използва се итератор "i" за преброяване кой канал е кой. Този цикъл повтаря целия m3u файл и запълва channel_list с станции.

process = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. адрес])

библиотеката на подпроцесите позволява на python да извиква процеси (програми) и връща PID (идентификатор на процес). Това позволява на python да може да управлява стартирането и затварянето на програми „правилно“, без да попълва файла с историята, или да позволява да се изпълнява по -произволен код с общи „системни“извиквания. Всеки елемент от масива, използван като аргумент за Popen, е въведен в командния ред.

vlc --loop --intf манекен -пълноекранни адреси

Горната команда е това, което се желае да бъде изпълнено, като опцията --loop коригира някои проблеми с пауза на потока, докато се зареждат следващите парчета (странни проблеми с m3u8), --intf dummy стартира vlc без интерфейс, само екран, --fullscreen стартира видеоклипа в режим на цял екран (NO WAY!), а адресът е адресът на потока. Както можете да видите в кода, ние предоставяме адреса от номера на канала в списъка, който се предоставя по време на изпълнение чрез оператора argv. Запазете този файл като tv_channels.py, променете местоположението на плейлиста във файла python, за да сочи към вашия плейлист, и можете да стартирате кода, както следва:

python tv_channels.py

Стъпка 3: Добавете GPIO

Добавете GPIO
Добавете GPIO
Добавете GPIO
Добавете GPIO

Схемата показва двата GPIO пина, използвани за бутоните, и всеки от тях има издърпващ се резистор, за да държи GPIO щифта високо издърпан след натискане на бутона. Дефинираният по -рано код може да бъде усъвършенстван, за да направи операцията малко по -безпроблемна, като добави GPIO възможност. Това ни позволява да сменим канала с бутони, а не с клавиатура и argv изявления, точно като телевизия за реални версии.

Първото нещо, което трябва да се отбележи, е, че телевизията съм определена като клас. За да бъдем телевизия, трябва да сме на текущ канал, да имаме списък с възможни канали и да имаме възможност да променяме каналите. В този пример единственият метод за смяна на канали ще бъде преместването на списъка с канали нагоре и списъка с канали надолу. След като каналът бъде решен, ще трябва да стартираме VLC на канала, който искаме да видим.

#!/usr/bin/python3

от време импортиране подпроцес за импортиране от sys импортиране argv от gpiozero импортиране Бутон клас Станция: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Телевизия: def _init _ (себе си, име на файл): self.current_channel = 0 self.channel_list = self.build_channel_list (име на файл) self.start_channel () def build_channel_list (себе си, име на файл): с отворен (име на файл, 'r') като m3u: i = 0 за ред в m3u: if line.startswith ('#EXTINF'): this = Station () this.name = line.split (',') [1] ред = следващ (m3u) this.address = ред. strip () this.channel = i self.channel_list.append (this) i = i + 1 def channel_up (self): self.current_channel = self.current_channel + 1 if self.current_channel> len (self.channel_list): self. current_channel = len (self.channel_list) self.start_channel () def channel_down (self): self.current_channel = self.current_channel - 1 ако self.current_channel <0: self.current_channel = 0 self.start_channel () def start_channel (self): try: self.process. kill () освен: pass print ('начален канал % d' % self.current_channel) self.process = подпроцес. Popen (['vlc', '-q', '--loop', '--intf', ' манекен ',' --fullscreen ', self.channel_list [self.current_channel]. адрес]) this = Телевизия ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Button (18) channel_DN = Бутон (23), докато True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Тази итерация на кода има доста подобрения. сега той използва модул, наречен gpiozero, който се изисква от малинов pi за лесен достъп до функционалността на GPIO пиновете

sudo apt-get install python3-gpiozero

или

sudo pip инсталирате gpiozero

Както се вижда в моя код, аз избрах GPIO 18 и GPIO 23 за канал UP и съответно НАДОЛУ. Библиотеката на gpiozero има хубав клас за функции на бутони за when_pressed, is_pressed, when_held и т.н. Това го прави доста лесно. Избрах when_pressed, който се отнася до функция за обратно повикване, която да се изпълнява, когато този сигнал бъде открит.

Последната голяма промяна е включването на опцията '-q' в извикването на подпроцеса VLC. Това просто изпълнява vlc без целия изход към терминала, за да го предпази от претрупвания, така че да можем да видим информационните отпечатъци в кода.

Стъпка 4: Интегрирайте хардуера, за да изглеждате рязко

Интегрирайте хардуера, за да изглеждате рязко
Интегрирайте хардуера, за да изглеждате рязко
Интегрирайте хардуера, за да изглеждате рязко
Интегрирайте хардуера, за да изглеждате рязко
Интегрирайте хардуера, за да изглеждате рязко
Интегрирайте хардуера, за да изглеждате рязко

Не съм разбрал как искам да постигна това и това ще бъде уникално решение за всеки модел телевизор, който се използва. Трябва да помисля добре за това и да се докосна до телевизора, за да намеря добър източник на захранване за pi, след като натъпча компютъра в масивното отделение за батерии. Обмислял съм и използването на бутоните на часовника за избор на канал, тъй като те вече са красиво разположени на телевизора и часовникът така или иначе не работи. Ще публикувам повече, когато намеря добро решение, но тук Моят проект ще се различава значително от този на всички останали. Насладете се на истинска телевизионна интеграция на IPTV!

Стъпка 5: Pi Power

Pi Power
Pi Power

За модела телевизор, който намерих, той изисква 12V захранване. Опитах се около платката, но не видях никакви очевидни регулатори на мощността за 5V, така че най -очевидното място за стабилно захранване е на платката, където влиза конекторът на цевта за 12V. Има очевиден проблем с това. не искаме да пържим пи, затова ще ни трябва регулатор на мощността. Избрах понижаващ преобразувател на мощност MP2315. Той е евтин и лесен за използване. Ще запояваме 12VDC входа от съединителя на цевта на печатната платка към IN+ и GND щифтовете на преобразувателя и VO+ към пин 2 на Raspberry Pi, както и GND.

ПРЕДИ да направите това, не забравяйте да включите преобразувателя и да се уверите, че правилното 5V излиза от изхода. Избрах най -простия вариант с хардуерно регулируемо напрежение. Тримерът ще регулира напрежението, така че наблюдавах изходното напрежение с мултицет, докато настройвах тримера с отвертка.

Стъпка 6: Интегриране на захранването

Интегрираща мощност
Интегрираща мощност
Интегрираща мощност
Интегрираща мощност
Интегрираща мощност
Интегрираща мощност

След като се разрових из телевизора, беше решено, че най -доброто място за захранване е от минуса на конектора на цевта и превключвателя за включване/изключване на телевизора, което означава, че можем да включваме и изключваме потоците с телевизора, а не постоянно захранване на pi чрез издърпване директно от конектора на цевта.

Проводниците бяха запоени и захранени отстрани на печатната платка до кутията, докато стигнат до задната част на устройството, където бяха подадени през отвор, който беше в задната част на отделението за батерии. След като бъдат подадени, можем да подготвим краищата на кабелите и да ги запояваме до регулатора на мощността. Настроих го за 5V, за да захранвам pi и запоявам щифтове към него, така че да можем да пускаме джъмпери от женски към женски от регулатора на мощността директно към комплекта за заглавия на GP на pi. Обикновено това не се препоръчва, тъй като pi обикновено получава захранване чрез UBS, който има вграден регулатор за кондициониране на 5V, но тъй като мощността вече се регулира, трябва да е наред.

Има някакъв шум по аудио линиите от това, защото има заземен контур в системата. Опитах много точки за захранване и заземяване по цялата дъска, надявайки се на лесен отговор, но не намерих. Запоявах и microUSB кабел към регулатора с превключен режим, за да видя дали принуждаването на захранването през вътрешните регулатори на pi ще реши проблема. Не го направи. Решението ще бъде в някои аудиозаземяващи изолационни трансформатори. Те бяха поръчани, а не построени, защото са евтини и добре опаковани. Можете да ги вземете от повечето аудио магазини или отдели. Това избрах аз.

Стъпка 7: Решение за дългосрочен бутон

Решение за дългосрочни бутони
Решение за дългосрочни бутони
Решение за дългосрочни бутони
Решение за дългосрочни бутони

Несъмнено бутоните няма да останат на макет, така че трябва да има по -трайно решение. Взех някоя стара протоборд и хвърлих веригата заедно с някои щифтове за заглавки, за да улесня достъпа до сигналите. Тук всеки ще има различно мнение за това как да прикрепите или монтирате бутоните. Избирам да ги протоборирам и просто да ги прикрепя към шасито, така че дръжката, която се люлее над екрана за носене, не пречи. Не се колебайте да подобрите дизайна, като добавите 3D отпечатан калъф, който изглажда монтажа, използвайте гайки и болтове, луксозни лепила, интегрирайте оригинални бутони, каквото и да е. Докато работи, няма грешни отговори.

Те ще бъдат монтирани от външната страна на кутията, а Raspberry Pi ще бъде пъхнат в много просторното отделение за батерии, така че ще трябва да има пробит малък отвор, за да позволи на кабелите да излязат от отделението за батерии.

Стъпка 8: Окончателна проверка на годността

Окончателна проверка на годността
Окончателна проверка на годността

Цялото оборудване трябва да бъде проверено за последен път, за да се види къде точно трябва да се направят всички отвори на шасито и какъв размер трябва да бъдат направени. Освен това трябва да се обмисли къде да се поставят компонентите за оптимално улесняване на свързаността и достъпа. Накратко, уверете се, че всичко се вписва там, където смятате, че прави, преди да нанесете непоправими щети на проекта си и да се наложи да го извадите.

Стъпка 9: Окончателна интеграция

Окончателна интеграция
Окончателна интеграция
Окончателна интеграция
Окончателна интеграция
Окончателна интеграция
Окончателна интеграция

Сега целият хардуер е там, където трябва да бъде, и всичко се вписва също толкова плътно, колкото грешка в килим. Да режем нещата! Определих място в отделението за батерии, където мога да прокарам AV кабелите, като използвам малка вдлъбнатина в пластмасата. Смелих го с пейка. Това направи доста кратка работа. Използвах дремел, за да смила повече пластмаса, за да стане доста подходящ за кабелите.

Последният компонент е каналът за избор. Пробих малка дупка в отделението за батериите и извадих кабелите на заглавката един по един. Бутоните бяха свързани и аз прикрепих протоборда към пластмасовото шаси с две половини предварително залепено велкро. Разбрах, че имаше около 1200 по -добри начина да направя това, но това работеше и имах всичко необходимо.

Стъпка 10: Насладете се на вашата реколта IPTV

Насладете се на вашата реколта IPTV
Насладете се на вашата реколта IPTV
Насладете се на вашата реколта IPTV
Насладете се на вашата реколта IPTV
Насладете се на вашата реколта IPTV
Насладете се на вашата реколта IPTV

Това приблизително обобщава. Намерете предавания и се забавлявайте да гледате. Не сядайте прекалено близо обаче. Ще разваляш мозъка си!

Има много място за подобряване на този проект, така че го вземете в каквато посока искате, но беше забавно да стигнете дотук. Що се отнася до мен, изпълнявам това от cronjob при рестартиране, така че stdout не улавя съобщенията от скрипта на python. Искам да поправя това, за да знам на кой канал съм. Друго добро допълнение е безжичната клавиатурна ключалка на Pi. Това ще ви позволи да промените wifi мрежата, ако напуснете къщата си с телевизора. Независимо от това. беше забавен проект и нямам търпение да започна следващия.

Препоръчано: