Სარჩევი:

რეტრო იდიოტური ყუთი: 10 ნაბიჯი
რეტრო იდიოტური ყუთი: 10 ნაბიჯი

ვიდეო: რეტრო იდიოტური ყუთი: 10 ნაბიჯი

ვიდეო: რეტრო იდიოტური ყუთი: 10 ნაბიჯი
ვიდეო: ლუკა და მარიამი 2024, ივლისი
Anonim
რეტრო იდიოტის ყუთი
რეტრო იდიოტის ყუთი

მე აღმოვაჩინე 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): self.channel = 0 self.name = "" self.address = "" channel_list = with 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', 'dummy', '-სრული ეკრანი', channel_list [int (argv [1])]. მისამართი])

მოდით დავამსხვრიოთ ეს.

#!/usr/bin/python3

ეს გვეუბნება bash, რომ ჩვენ გამოვიყენებთ python3 ამ ფაილის ინტერპრეტაციას.

იმპორტის ქვეპროცესები sys იმპორტი არგვ

ჩვენ დაგვჭირდება ქვეპროცესების მოდული ჩვენი vlc ინსტანციის დასაწყებად და ჩვენ გვჭირდება argv, რომ ავირჩიოთ რომელ არხზე გავუშვებთ vlc.

კლასის სადგური: def _init _ (self): self.channel = 0 self.name = "self.address ="

ეს განსაზღვრავს კლასს სახელწოდებით სადგური. თითოეულ არხს ექნება არხის ნომერი, არხის სახელი ამოღებულია m3u ფაილიდან და მისამართი საიდანაც ეს არხი გადის.

არხების სია =

ეს არის სია, რომელიც ინახავს 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– ს შემდეგი ხაზი არის ნაკადის მისამართი. არსებობს iterator "i", რომელიც ითვლის რომელი არხი რომელია. ეს მარყუჟი მეორდება მთელ m3u ფაილში და ავსებს არხების სიას სადგურებით.

process = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. მისამართი])

ქვეპროცესების ბიბლიოთეკა საშუალებას აძლევს პითონს დარეკოს პროცესები (პროგრამები) და აბრუნებს PID (პროცესის ID). ეს საშუალებას აძლევს პითონს შეეძლოს პროგრამების გაშვება და დახურვა "სწორად" ისტორიის ფაილის შევსების გარეშე, ან უფრო თვითნებური კოდის გაშვების საშუალებას ზოგადი "სისტემის" ზარებით. მასივის თითოეული ელემენტი, რომელიც გამოიყენება არგუმენტად პოპენისთვის, ისევე აკრეფილია ბრძანების სტრიქონში.

vlc -loop --intf dummy -სრული ეკრანის მისამართები

ზემოაღნიშნული ბრძანება არის ის, რისი გაშვებაც სასურველია, --loop პარამეტრი აფიქსირებს ნაკლოვანებების შეწყვეტასთან დაკავშირებულ ზოგიერთ საკითხს, ხოლო მომდევნო ნაწილის დატვირთვა (უცნაური m3u8 საკითხები), --intf dummy იწყებს vlc ინტერფეისის გარეშე, მხოლოდ ეკრანს, იწყებს ვიდეოს სრულეკრანიან რეჟიმში (არავითარ შემთხვევაში!), ხოლო მისამართი არის ნაკადის მისამართი. როგორც ხედავთ კოდში, ჩვენ ვაძლევთ მისამართს სიის არხის ნომრიდან, რომელიც მოცემულია გაშვების დროს argv განცხადების საშუალებით. შეინახეთ ეს ფაილი, როგორც tv_channels.py, შეცვალეთ პითონის ფაილში დასაკრავი სიის მდებარეობა თქვენს დასაკრავ სიაზე და მიუთითეთ კოდი შემდეგნაირად:

