Мазмуну:

Retro Idiot Box: 10 кадам
Retro Idiot Box: 10 кадам

Video: Retro Idiot Box: 10 кадам

Video: Retro Idiot Box: 10 кадам
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Июль
Anonim
Retro Idiot Box
Retro Idiot Box

Мен 1984 -жылкы Magnavox көчмө сыналгысын таптым, ал жергиликтүү дүкөндүн текчесинде отурган. Мен ичимден: "О, НЕАТ!" Кийинки текшерүүдөн кийин мен анын баасы 15 доллар болгонун байкадым, ошондуктан аны үйгө алып барып, андан бир нерсе кылууну чечтим. Эсимде, мен кайталоолорду укмуштуудай кара жана ак түстөгү улуу классиктердин улагы катары көрүп, муну дагы бир жолу реалдуулукка чыгаргым келди.

Көйгөй - бул жерде аналогдук станциялар жок, жана бул ATSCтин кодун чечүүгө же санариптик декоддоого таптакыр жөндөмсүз. Мен капталда AV туташуусу бар экенин байкадым жана бир нече малина пи тегерете жатып калдым, ошондуктан мен каналды кантип агылтууну түшүнүү үчүн укмуштуу окуяны баштоону чечтим. Мен аны да курч көрсөткүм келет. Мен аны 9 D-клеткалык батареяда иштетпейм, андыктан башка жакшы нерселер менен батарейкадагы rpi жашыра алам.

1 -кадам: Жакшы IPTV тизмесин алыңыз

Жакшы IPTV тизмесин алыңыз
Жакшы IPTV тизмесин алыңыз

Күнүмдүк IPTV тизмеси өлкө тарабынан уюштурулган бекер iptv станцияларынын фантастикалык тандоосуна ээ. Тандалган өлкөнү тандап, m3u файлын жүктөп алыңыз.

Бул жерде болгон программалык камсыздоо үчүн m3u керектүү формат болуп саналат. Форматтын өзгөчөлүктөрү тууралуу бул жерден көбүрөөк окуй аласыз.

2 -кадам: Коддун алдын ала эксперименти

Биз жазган питон коду m3u файлын станциялардын тизмесине талдайт.

#!/usr/bin/python3

sys импорттоо субпроцессин argv класс бекети: def _init _ (өзүн): self.channel = 0 self.name = '' self.address = '' channel_list = ачык менен ('./ us-m3uplaylist-2020-08- 17-1. [1] линия = кийинки (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 process = subprocess. Popen (['vlc', '--loop'], '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. address])

Муну талкалап көрөлү.

#!/usr/bin/python3

Бул bash бул файлды чечмелөө үчүн python3 колдонобуз деп айтат.

sys импорттоо субпроцесси argv

Бизге vlc инстанциясын ишке киргизүү үчүн субпроцесс модулу керек болот жана vlcти кайсы каналга киргизе тургандыгыбызды тандоо үчүн argv керек болот.

класс бекети: def _init _ (өзүн): self.channel = 0 self.name = "self.address ="

Бул Station деп аталган классты аныктайт. Ар бир каналда каналдын номери, m3u файлынан алынган каналдын аталышы жана ал канал агылып жаткан дарек болот.

channel_list =

Бул m3u файлынан талданган бардык каналдарды сактай турган тизме.

open ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') менен m3u: i = 0 m3u ичиндеги линия үчүн: эгер line.startswith ('#EXTINF'): бул = станция () 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ти станциялар менен толтурат.

процесс = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. address))

subprocess китепканасы pythonго процесстерди (программаларды) чакырууга мүмкүндүк берет жана PID (Process ID) кайтарат. Бул pythonго тарых файлын толтурбастан же каалагандай кодду жалпы "системалык" чалуулар менен иштетүүгө уруксат бербестен "туура" программаларды ишке киргизүүнү жана жабууну башкарууга мүмкүнчүлүк берет. Попенге аргумент катары колдонулган массивдин ар бир элементи буйрук сабында терилгендей болот.

vlc --loop --intf dummy -fullscreen даректери

Жогорудагы буйрукту иштетүү керек, бул --loop опциясы агымды токтотуу менен кээ бир маселелерди чечет, кийинки бөлүктөр жүктөлгөндө (кызыктай m3u8 көйгөйлөрү), --intf dummy интерфейси жок эле vlcти баштайт, жөн эле экран, -толук экран видеону толук экран режиминде ишке киргизет (ЖОЛ ЖОК!), жана дарек - агымдын дареги. Коддон көрүнүп тургандай, биз даректин тизмесинин каналынын номерин беребиз, ал argv билдирүүсү аркылуу иштөө убагында берилет. Бул файлды tv_channels.py катары сактаңыз, python файлындагы ойнотмо тизменин жайгашуусун ойнотмо тизмеңизге көрсөтүү үчүн өзгөртүңүз жана кодду төмөнкүдөй иштете аласыз:

python tv_channels.py

3 -кадам: GPIO кошуу

GPIO кошуу
GPIO кошуу
GPIO кошуу
GPIO кошуу

Схемада баскычтар үчүн колдонулган эки GPIO төөнөгүчтөрү көрсөтүлгөн жана ар биринин баскычты баскандан кийин GPIO пинин бийик кармап туруу үчүн каршылыгы бар. Мурда аныкталган код GPIO мүмкүнчүлүгүн кошуу менен операцияны бир аз жакшыраак кылуу үчүн такталышы мүмкүн. Бул бизге каналды клавиатура жана argv билдирүүлөрү менен эмес, баскычтар менен алмаштырууга мүмкүндүк берет.

Белгилей кетчү нерсе, менде сыналгы класс катары аныкталган. Телевизор болуу үчүн, биз учурдагы каналда болушубуз керек, мүмкүн болгон каналдардын тизмесине ээ болуп, каналдарды өзгөртүү мүмкүнчүлүгүнө ээ болушубуз керек. Бул мисалда, каналдарды алмаштыруунун бирден -бир ыкмасы каналдардын тизмесин өйдө жылдыруу жана каналдардын тизмесин ылдый жылдыруу болот. Канал чечилгенден кийин, биз көргүбүз келген каналдан VLCди башташыбыз керек болот.

#!/usr/bin/python3

убакыттан импорттук уйку импорттук подпроцесси syp импорттон argv gpiozero импорттоо Button class Station: def _init _ (self): self.channel = 0 self.name = "self.address =" self.process = '' class Television: def _init _ (өзүн, файлдын аты): self.current_channel = 0 self.channel_list = self.build_channel_list (файлдын аты) self.start_channel () def build_channel_list (өзүн, файлдын аты): ачык (файлдын аты, 'r') менен m3u: i M3uдагы сап үчүн = 0: if line.startswith ('#EXTINF'): this = Station () this.name = line.split (',') [1] line = next (m3u) this.address = line. 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 if self.current_channel <0: self.current_channel = 0 self.start_channel () өзүн өзү баштоо_каналы (): аракет: өзүн -өзү иштетүү. kill () тышкары: pass print ('баштапкы канал % d' % self.current_channel) self.process = subprocess. Popen (['vlc', '-q', '--loop', '--intf', ' dummy ',' --fullscreen ', self.channel_list [self.current_channel].address]) this = Television ('./ 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

Бул коддун кайталанышы бир топ жакшыртууларга ээ. ал азыр GPIO казыктарынын иштөөсүнө оңой кирүү үчүн малина пи талап кылган gpiozero модулун колдонду

sudo apt-get python3-gpiozero орнотуңуз

же

sudo pip орнотуу gpiozero

Менин кодумда көрүнүп тургандай, мен GPIO 18 жана GPIO 23 каналдарын UP жана DOWN каналдарын тандадым. Gpiozero китепканасында качан басылганда, басылганда, качан басылганда, баскычтардын функциялары үчүн жакшы класс бар. Бул абдан оңой кылат. Мен качан бул сигнал табылганда иштетиле турган кайра чалуу функциясын билдирген, качан_ басылганын тандадым.

Акыркы чоң өзгөрүү -VLC чакан процессине '-q' вариантын киргизүү. Бул жөн гана vlc иштейт, аны терминалда эч кандай башаламандык болбошу үчүн, биз коддогу маалыматтык басма сөздөрдү көрө алабыз.

4 -кадам: Чукул кароо үчүн аппараттык жабдыктарды бириктирүү

Аппаратты интеграциялоо үчүн Sharp
Аппаратты интеграциялоо үчүн Sharp
Аппаратты интеграциялоо үчүн Sharp
Аппаратты интеграциялоо үчүн Sharp
Аппаратты интеграциялоо үчүн Sharp
Аппаратты интеграциялоо үчүн Sharp

Мен муну кантип ишке ашыргым келгенин түшүнгөн жокмун жана бул колдонулган телевизордун ар бир модели үчүн уникалдуу чечим болот. Мен бул жөнүндө катуу ойлонушум керек жана компьютерди чоң батарея бөлүмүнүн ичине баткандан кийин, пи үчүн жакшы энергия булагын табыш үчүн телевизордун айланасында иликтешим керек. Мен дагы канал тандоо үчүн саат баскычтарын колдонууну ойлондум, анткени алар телевизорго эң сонун жайгаштырылган жана саат баары бир иштебейт. Мен жакшы чечим тапкандан кийин көбүрөөк жазам, бирок бул жерде менин долбоорум башкалардан айырмаланат. Чыныгы ТВ сыяктуу IPTV интеграциясынан ырахат алыңыз!

5 -кадам: Pi Power

Pi Power
Pi Power

Мен тапкан ТВ модели үчүн 12В кубаттуулукту талап кылат. Мен тактанын тегерегинде иликтеп көрдүм, бирок 5В үчүн эч кандай ачык электр жөнгө салуучуларды көрө алган жокмун, ошондуктан туруктуу электр менен камсыздоонун эң ачык жери - 12В үчүн баррель туташтыргычы кирген схемада. Бул жерде ачык көйгөй бар. биз пиди куургубуз келбейт, ошондуктан бизге күч жөндөгүч керек болот. Мен MP2315 Step-Down Power Converter тандап алдым. Бул кир арзан жана колдонууга жөнөкөй. Биз PCBдеги баррель туташтыргычынан 12VDC кирүүсүн конвертердин IN+ жана GND казыктарына, VO+ Raspberry Pi'ге 2 пинге, ошондой эле GNDге ширетебиз.

Муну жасаардан мурун, конвертерди кубаттап, туура 5V өндүрүштөн чыгып жатканын текшериңиз. Мен жөнгө салынуучу чыңалуусу бар эң жөнөкөй жолду тандадым. Триммер чыңалууну жөнгө салат, ошондуктан мен триммерди отвертка менен тууралагандай эле, мультиметр менен чыңалуунун чыгышын көрдүм.

6 -кадам: Күчтү интеграциялоо

Интеграциялоочу күч
Интеграциялоочу күч
Интеграциялоочу күч
Интеграциялоочу күч
Интеграциялоочу күч
Интеграциялоочу күч

Телевизордун тегерегин казып чыккандан кийин, электр энергиясын алуу үчүн эң жакшы жер баррель коннекторунун терсинен жана ON/OFF телевизорунан экени аныкталды, башкача айтканда, биз агымдарды телевизор менен кошуп жана өчүрө алабыз. дайыма баррель туташтыргычынан тартып пи кубаттап.

Зымдар ширетилип, корпустун жанындагы ПХБнын капталында азыктандырылган, алар бирдиктин артына жеткенге чейин, алар батарея бөлүмүнүн артындагы тешик аркылуу азыктанышкан. Алар тамактангандан кийин, биз кабелдин учтарын даярдап, электр жөнгө салгычка түшүрө алабыз. Мен аны питтин кубаттуулугу үчүн 5В үчүн жөнгө салдым жана ага баштыктарды кыстарып койдум, ошондо биз күчтү жөнгө салгычтан ургаачы секирген аялдарды пионун GPIO баштыктар топтомуна иштете алабыз. Адатта, бул сунушталбайт, анткени пи жалпысынан UBS аркылуу кубат алат, анын ичинде 5В жөнгө салуучу бар, бирок бийлик буга чейин жөнгө салынып жаткандыктан, ал жакшы болушу керек.

Муну аткарууда аудио линияларда кандайдыр бир ызы -чуу бар, анткени тутумда жерге цикл бар. Мен оңой жоопту үмүт кылып, тактанын бардык жерлеринде көптөгөн күч жана негизги пункттарды сынап көрдүм, бирок тапкан жокмун. Мен ошондой эле microUSB кабелин күйгүзүлгөн режимдин жөнгө салуучусуна питтин ички жөндөгүчтөрү аркылуу мажбурлоо маселени чечээрин билгим келди. Андай болгон жок. Чечим кээ бир аудио жерди изоляциялоочу трансформаторлордо болот. Булар курулгандан көрө заказ кылынган, анткени алар арзан жана жакшы таңгакталган. Аларды көпчүлүк аудио дүкөндөрдөн же бөлүмдөрдөн алсаңыз болот. Бул мен тандаганым.

7 -кадам: Узак мөөнөттүү баскычтын чечими

Узак мөөнөттүү баскыч чечими
Узак мөөнөттүү баскыч чечими
Узак мөөнөттүү баскыч чечими
Узак мөөнөттүү баскыч чечими

Албетте, баскычтар нан тактасында калбайт, андыктан туруктуу чечим болушу керек. Мен сигналдарга жетүүнү жеңилдетүү үчүн эски протобордду кармап, кээ бир баштыктар менен бирге схеманы ыргытып жибердим. Бул жерде баскычтарды кантип бекитүү же орнотуу боюнча ар кимдин пикири ар кандай болот. Мен аларды протобоарт кылууну тандап жатам жана жөн эле аларды шассиге тиркөө үчүн экранды тегеренип турган туткасы кийлигишпейт. Дизайнды өркүндөтө турган 3d басылган кап кошуп, жаңгактарды жана болтторду, кооз желимдерди колдонуңуз, оригиналдуу баскычтарды бириктирип, дизайнды чиркөөдө эркин болуңуз. Иштеп турганда эч кандай туура эмес жооптор жок.

Алар корпустун сыртына орнотулат жана Raspberry Pi абдан кенен батарея бөлүмүнүн ичине тыгылат, андыктан кабелдердин батарея бөлүмүнө чыгышына мүмкүнчүлүк берүү үчүн кичинекей тешик болушу керек.

8 -кадам: Final Fit текшерүү

Финалдык текшерүү
Финалдык текшерүү

Бардык жабдууларды акыркы жолу текшерүү керек, тешиктердин кайсынысын шассиде жасоо керектигин жана кандай өлчөмдөгү тешиктерди ж.б. Кошумча оптималдуу туташуу жана жеткиликтүүлүк үчүн компоненттерди кайда жайгаштыруу керектигин кароо керек. Кыскача айтканда, баары сиздин оюңузга туура келгенин текшериңиз, ошондо сиз долбооруңузга орду толгус зыян келтирип, аны алып салышыңыз керек.

9 -кадам: Акыркы интеграция

Акыркы интеграция
Акыркы интеграция
Акыркы интеграция
Акыркы интеграция
Акыркы интеграция
Акыркы интеграция

Эми бардык жабдыктар керектүү жерде жана анын баары килемдеги ката сыяктуу эле ылайыктуу. Келгиле, нерселерди кесип салалы! Батарея бөлүмүндө мен пластмассадан кичинекей оюк аркылуу AV кабелдерин чыгара турган жерди аныктадым. Мен аны отургучтун жаргылчагы менен жерге түшүрдүм. Бул абдан кыска жумуш жасады. Мен пластмассаны майдалоо үчүн дремель колдондум, ал кабелдерге абдан ылайыктуу.

Акыркы компонент - каналдын селектору. Батарея бөлүмүндө кичинекей тешик жасап, баш кабелдерди бирден тартып чыгардым. Баскычтар туташтырылды, мен протоболду пластикалык шассиге алдын ала чапталган велкронун эки жарымы менен бекиттим. Мен муну кылуунун 1200гө жакын жакшы жолу бар экенин түшүндүм, бирок бул иштеди, менде керектүү нерселердин баары бар болчу.

10 -кадам: Сиздин Vintage IPTVден ырахат алыңыз

Vintage IPTVден ырахат алыңыз
Vintage IPTVден ырахат алыңыз
Vintage IPTVден ырахат алыңыз
Vintage IPTVден ырахат алыңыз
Vintage IPTVден ырахат алыңыз
Vintage IPTVден ырахат алыңыз

Бул жөнүндө жыйынтыктайт. Шоуларды табыңыз жана көрүүдөн ырахат алыңыз. Бирок, өтө жакын отурбаңыз. Мээңди чиритесиң!

Бул долбоорду өркүндөтүүгө көп орун бар, андыктан каалаган жагыңызга буруңуз, бирок буга чейин жетүү кызыктуу болду. Мен болсом, мен муну кайра жүктөөдө cronjobтон иштетем, ошондуктан stdout python скриптинен келген билдирүүлөрдү албайт. Мен муну оңдогум келет, ошондуктан мен кайсы каналда экенимди билем. Дагы бир жакшы кошумча - бул Piдеги зымсыз клавиатура. Бул сиз үйүңүздү сыналгы менен таштасаңыз, wifi тармагын өзгөртүүгө мүмкүндүк берет. Карабастан. бул кызыктуу проект болчу, мен кийинки долбоорду баштоону чыдамсыздык менен күтөм.

Сунушталууда: