Სარჩევი:
- ნაბიჯი 1: მე ვთვლი, რომ თქვენ უკვე გაქვთ OpenWrt…
- ნაბიჯი 2: პროგრამული უზრუნველყოფა და ინსტრუმენტები
- ნაბიჯი 3: შექმენით მინიმალური აპლიკაცია
- ნაბიჯი 4: ინფორმაციის დამატება: კლიენტების რაოდენობა, WAN IP მისამართი, დრო
- ნაბიჯი 5: WiFi კონტროლი: ON/OFF
- ნაბიჯი 6: სისტემის სტატისტიკის სქემა
- ნაბიჯი 7: მყარი დისკის დაწნული სტატუსი
- ნაბიჯი 8: ქსელის აქტივობის სქემა
- ნაბიჯი 9: შეტყობინებები
- ნაბიჯი 10: ავტომატური გაშვება ფონზე
- ნაბიჯი 11: დასკვნა და შემდგომი იდეები
ვიდეო: Android/iOS აპლიკაცია თქვენს OpenWrt როუტერზე დისტანციურად წვდომისათვის: 11 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
ახლახანს შევიძინე ახალი როუტერი (Xiaomi Mi Router 3G). და რა თქმა უნდა, ამ ახალმა, გასაოცარმა ტექნიკამ შთააგონა, რომ დავიწყე ამ პროექტზე მუშაობა;)
ნაბიჯი 1: მე ვთვლი, რომ თქვენ უკვე გაქვთ OpenWrt…
ჯერ უნდა დამეყენებინა OpenWrt… ძირითადად, მე მივყვებოდი ამ სახელმძღვანელოს (სპეციფიკური ამ როუტერის მოდელისთვის): https://dzone.com/articles/hacking-into-xiaomi-mi-… ამაზე მუშაობისას ვიპოვე ეს გასაოცარი ვიდეო: Openwrt ინსტალაცია, WiFi საორიენტაციო ნიშანი, შეყვარებულის მოციმციმე. ვაიმე მე მაგრად ვიცინე!:)
ყურადღება! OpenWrt– ის ინსტალაციამ შეიძლება გააძლიეროს თქვენი როუტერი. დასრულების შემდეგ, ის იხსნის სრულ ძალასა და კონტროლს. მე არ ვარ საკმარისად მამაცი, რომ რაიმე ინსტრუქცია მოგაწოდოთ აქ, რადგან ისინი შეიძლება განსხვავებული იყოს თითოეული როუტერის მოდელისთვის.
მაგრამ თუ თქვენ უკვე გაქვთ OpenWrt თქვენს როუტერზე, თქვენ შეძლებთ ამ გაკვეთილის დაწყებას ნოემბერში
BTW, ზოგიერთი განვითარების დაფა მოყვება OpenWrt ყუთს, როგორიცაა ხახვი ომეგა, VoCore, LinkIt Smart 7688 და სხვა. ეს გაკვეთილი ასევე განმარტავს რამდენიმე ძირითად იდეას ასეთი პროგრამების შექმნის უკან, ასე რომ თქვენ შეგიძლიათ მარტივად მოარგოთ იგი ჟოლოს პითან და მის მსგავსებთან მუშაობისთვის.
ამ პროექტისთვის მე ძირითადად ვიყენებ წინასწარ დაინსტალირებულ პროგრამულ უზრუნველყოფას (ხელმისაწვდომია OpenWrt ჩართული ნებისმიერი როუტერით). მაგრამ ზოგიერთი მოწინავე ფუნქციონირებისთვის, მე მომიწია დამატებითი პაკეტების დაყენება. ეს კეთდება მხოლოდ რამდენიმე დაწკაპუნებით, ასე რომ, მე დავამატებ ინსტრუქციებს აქ.
ასევე, მე ვვარაუდობ, რომ თქვენ უკვე იცით:
- როგორ გახსნათ/გამოიყენოთ SSH ტერმინალი თქვენს OpenWrt როუტერზე
- როგორ ატვირთოთ/შეცვალოთ ფაილები თქვენს როუტერზე (გამოიყენეთ FileZilla ან scp/sftp)
- როგორ ვიმუშაოთ Linux კონსოლთან
ნაბიჯი 2: პროგრამული უზრუნველყოფა და ინსტრუმენტები
სმარტფონის მხრივ, მე ვიყენებ ბლინკს. ის უზრუნველყოფს iOS და Android პროგრამებს ნებისმიერი ტექნიკის გასაკონტროლებლად. თქვენ მარტივად შეგიძლიათ შექმნათ ულამაზესი გრაფიკული ინტერფეისები თქვენი ყველა პროექტისთვის, ვიჯეტების უბრალოდ გადაადგილებით და ჩამოშვებით, პირდაპირ თქვენს სმარტფონზე. Blynk ძირითადად გამოიყენება Arduino– სთან, Raspberry Pi– სთან და ა.შ. მაგრამ რატომ არ გაუშვით ის თავად როუტერზე?;)
მოწყობილობის მხრივ მე გამოვიყენებ ლუას საჭირო ფუნქციონირების სკრიპტირებისთვის. ასევე შემიძლია გამოვიყენო Python ან Node.js, მაგრამ სამწუხაროდ ეს პარამეტრები ყოველთვის არ არის ხელმისაწვდომი, ზოგიერთ მარშრუტიზატორზე რესურსების ნაკლებობის გამო. ან C/C ++, მაგრამ მასთან მუშაობა არც ისე მოსახერხებელია (ყოველი ცვლილების გადაფორმება და ა.შ.) მეორეს მხრივ, ლუა წინასწარ არის დაინსტალირებული, მისი გამოყენება და სწავლა მარტივია. იგი გამოიყენება ნაგულისხმევი ვებ ინტერფეისით, LuCI.
ნაბიჯი 3: შექმენით მინიმალური აპლიკაცია
ბლინკთან და ლუასთან დაწყება ისეთივე ადვილია, როგორც:
- ჩამოტვირთეთ ბლინკის აპლიკაცია (App Store– დან, Google Play– დან)
- შექმენით ახალი პროექტი და მიიღეთ Auth Token
- მიჰყევით ბლინკ ლუას ინსტალაციის ინსტრუქციას OpenWrt– ისთვის.
გამოიყენეთ SSH როუტერის კონსოლზე წვდომისათვის. ნაგულისხმევი მაგალითის გაშვების შემდეგ:
lua./example/client.lua
ჩვენ უნდა ვნახოთ მსგავსი რამ:
დაკავშირება…
SSL ხელის ჩამორთმევა … მზადაა.
რაც იმას ნიშნავს, რომ აპთან უსაფრთხო, ორმხრივი კავშირი დამყარებულია! დიახ!
ჩვენ ახლა შეგვიძლია მარტივად განვავრცოთ მოწოდებული მაგალითი, ასე რომ ის აკეთებს რაიმე საინტერესოს. მე შევქმენი ამ მაგალითის ასლი მის შესწორებაზე:
cp./examples/client.lua./blynkmon.lua
ნაბიჯი 4: ინფორმაციის დამატება: კლიენტების რაოდენობა, WAN IP მისამართი, დრო
ძირითადი იდეა არის პერიოდულად მიიღოთ ინფორმაცია ოპერაციული სისტემის სისტემიდან, საჭიროების შემთხვევაში შეასრულოთ რამდენიმე მარტივი გამოთვლა და შემდეგ შედეგი გამოაგზავნოთ ბლინკში საჩვენებლად.
Linux/OpenWrt– ში ჩვენ გვაქვს სისტემის მონაცემების მიღების რამდენიმე გზა:
- გაუშვით ბრძანება და გააანალიზეთ მისი გამომავალი ტექსტი
- გაუშვით ბრძანება და უყურეთ გასვლის კოდს, რომელიც ბრუნდება
- წაიკითხეთ სისტემის ფაილი, რომელიც მდებარეობს/proc/და/sys/class/დირექტორიებში
ახლა მინდა აჩვენო დაკავშირებული მოწყობილობების რაოდენობა.
როდესაც ვუშვებ cat/proc/net/arp კონსოლზე, ის გამოაქვს ცნობილი მოწყობილობების ჩამონათვალს, მათ MAC და IP მისამართებთან ერთად:
IP მისამართი HW ტიპი დროშები HW მისამართი ნიღაბი მოწყობილობა
192.168.10.206 0x1 0x2 78: 02: f8: fb: d6: bf * br-lan 194.---------- 0x1 0x2 4c: 5e: 0c: 14: e0: 5c * eth0.2 192.168.10.162 0x1 0x0 04: b1: 67: 2f: e3: 74 * br-lan
ჩვენ შეგვიძლია გავაანალიზოთ ის პირდაპირ ლუაში, მაგრამ ხშირად ადვილია სპეციალიზირებული კომუნალური პროგრამების გამოყენება. Linux– ზე ეს არის grep, head, tail, cut, wc, awk.
კლიენტების რაოდენობის მისაღებად arp გამომავალიდან, მე უნდა გავფილტრო ცხრილი (ამოიღო დაუკავშირებელი ერთეულები) და დავთვალო ცხრილის რიგები, რასაც მოჰყვება შემდეგი ბრძანება:
კატა/პროკი/ქსელი/არპი | grep br-lan | grep 0x2 | wc -l
Მოდი ვცადოთ:
root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
დიდი ჩვენ ახლა მივიღეთ იდეა, თუ როგორ შეგვიძლია შევაგროვოთ ყველა საჭირო ინფორმაცია. მოდით ავტომატიზირება. იმისათვის, რომ ჩვენი კოდი იყოს სუფთა და გაფართოებული, შევქმნათ დამხმარე ფუნქციები:
ფუნქცია exec_out (სმდ)
ლოკალური ფაილი = io.popen (cmd) თუ არ არის ფაილი მაშინ დააბრუნე ნული დასასრული ადგილობრივი გამომავალი = ფაილი: წაიკითხე ('*ყველა') ფაილი: დახურე () print ("გაუშვი:"..cmd.. " ->".. გამომავალი) დააბრუნეთ გამომავალი დასრულებული ფუნქცია read_file (ბილიკი) ადგილობრივი ფაილი = io.open (გზა, "rb") თუ არ არის ფაილი მაშინ დააბრუნეთ ნული ბოლომდე ადგილობრივი შინაარსი = ფაილი: წაიკითხეთ "*a" ფაილი: close () print ("Read: "..გზა.." -> "..კონტენტი) შინაარსის დაბრუნების დასასრული
ამ კომუნალური საშუალებების გამოყენებით, ჩვენ ახლა შეგვიძლია განვახორციელოთ მონაცემთა მოპოვების ფაქტობრივი ფუნქციები:
ფუნქცია getArpClients ()
დაბრუნების რიცხვი (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) ბოლო ფუნქცია getUptime () tonumber დაბრუნება (exec_out ("cat/proc/uptime | awk '{ბეჭდვა $ 1 } '")) დასრულების ფუნქცია getWanIP () დაბრუნება exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") დასასრული
თქვენ შეგიძლიათ გაუშვათ ამ shell ბრძანებების ნაწილები, მიიღოთ უფრო ღრმა გაგება, თუ როგორ მუშაობს იგი და მოერგოთ მას თქვენს საჭიროებებზე.
უმარტივესი ნაწილია მონაცემების გაგზავნა ბლინკის აპლიკაციაში. ნაგულისხმევი მაგალითი უკვე ადგენს ტაიმერს, რომელიც მუშაობს ყოველ 5 წამში კოდზე, ასე რომ ჩვენ უბრალოდ ვიყენებთ მას:
ადგილობრივი tmr1 = ტაიმერი: ახალი {ინტერვალი = 5000, func = ფუნქცია ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) დასასრული}
აპლიკაციაში ჩვენ ვამატებთ ეტიკეტის 3 ვიჯეტს და შესაბამისად ვაძლევთ მათ ვირტუალურ ქინძისთავებს 10, 11, 12.
მიუხედავად იმისა, რომ ეს მუშაობს, ის საკმაოდ არაეფექტურია, რადგან WAN IP ან კლიენტების რაოდენობა ასე ხშირად არ განახლდება. მოდი ეს გავასწოროთ
WAN IP– ისთვის ჩვენ გადავიტანთ დაკავშირებულ დამმუშავებელს. ის იმუშავებს ყოველ ჯერზე, როდესაც როუტერი დაამყარებს კავშირს Blynk Cloud– თან. ეს საკმარისი უნდა იყოს:
blynk: ჩართულია ("დაკავშირებულია", ფუნქცია ()
print ("Ready.") blynk: virtualWrite (12, getWanIP ()) დასასრული)
დროისა და კლიენტთა ნომრისთვის ჩვენ ვქმნით ცალკე ტაიმერს 5 წთ. ინტერვალი:
ადგილობრივი tmr2 = ტაიმერი: ახალი {ინტერვალი = 5*60*1000, ფუნქცია = ფუნქცია ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f სთ", getUptime ()/60/60)) დასასრული}
ნაბიჯი 5: WiFi კონტროლი: ON/OFF
აქამდე ჩვენ მხოლოდ ინფორმაციას ვიღებდით მოწყობილობიდან. შევეცადოთ გავაკონტროლოთ ის!
blynk: ჩართულია ("V20", ფუნქცია (პარამეტრი)
თუ param [1] == "1" მაშინ os.execute ("wifi up") სხვა os.execute ("wifi down") ბოლომდე)
პროგრამის მხარეს, მე უბრალოდ დავამატე ღილაკის ვიჯეტი (რეჟიმი: გადართვა) და მივანიჭე V20.
Ის არის. საოცარი.
ნაბიჯი 6: სისტემის სტატისტიკის სქემა
ფუნქცია getCpuLoad ()
დაბრუნების რიცხვი (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) ბოლო ფუნქცია getRamUsage () ტონუმერის დაბრუნება (exec_out ("უფასო | grep Mem | awk" {ბეჭდვა ($ 3- $ 7)/$ 2 * 100.0} "")) დასასრული
ჩვენ ასევე გვჭირდება მონაცემების გაგზავნა ბლინკში (ისევ გამოვიყენოთ tmr1):
ადგილობრივი tmr1 = ტაიმერი: ახალი {ინტერვალი = 5000, func = ფუნქცია ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) დასასრული}
აპლიკაციის გვერდზე დაამატეთ SuperChart ვიჯეტი. დაამატეთ CPU, RAM მონაცემთა ნაკადები და მიანიჭეთ V5, V6.
ნაბიჯი 7: მყარი დისკის დაწნული სტატუსი
ჩემს როუტერს აქვს გარე HDD დრაივი, რომელიც დაკავშირებულია როგორც ქსელთან დაკავშირებული შენახვის მოწყობილობა. საქმე ის არის, რომ ეს დისკი არის კონფიგურირებული, რომ დაიწყოს ტრიალი, როდესაც ვინმე წვდება მასზე და შეჩერდეს დროის გასვლის შემდეგ.
ცხადია, მაგარი იქნება იცოდეთ რამდენჯერ ირთვება დღის განმავლობაში. ასე რომ, მე დავამატე კიდევ ერთი მონაცემთა ნაკადი ჩემს სისტემის სქემაში.
HDD დისკის სტატუსის მოპოვება ცოტა უფრო რთულია, მაგრამ მე ვიპოვე გზა! უპირველეს ყოვლისა, დააინსტალირეთ smartmontools SSH კონსოლიდან:
opkg განახლება
opkg დააინსტალირეთ smartmontools
შემდეგ, ჩვენს კოდში, ჩვენ უნდა შევასრულოთ სპეციალური ბრძანება და შევამოწმოთ გასასვლელი კოდი:
ფუნქცია exec_ret (სმდ)
ლოკალური გასვლა = os.execute (cmd) print ("გაუშვით:"..cmd.. " -> გასვლა:".. გასვლა) დაბრუნება გასასვლელი ბოლოს ფუნქცია getHddSpinning () if exec_ret ("smartctl --nocheck = ლოდინის -info /dev/sda>/dev/null ") == 0 შემდეგ დააბრუნეთ 1 სხვა დაბრუნდით 0 ბოლომდე
შენიშვნა: ჩემი HDD არის /dev /sda
ნაბიჯი 8: ქსელის აქტივობის სქემა
ჩვენ ვქმნით სხვა SuperChart ვიჯეტს (წინა მსგავსი), ვამატებთ TX და RX მონაცემთა ნაკადებს და ვანიჭებთ V1 და V2– ს. შენიშვნა: მინდა ვაჩვენო WAN პორტის სტატისტიკა და ჩემი WAN პორტი არის eth0.2
დამხმარე ფუნქციები:
ფუნქცია getWanRxBytes ()
დაბრუნების რიცხვი (წაკითხვის_ ფაილი ("/sys/class/net/eth0.2/სტატისტიკა/rx_bytes")) ფუნქციის დასრულება getWanTxBytes () დაბრუნების რიცხვი (წაკითხვის_ ფაილი ("/sys/class/net/eth0.2/სტატისტიკა/tx_bytes")) დასასრული
შემდეგი, დაამატეთ კოდი იმავე tmr1- ს. ეს უფრო რთულია, რადგან ჩვენ გვჭირდება მხოლოდ გამოთვლა და ჩვენება სხვაობა გადაცემულ/მიღებულ ბაიტებში:
ადგილობრივი prevTx, prevRx
ადგილობრივი tmr1 = ტაიმერი: ახალი {ინტერვალი = 5000, func = ფუნქცია () ადგილობრივი tx = getWanTxBytes () ადგილობრივი rx = getWanRxBytes () თუ prevTx და prevTx ~ = tx მაშინ blynk: virtualWrite (1, tx - prevTx) დასრულდება თუ prevRx და prevRx ~ = rx შემდეგ blynk: virtualWrite (2, rx - prevRx) დასრულება prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7,)) დასასრული}
ნაბიჯი 9: შეტყობინებები
მე ასევე მინდოდა შემეტყობინებინა, როდესაც ჩემი როუტერი კარგავს ენერგიას ან ინტერნეტ კავშირს. ამისათვის ჩვენ გვჭირდება შეტყობინებების ვიჯეტი.
ვიჯეტის პარამეტრებში ჩართეთ "ხაზგარეშე შეტყობინება". კოდი საჭირო არ არის. ჩვენ ასევე შეგვიძლია გამოვაგზავნოთ შეტყობინებები ჩვენი კოდიდან.
ნაბიჯი 10: ავტომატური გაშვება ფონზე
ჯერჯერობით სკრიპტი ხელით უნდა შესრულდეს, მაგრამ მინდა როუტერის ჩართვისას ის ავტომატურად იმუშაოს ფონზე.
ეს კეთდება სერვისის შექმნით. შექმენით ფაილი /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; შემდეგ ექო "ბლინკმონი უკვე გაშვებულია" გასასვლელი 0 fi cd /root /lua-blynk lua blynkmon.lua შენი-ავტორი-ნიშანი> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; შემდეგ ეხმიანება "blynkmon არ მუშაობს" გასასვლელი 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
შენიშვნა: არ უნდა დაგვავიწყდეს, შეცვალოთ თქვენი- author-token
შემდეგ ჩართეთ blynkmon სერვისი:
სერვისის blynkmon ჩართვა
ნაბიჯი 11: დასკვნა და შემდგომი იდეები
თქვენ შეგიძლიათ დაასკანიროთ ეს QR, რომ მიიღოთ ჩემი ბლინკის პროექტის კლონი. ის მოითხოვს ენერგიის გარკვეულ წერტილებს (4600), რადგან ის იყენებს უამრავ ვიჯეტს!
იპოვეთ ლუას სრული კოდი აქ:
ჯერჯერობით ყველაფერი კარგად არის, მაგრამ აქ არის რამოდენიმე იდეა, რომლის დამატებაც მსურს უახლოეს მომავალში.
- დაამატეთ გადატვირთვის ბრძანება. თავიდან აიცილეთ მასზე შემთხვევით დაწკაპუნება.
- დაამატეთ ტერმინალის ვიჯეტი Linux– ის ნებისმიერი ბრძანების გასაშვებად.
-
დაამატეთ პროცესორის ტემპერატურის გრაფიკი.
UPD: სამწუხაროდ OpenWrt– ს ამჟამად არ აქვს დრაივერები ჩემი როუტერის მოდელისთვის. მაგრამ ის ხელმისაწვდომია მრავალი სხვა მარშრუტიზატორისთვის
- დაამატეთ შეტყობინება, როდესაც კონკრეტული მოწყობილობა უერთდება/ტოვებს ქსელს. ჩვენ უკვე გვაქვს arp ინფორმაცია, ახლა მხოლოდ MAC მისამართის შემოწმება.
ამ გზით, ჩვენ შეგვიძლია მონიტორინგი და კონტროლი 3D პრინტერებზე, რობოტებზე, ჩვეულებრივ კომპიუტერზე/ლეპტოპზე, Arduino/ESP8266/ESP32/RaspberryPi ნივთებზე, Smart Home მოწყობილობებზე და პრაქტიკულად გარშემო ყველაფერი. ნება მომეცით ვიცი რაიმე სხვა საინტერესო იდეა. რას ფიქრობთ ამ ყველაფერზე?
გირჩევთ:
როგორ შევქმნათ Android აპლიკაცია Android Studio– ით: 8 ნაბიჯი (სურათებით)
როგორ შევქმნათ Android აპლიკაცია Android Studio– ით: ეს გაკვეთილი გასწავლით Android Studio– ს განვითარების გარემოს გამოყენებით Android პროგრამის შექმნის საფუძვლებს. როგორც Android მოწყობილობები სულ უფრო მეტად გახდება მოთხოვნა ახალ აპლიკაციებზე მხოლოდ გაიზრდება. Android Studio არის მარტივი გამოსაყენებელი (
AmbiBox IOS დისტანციური მართვის აპლიკაცია: 5 ნაბიჯი
AmbiBox IOS დისტანციური მართვის აპლიკაცია: ამ iOS აპლიკაციით თქვენ შეგიძლიათ აკონტროლოთ თქვენი AmbiBox თქვენი iPhone ან iPad– დან. მე ვაპირებ ვისაუბრო აპლიკაციაზე და იმაზე, თუ როგორ ურთიერთობს იგი AmbiBox სერვერთან, თუ გსურთ იცოდეთ როგორ დააინსტალიროთ AmbiBox და led ზოლები, არის რამდენიმე გაკვეთილი
Bluetooth LED ხატვის დაფა და IOS აპლიკაცია: 9 ნაბიჯი (სურათებით)
Bluetooth LED ნახაზის დაფა და IOS აპლიკაცია: ამ გაკვეთილში თქვენ შეძლებთ შექმნათ Bluetooth LED დაფა, რომელსაც შეუძლია ნახატების დახატვა ჩვენს მიერ შექმნილი iPhone აპლიკაციიდან. ამ აპლიკაციაში მომხმარებლებს შეეძლებათ შექმნან Connect 4 თამაში, რომელიც ასევე გამოჩნდება ამ დაფაზე. ეს იქნება ჩ
მარტივი IOS აპლიკაცია BLE მოდულებისთვის: 4 ნაბიჯი
მარტივი IOS აპლიკაცია BLE მოდულებისთვის: ეს არის ინსტრუქცია, თუ როგორ შეგიძლიათ შექმნათ iOS პროგრამა ძალიან ძირითადი ფუნქციონირებით. ეს ინსტრუქცია არ გაივლის iOS BLE აპის შექმნის მთელ პროცესს. ის მხოლოდ მაღალი დონის მიმოხილვას მისცემს ზოგიერთ მნიშვნელოვან ელემენტს
სიახლოვის ფოტო გაზიარება IOS აპლიკაცია: 6 ნაბიჯი
Proximity Photo Sharing IOS აპლიკაცია: ამ ინსტრუქციურად ჩვენ შევქმნით iOS პროგრამას Swift– ით, რომელიც საშუალებას მოგცემთ გაუზიაროთ ფოტოები ნებისმიერ ახლობელს, მოწყობილობის დაწყვილების გარეშე. ჩვენ ვიყენებთ Chirp Connect- ს მონაცემთა გასაგზავნად ხმის გამოყენებით, ხოლო Firebase- ს სურათების შესანახად clo