პითონის სატელევიზიო არხები. 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 =" "კლასი ტელევიზია: def _init _ (საკუთარი, ფაილის სახელი): self.current_channel = 0 self.channel_list = self.build_channel_list (ფაილის სახელი) self.start_channel () def build_channel_list (self, filename): ღია (ფაილის სახელი, '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 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 (self): try: self.process. kill () გარდა: print print ('დაწყებული არხი % d' % self.current_channel) self.process = subprocess. Popen (

კოდის გამეორებას საკმაოდ ბევრი გაუმჯობესება აქვს. მან ახლა გამოიყენა მოდული სახელწოდებით gpiozero, რომელიც ჟოლოს პი მოითხოვს GPIO ქინძისთავების ფუნქციონირების მოსახერხებლად

sudo apt-get დააინსტალირეთ python3-gpiozero

ან

sudo pip დააინსტალირეთ gpiozero

როგორც ჩანს ჩემს კოდში, მე ავირჩიე GPIO 18 და GPIO 23 არხის UP და არხისთვის შესაბამისად. Gpiozero ბიბლიოთეკას აქვს კარგი კლასი ღილაკების ფუნქციებისათვის, როდესაც ის არის დაჭერილი, დაჭერილი, დაცული და ა.შ. ეს საკმაოდ ამარტივებს მას. მე ავირჩიე როდესაც_დაპრესილი, რომელიც გულისხმობს უკუკავშირის ფუნქციას ამ სიგნალის გამოვლენისას გასაშვებად.

ბოლო მნიშვნელოვანი ცვლილება არის '-q' ვარიანტის ჩართვა VLC ქვეპროცესების ზარში. ეს უბრალოდ აწარმოებს vlc ტერმინალში ყველა გამომუშავების გარეშე, რათა ის არნახული იყოს, ისე რომ ჩვენ ვნახოთ ინფორმაციულ ბეჭდვით განცხადებებში კოდი.

ნაბიჯი 4: აპარატურის ინტეგრირება, რათა გამოიყურებოდეს მკვეთრი

აპარატურის ინტეგრირება მკვეთრად გამოიყურება
აპარატურის ინტეგრირება მკვეთრად გამოიყურება
აპარატურის ინტეგრირება მკვეთრად გამოიყურება
აპარატურის ინტეგრირება მკვეთრად გამოიყურება
აპარატურის ინტეგრირება, რათა გამოიყურებოდეს მკვეთრი
აპარატურის ინტეგრირება, რათა გამოიყურებოდეს მკვეთრი

მე არ გაერკვია, თუ როგორ მინდა ამის განხორციელება და ეს იქნება უნიკალური გადაწყვეტა თითოეული მოდელის ტელევიზიისათვის. მე უნდა დავფიქრდე ამაზე და ტელევიზიის ირგვლივ გამოვიკვლიო, რომ ვიპოვო კარგი ენერგიის წყარო pi- სთვის მას შემდეგ, რაც კომპიუტერს ჩავტვირთავ მასიური ბატარეის განყოფილებაში. მე ასევე განვიხილე არხის არჩევისთვის საათის ღილაკების გამოყენება, რადგან ისინი უკვე ლამაზად არის განთავსებული ტელევიზიაში და საათი მაინც არ მუშაობს. მე დავდებ უფრო მეტს, როდესაც ვიპოვი კარგ გამოსავალს, მაგრამ ეს არის ის, სადაც ჩემი პროექტი მნიშვნელოვნად განსხვავდება ყველასგან. ისიამოვნეთ რეალურ ტელევიზიის მსგავსი IPTV ინტეგრაციით!

ნაბიჯი 5: Pi Power

Pi ძალა
Pi ძალა

იმ მოდელის ტელევიზიისათვის, რომელიც მე აღმოვაჩინე, ის მოითხოვს 12V დენის წყაროს. მე გამოვიკვლიე დაფის გარშემო, მაგრამ ვერ ვნახე აშკარა დენის მარეგულირებელი 5V– ზე, ასე რომ ყველაზე აშკარა ადგილი დენის წყაროს მისაღებად არის მიკროსქემის დაფაზე, სადაც შემოდის 12 ვ ლულის კონექტორი. აქ აშკარა პრობლემაა რა ჩვენ არ გვინდა პიის გამოწვა, ამიტომ დაგვჭირდება დენის რეგულატორი. მე ავირჩიე MP2315 Step-Down Power Converter. ეს არის ჭუჭყიანი იაფი და მარტივი გამოსაყენებლად. ჩვენ შევაერთებთ 12VDC შეყვანას ლულის კონექტორიდან PCB– ზე კონვერტორის IN+ და GND ქინძისთავებზე, ხოლო VO+ - ს 2 – ზე Raspberry Pi– ზე, ასევე GND– ზე.

სანამ ეს გაკეთდება, დარწმუნდით, რომ ჩართეთ კონვერტორი და დარწმუნდით, რომ შესაბამისი 5V გამოდის გამომავალიდან. მე ავირჩიე უმარტივესი ვარიანტი მყარად მორგებული ძაბვით. ტრიმერი დაარეგულირებს ძაბვას, ამიტომ მე ვუყურე ძაბვის გამომუშავებას მულტიმეტრით, როდესაც ტრიმერს ვარეგულირებ ხრახნიანი.

ნაბიჯი 6: ძალაუფლების ინტეგრირება

ძალაუფლების ინტეგრირება
ძალაუფლების ინტეგრირება
ძალაუფლების ინტეგრირება
ძალაუფლების ინტეგრირება
ძალაუფლების ინტეგრირება
ძალაუფლების ინტეგრირება

ტელევიზიის ირგვლივ გადახედვის შემდეგ, გადაწყდა, რომ ძალაუფლების მოსაპოვებლად საუკეთესო ადგილი იყო ლულის კონექტორის ნეგატივიდან და ტელევიზიის ჩართვა/გამორთვა, რაც იმას ნიშნავს, რომ ჩვენ შეგვიძლია ტელევიზიის საშუალებით ნაკადების ჩართვა და გამორთვა. მუდმივად აძლიერებს pi- ს პირდაპირ ლულის კონექტორიდან გაყვანის გზით.

მავთულები იყო ჩასმული და იკვებებოდნენ PCB– ის გვერდით საქმის გვერდით, სანამ არ მიაღწევდნენ განყოფილების უკანა ნაწილს, სადაც იკვებებოდნენ ხვრელიდან, რომელიც იყო ბატარეის განყოფილების უკანა ნაწილში. მას შემდეგ რაც ისინი იკვებებოდნენ, ჩვენ შეგვიძლია მოვამზადოთ კაბელის ბოლოები და შევაერთოთ ისინი დენის მარეგულირებელთან. მე დაარეგულირე ის 5V- ზე, pi- ს გასაძლიერებლად და შევაერთე სათაურის ქინძისთავები ისე, რომ ჩვენ შეგვიძლია გავუშვათ მდედრობითი სქესის მხტუნავები დენის მარეგულირებელიდან პირდაპირ pi- ს GPIO სათაურის ნაკრებში. ეს ჩვეულებრივ არ არის რეკომენდებული, რადგან pi ზოგადად იღებს ენერგიას UBS– ის საშუალებით, რომელსაც აქვს მარეგულირებელი 5V– ის განმუხტვის მიზნით, მაგრამ რადგან სიმძლავრე უკვე რეგულირდება, ის კარგად უნდა იყოს.

აუდიო ხაზებზე არის გარკვეული ხმაური ამის გაკეთების გამო, რადგან სისტემაში არის მარყუჟის მარყუჟი. მე ვცადე ბევრი ძალა და საფუძველი მთელს დაფაზე, მარტივი პასუხის იმედით, მაგრამ ვერ ვიპოვე. მე ასევე შევაერთე microUSB კაბელი გადართული რეჟიმის მარეგულირებელს, რათა დაენახა, თუ არა Pi- ს შიდა რეგულატორების მეშვეობით ძალის დაძაბვა საკითხს. ეს არ იყო. გამოსავალი იქნება აუდიო მიწის იზოლაციის ტრანსფორმატორებში. ისინი შეკვეთილი იყო ვიდრე აშენებული, რადგან ისინი იაფი და ლამაზად შეფუთულია. თქვენ შეგიძლიათ აიღოთ ისინი ავტო აუდიო მაღაზიების ან განყოფილებების უმეტესობიდან. ეს არის ის, რაც მე ავირჩიე.

ნაბიჯი 7: გრძელვადიანი ღილაკის გადაწყვეტა

გრძელვადიანი ღილაკის გადაწყვეტა
გრძელვადიანი ღილაკის გადაწყვეტა
გრძელვადიანი ღილაკის გადაწყვეტა
გრძელვადიანი ღილაკის გადაწყვეტა

ეჭვგარეშეა, რომ ღილაკები არ დარჩება პურის დაფაზე, ამიტომ უნდა იყოს უფრო მუდმივი გამოსავალი. მე ავიღე ძველი პროტობორდი და გადავაგდე სქემა სათაურის რამდენიმე ქინძისთავთან ერთად, რათა სიგნალებზე წვდომა გაადვილდეს. ეს არის ის, სადაც ყველას ექნება განსხვავებული აზრი იმის შესახებ, თუ როგორ უნდა დაერთოს ან დაამონტაჟოს ღილაკები. მე ვირჩევ მათ პროტობორდს და უბრალოდ ვამაგრებ მათ შასზე ისე, რომ სახელური, რომელიც ეკრანზე ტრიალებს, არ შეუშალოს ხელი. თავისუფლად გააფორმეთ დიზაინი 3d ნაბეჭდი ქეისის დამატებით, რომელიც ამარტივებს მონტაჟს, გამოიყენეთ თხილი და ჭანჭიკები, ლამაზი წებოები, ორიგინალური ღილაკების ინტეგრირება, რაც არ უნდა იყოს. სანამ ის მუშაობს, არ არსებობს არასწორი პასუხები.

ისინი დამონტაჟებული იქნება გარედან და Raspberry Pi ჩაეფლო ძალიან დიდი ზომის ბატარეის განყოფილებაში, ასე რომ საჭიროა პატარა ხვრელის გაბურღვა, რათა კაბელებმა შეძლონ ბატარეის განყოფილების გასვლა.

ნაბიჯი 8: საბოლოო მორგების შემოწმება

საბოლოო მორგების შემოწმება
საბოლოო მორგების შემოწმება

ყველა აღჭურვილობა უნდა შემოწმდეს ბოლოჯერ ზუსტად იმის სანახავად, თუ სად უნდა გაკეთდეს ყველა ხვრელი შასისკენ და რა ზომის ხვრელები და ა.შ. გარდა ამისა, გასათვალისწინებელია სად უნდა განთავსდეს კომპონენტები კავშირისა და წვდომის ოპტიმალური სიმარტივისთვის. მოკლედ რომ ვთქვათ, დარწმუნდით, რომ ყველაფერი ჯდება იქ, სადაც თქვენ ფიქრობთ, სანამ თქვენ გამოუსწორებლად დააზიანებთ თქვენს პროექტს და მოგიწევთ ნაწილის ამოღება.

ნაბიჯი 9: საბოლოო ინტეგრაცია

საბოლოო ინტეგრაცია
საბოლოო ინტეგრაცია
საბოლოო ინტეგრაცია
საბოლოო ინტეგრაცია
საბოლოო ინტეგრაცია
საბოლოო ინტეგრაცია

ახლა ყველა ტექნიკა არის იქ, სადაც უნდა იყოს და ეს ყველაფერი ისევე ჯდება, როგორც ხალიჩაზე არსებული შეცდომა. მოდით დავჭრათ ნივთები! ბატარეის განყოფილებაში გამოვყავი ადგილი, სადაც შემეძლო გამეყვანა AV კაბელები პლასტმასის მცირე ჩაღრმავების გამოყენებით. მე დავამწვანე ის ქვემოთ სკამზე საფქვავი. მან საკმაოდ მოკლე სამუშაო გააკეთა. მე გამოვიყენე დრემელი პლასტმასის დასაქუცმაცებლად, რათა ის საკმაოდ კარგად მოერგო კაბელებს.

ბოლო კომპონენტი არის არხის ამომრჩევი. ბატარეის განყოფილებაში გავხსენი პატარა ხვრელი და სათითაოდ გამოვართვი სათაურის კაბელები. ღილაკები ერთმანეთთან იყო დაკავშირებული და მე დავამატე პროტობორდი პლასტმასის შასიზე, წებოვანი ხავერდის ორი ნახევრით. მე მესმის, რომ ამის გაკეთების დაახლოებით 1200 უკეთესი გზა იყო, მაგრამ ეს მუშაობდა და მე მქონდა ყველაფერი რაც მჭირდებოდა ხელთ.

ნაბიჯი 10: ისიამოვნეთ თქვენი რთველი IPTV

ისიამოვნეთ თქვენი რთველი IPTV– ით
ისიამოვნეთ თქვენი რთველი IPTV– ით
ისიამოვნეთ თქვენი რთველი IPTV– ით
ისიამოვნეთ თქვენი რთველი IPTV– ით
ისიამოვნეთ თქვენი რთველი IPTV– ით
ისიამოვნეთ თქვენი რთველი IPTV– ით

ეს დაახლოებით აჯამებს. იპოვეთ შოუები და გაერთეთ ყურებით. თუმცა ნუ დაჯდები ძალიან ახლოს. ტვინს გაგიფუჭებ!

ამ პროექტის გასაუმჯობესებლად ბევრი ადგილია, ასე რომ წაიღეთ ის რაც გსურთ, მაგრამ სახალისო იყო აქამდე წასვლა. რაც შეეხება მე, მე ამას ვუშვებ გადატვირთვისას cronjob– დან, ასე რომ stdout არ იღებს შეტყობინებებს პითონის სკრიპტიდან. ამის გამოსწორება მინდა რომ ვიცოდე რომელ არხზე ვარ. კიდევ ერთი კარგი დამატება არის უკაბელო კლავიატურის დონლე Pi- ზე. ეს საშუალებას მოგცემთ შეცვალოთ wifi ქსელი, თუ სახლს დატოვებთ ტელევიზიით. მიუხედავად იმისა. ეს იყო სახალისო პროექტი და მე არ შემიძლია დაველოდო, რომ დავიწყო შემდეგი.

გირჩევთ: