Агуулгын хүснэгт:

Retro Idiot Box: 10 алхам
Retro Idiot Box: 10 алхам

Видео: Retro Idiot Box: 10 алхам

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

Би 1984 онд үйлдвэрлэсэн хуучин Magnavox зөөврийн телевизийг орон нутгийн дэлгүүрийн тавиур дээр сууж байхыг олж харсан. Би дотроо "Өө, ХЭРЭГТЭЙ!" Дахин шалгасны дараа би 15 долларын үнэтэй шошго байгааг анзаарсан тул үүнийг гэртээ авчирч, ямар нэгэн амттай зүйл хийхээр шийдэв. Гайхамшигтай хар цагаан өнгийн бүх гайхалтай сонгодог бүтээлүүдийн хүүхэд байхдаа давталтыг үзэж байснаа санаж, үүнийг дахин бодит болгохыг хүсч байсан.

Асуудал нь аналог станц байхгүй болсон бөгөөд энэ нь ATSC код тайлах эсвэл дижитал декод тайлах боломжгүй юм. Хажуу талд нь AV холболт байгааг анзаарсан бөгөөд хэд хэдэн бөөрөлзгөнө pi байрлуулж байсан тул би энэ сувгийг хэрхэн дамжуулахаа олж мэдэхийн тулд адал явдал эхлэхээр шийдлээ. Би үүнийг бас тод харагдуулахыг хүсч байна. Би үүнийг 9 D эсийн батерейгаар ажиллуулахгүй тул зайны тасалгаанд rpi-г бусад олон сайхан зүйлээр нууж болно.

Алхам 1: Сайн IPTV жагсаалт авах

Сайн IPTV жагсаалт авах
Сайн IPTV жагсаалт авах

Өдөр тутмын IPTV жагсаалт нь улс орнуудын зохион байгуулсан үнэгүй iptv станцуудын гайхалтай сонголттой. Сонгосон улсаа сонгоод m3u файлыг татаж аваарай.

Энэ програм хангамжийн хувьд m3u бол шаардлагатай формат юм. Та энд форматын онцлогийн талаар илүү ихийг уншиж болно.

Алхам 2: Кодын урьдчилсан туршилт

Бидний бичих гэж буй питон код нь m3u файлыг станцуудын жагсаалтад задлан шинжилдэг.

#!/usr/bin/python3

sys импортлох argv class-аас дэд процессыг оруулах Station: def _init _ (өөрөө): self.channel = 0 self.name = '' self.address = '' channel_list = open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') гэж m3u: i = 0 in m3u дахь мөрийн хувьд: if line.starttswith ('#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 process = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. хаяг])

Үүнийг задалж үзье.

#!/usr/bin/python3

Энэ нь bash хэлэхдээ бид энэ файлыг тайлбарлахдаа python3 -ийг ашиглах болно.

sys import 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 -ийг станцуудаар дүүргэдэг.

process = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])] хаяг)]

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

vlc --loop --intf dummy -fulldreen хаягууд

Дээрх тушаалыг ажиллуулахыг хүсч байгаа бөгөөд дараагийн хэсэг нь ачаалагдах үед (хачин 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 импортоос gviozero импортоос argv Button class Station: 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 хэлбэрээр 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 () def start_channel: оролдох: өөрөө.процесс. kill () -ээс бусад нь: pass print (' % суваг % d' % self.current_channel) self.process = subprocess. Popen (['vlc', '-q', '--loop', '--intf', ' дамми ','-fulllscreen ', self.channel_list [self.current_channel].address]) this = Телевиз ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Товч (18) channel_DN = Товч (23) үнэн байхад: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Энэ кодын давталт нь нэлээд хэдэн сайжруулалттай байдаг. энэ нь бөөрөлзгөнө пи -д шаардлагатай GPIO тээглүүрийн функцэд хялбар хандахын тулд gpiozero хэмээх модулийг ашигласан болно.

sudo apt-get python3-gpiozero суулгана уу

эсвэл

sudo pip суулгах gpiozero

Миний кодоос харахад би UP суваг болон DOWN сувгийн хувьд GPIO 18 ба GPIO 23 -ийг тус тус сонгосон. Gpiozero номын сан нь товчлуурыг дарах, дарах, дарах, барих гэх мэт товчлууруудын хувьд маш сайн ангилалтай байдаг. Би энэ дохиог илрүүлэх үед ажиллуулах буцаах функцийг хэлдэг when_pressed -ийг сонгосон.

Сүүлийн томоохон өөрчлөлт бол VLC дэд процессийн дуудлагад '-q' сонголтыг оруулах явдал юм. Энэ нь vlc -ийг терминал руу бүх гаралтгүйгээр ажиллуулж, эмх замбараагүй байдлаас ангид байлгахын тулд код дээрх мэдээллийн хэвлэлийн мэдэгдлийг харах боломжтой болно.

Алхам 4: Хурц харагдахын тулд тоног төхөөрөмжийг нэгтгэх

Хурц харагдахын тулд тоног төхөөрөмжийг нэгтгэх
Хурц харагдахын тулд тоног төхөөрөмжийг нэгтгэх
Хурц харагдахын тулд тоног төхөөрөмжийг нэгтгэх
Хурц харагдахын тулд тоног төхөөрөмжийг нэгтгэх
Хурц харагдахын тулд тоног төхөөрөмжийг нэгтгэх
Хурц харагдахын тулд тоног төхөөрөмжийг нэгтгэх

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

Алхам 5: Pi Power

Пи хүч
Пи хүч

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

Үүнийг хийхээс өмнө хөрвүүлэгчийг асааж, зохих 5V нь гаралтаас гарч байгаа эсэхийг шалгаарай. Би тохируулагдсан хүчдэл бүхий хамгийн энгийн сонголтыг сонгосон. Шүргэгч нь хүчдэлийг тохируулах болно, тиймээс би халиваар засагчийг тохируулахдаа хүчдэлийн гаралтыг мултиметрээр харсан.

Алхам 6: Эрчим хүчийг нэгтгэх

Эрчим хүчийг нэгтгэх
Эрчим хүчийг нэгтгэх
Эрчим хүчийг нэгтгэх
Эрчим хүчийг нэгтгэх
Эрчим хүчийг нэгтгэх
Эрчим хүчийг нэгтгэх

Телевизийг ухаж үзсэний дараа цахилгааныг салгах хамгийн тохиромжтой газар бол баррель холбогч ба ТВ асаах/унтраах унтраалга байх ёстой гэж шийдсэн бөгөөд энэ нь бид телевизээр дамжуулалтыг асааж, унтрааж болно гэсэн үг юм. баррель холбогчоос шууд татах замаар pi -г байнга тэжээдэг.

Утаснуудыг хайрцгийн хажууд ПХБ -ийн хажуугаар гагнаж, тэжээж, нэгжийн ар талд хүрч, зайны тасалгааны арын нүхээр тэжээв. Тэднийг хооллосны дараа бид кабелийн үзүүрийг бэлдэж, цахилгаан зохицуулагч руу гагнах боломжтой. Би 5V -ийн хүчийг тохируулж, толгойн гагнуурыг гагнуураар холбосон бөгөөд ингэснээр бид эмэгтэй зохицуулагчнаас эмэгтэй үсрэгч рүү шууд GP -ийн GPIO толгойн багц руу гүйх боломжтой болно. Үүнийг ихэвчлэн зөвлөдөггүй, учир нь pi нь ихэвчлэн 5V -ийг тохируулах зохицуулагчтай UBS -ээр дамжуулан эрчим хүч авдаг боловч хүчийг аль хэдийн зохицуулж байгаа тул энэ нь зүгээр байх ёстой.

Үүнийг хийснээс аудио шугам дээр бага зэрэг чимээ гардаг, учир нь системд газардуулгын хэлхээ байдаг. Би хялбархан хариулна гэж найдаж, бүх хүч чадал, үндэслэлийг туршиж үзсэн боловч олсонгүй. Би мөн microUSB кабелийг солигдсон горимын зохицуулагч руу гагнахдаа pi -ийн дотоод зохицуулагчийг хүчээр хүчдэлд оруулах нь асуудлыг шийдэх болно. Тэгээгүй. Шийдэл нь зарим аудио газар тусгаарлах трансформатор дээр байх болно. Эдгээр нь хямд үнэтэй, сав баглаа боодол сайтай байдаг тул барихаас илүү захиалсан байдаг. Та тэдгээрийг ихэнх авто аудио дэлгүүрүүд эсвэл хэлтсүүдээс авах боломжтой. Энэ бол миний сонгосон зүйл юм.

Алхам 7: Урт хугацааны товчлуурын шийдэл

Урт хугацааны товчлуурын шийдэл
Урт хугацааны товчлуурын шийдэл
Урт хугацааны товчлуурын шийдэл
Урт хугацааны товчлуурын шийдэл

Мэдээжийн хэрэг, товчлуурууд талхны тавцан дээр үлдэхгүй тул илүү байнгын шийдэл байх ёстой. Би хуучин протобоард барьж, дохиог хялбархан авахын тулд толгойн зүү бүхий хэлхээг шидэв. Энд товчлуурыг хэрхэн холбох, холбох талаар хүн бүр өөр өөр үзэл бодолтой байх болно. Би тэдгээрийг protoboard хийхээр сонгож, явах эд анги руу залгаад, дэлгэцийг дээгүүр нь дүүжлүүлж буй бариул нь саад болохгүй. Угсрах ажлыг хөнгөвчлөх, самар, боолт, гоёмсог цавуу хэрэглэх, анхны товчлуурыг нэгтгэх 3d хэвлэмэл хайрцаг нэмж хийснээр дизайныг өөрчлөх боломжтой. Энэ нь ажиллахад л буруу хариулт байдаггүй.

Эдгээрийг хайрцгийн гадна талд суурилуулах бөгөөд Raspberry Pi -ийг зайны зайтай өрөөнд байрлуулах тул кабелийг зайны тасалгаанаас гаргахын тулд жижиг нүх өрөмдөх шаардлагатай болно.

Алхам 8: Тохирох эцсийн шалгалт

Тохирох эцсийн шалгалт
Тохирох эцсийн шалгалт

Явах эд анги руу бүх нүхийг хаана хийх, ямар хэмжээтэй нүх гаргах шаардлагатайг олж мэдэхийн тулд бүх тоног төхөөрөмжийг хамгийн сүүлчийн удаа шалгаж үзэх шаардлагатай. Нэмж дурдахад холболт, хандалтыг оновчтой болгохын тулд бүрэлдэхүүн хэсгүүдийг хаана байрлуулахаа анхаарч үзэх хэрэгтэй. Товчхондоо, бүх зүйл таны бодож байгаа зүйлд нийцэж байгаа эсэхийг шалгаарай, төслөө нөхөж баршгүй хохирол учруулж, улмаар гадагш гарах ёстой.

Алхам 9: Эцсийн интеграцчлал

Эцсийн интеграцчлал
Эцсийн интеграцчлал
Эцсийн интеграцчлал
Эцсийн интеграцчлал
Эцсийн интеграцчлал
Эцсийн интеграцчлал

Одоо бүх тоног төхөөрөмж нь байх ёстой газартаа байгаа бөгөөд энэ нь хивсэн дээрх шиг эвтэйхэн нийцдэг. Аливаа зүйлийг хайчилж авцгаая! Би батерейны тасалгаанд хуванцар доторх жижиг ховил ашиглан AV кабелийг гадагш чиглүүлэх боломжтой газрыг олж тогтоов. Би үүнийг вандан бутлуураар нунтаглав. Энэ нь үүнийг маш богино хугацаанд хийсэн. Би дремель ашиглан илүү их хуванцарыг нунтаглаж, кабельд маш сайн тохируулж өгсөн.

Сүүлийн бүрэлдэхүүн хэсэг нь суваг сонгогч юм. Би зайны тасалгаанд жижиг нүх өрөмдөж, толгойн кабелийг нэг нэгээр нь гаргаж авав. Товчлуурууд хоорондоо холбогдсон бөгөөд би протободыг хуванцар явах эд анги дээр хоёр талт наасан наасан хилэнгээр бэхэлсэн. Үүнийг хийх 1200 орчим илүү сайн арга байсан гэж би ойлгож байна, гэхдээ энэ нь ажилласан бөгөөд надад хэрэгтэй бүх зүйл гар дээр байсан.

Алхам 10: Vintage IPTV -ээ сайхан өнгөрүүлээрэй

Vintage IPTV -ээ сайхан өнгөрүүлээрэй
Vintage IPTV -ээ сайхан өнгөрүүлээрэй
Vintage IPTV -ээ сайхан өнгөрүүлээрэй
Vintage IPTV -ээ сайхан өнгөрүүлээрэй
Vintage IPTV -ээ сайхан өнгөрүүлээрэй
Vintage IPTV -ээ сайхан өнгөрүүлээрэй

Үүнийг тоймлон хүргэж байна. Шоу хайж, хөгжилтэй үзээрэй. Гэсэн хэдий ч хэт ойрхон сууж болохгүй. Та тархиа ялзрах болно!

Энэ төслийг сайжруулах маш их орон зай байгаа тул хүссэн чиглэлээрээ аваарай, гэхдээ энэ хүртэл хүрэх нь хөгжилтэй байсан. Миний хувьд би үүнийг дахин ачаалах үед cronjob -ээс ажиллуулдаг тул stdout нь python скриптээс ирсэн мессежийг авдаггүй. Би үүнийг засахыг хүсч байна, ингэснээр би ямар суваг дээр байгааг мэдэж байна. Өөр нэг сайн нэмэлт бол Pi дээрх утасгүй гар товчлуур юм. Хэрэв та гэрээсээ зурагттай гарвал wifi сүлжээгээ өөрчлөх боломжтой болно. Үл хамааран. Энэ бол хөгжилтэй төсөл байсан бөгөөд дараагийн төслийг эхлүүлэхийг тэсэн ядан хүлээж байна.

Зөвлөмж болгож буй: