- Reikiamų „Bluetooth“ ryšio paketų diegimas:
- Prietaisų susiejimas su „Raspberry Pi“ per „Bluetooth“:
- Žaislinio automobilio pasirinkimas:
- Grandinės schema ir paaiškinimas:
- Automobilio nuotolinis valdymas naudojant „Android App BlueTerm“:
- „Python“ programavimas:
„Raspberry Pi“ yra labai populiari daiktų interneto projektams dėl savo vientisos belaidžio ryšio internetu galimybės. „Raspberry Pi 3“ įmontuotas „Wi-Fi“ ir „Bluetooth“ ryšys, o „Bluetooth“ yra labai populiarus belaidžio ryšio protokolas. Šiandien mes statysime nuotoliniu būdu valdomą automobilį naudodami „Raspberry Pi 3“ ir „Bluetooth“. Čia mes naudosime „ Smart Phone“ kaip nuotolinio valdymo pultą automobiliui valdyti. Anksčiau mes sukūrėme šį RC automobilį naudodami „Arduino“.
Čia mes naudojame „Raspberry Pi 3“, kuriame įmontuotas „Bluetooth“ ryšys, todėl mums nereikia naudoti jokio išorinio USB „Bluetooth“ rakto. Čia belaidžiui ryšiui naudojame „RFCOMM Bluetooth“ protokolą.
„Bluetooth“ programavimas „Python“ programoje atitinka lizdo programavimo modelį, o ryšiai tarp „Bluetooth“ įrenginių atliekami per RFCOMM lizdą. RFCOMM (radijo dažnio ryšys) yra „Bluetooth“ protokolas, teikiantis emuliuojamas RS-232 nuosekliąsias prievadus ir dar vadinamas serijinio prievado emuliacija. „Bluetooth“ nuoseklaus prievado profilis pagrįstas šiuo protokolu. RFCOMM yra labai populiarus „Bluetooth“ programose dėl plataus palaikymo ir viešai prieinamos API. Jis susietas su L2CAP protokolu.
Jei turite „Raspberry Pi 2“, turite naudoti išorinį „Bluetooth“ raktą arba „Bluetooth“ modulį HC-06. Patikrinkite ankstesnius šių išorinių „Bluetooth“ įrenginių naudojimo projektus: „Raspberry Pi GPIO“ valdymas naudojant „Android App“ per „Bluetooth“ ir „Raspberry Pi“ valdomus buitinius prietaisus.
Reikiamų „Bluetooth“ ryšio paketų diegimas:
Prieš pradėdami turime įdiegti tam tikrą programinę įrangą, skirtą „ Bluetooth“ ryšiui nustatyti „Raspberry Pi“. Turėtumėte turėti paruoštą „Raspbian Jessie“ atminties kortelę su „Raspberry Pi“. Peržiūrėkite šį straipsnį, jei norite įdiegti „Raspbian“ OS ir pradėti naudoti „Raspberry Pi“. Taigi dabar pirmiausia turime atnaujinti „Raspbian“ naudodami toliau nurodytas komandas:
sudo apt-get update sudo apt-get atnaujinimas
Tada turime įdiegti keletą „Bluetooth“ susijusių paketų:
sudo apt-get install bluetooth blueman bluez
Tada perkraukite „Raspberry Pi“:
sudo perkraukite
„BlueZ“ yra atviro kodo projektas ir oficialus „Linux“ „Bluetooth“ protokolo kaminas. Jis palaiko visus pagrindinius „Bluetooth“ protokolus ir dabar tampa oficialaus „Linux“ branduolio dalimi.
„Blueman“ suteikia darbalaukio sąsają „Bluetooth“ įrenginiams valdyti ir valdyti.
Galiausiai mums reikalinga „ Python“ biblioteka „Bluetooth“ ryšiui, kad galėtume siųsti ir gauti duomenis per RFCOMM naudojant „Python“ kalbą:
sudo apt-get įdiekite python-bluetooth
Taip pat įdiekite „Raspberry Pi“ GPIO palaikymo bibliotekas:
sudo apt-get install python-rpi.gpio
Dabar mes baigėme įdiegti reikiamus „Bluetooth“ ryšio paketus „Raspberry Pi“.
Prietaisų susiejimas su „Raspberry Pi“ per „Bluetooth“:
Labai lengva susieti „Bluetooth“ įrenginius, pvz., Mobiliuosius telefonus, su „Raspberry Pi“. Čia mes susiejome „Android“ išmanųjį telefoną su „Raspberry Pi“. Anksčiau mes įdiegėme „BlueZ“ sistemoje Pi, kuri teikia „Bluetooth“ įrenginiams valdyti skirtą komandų eilutės priemonę „bluetoothctl“ .
Dabar atidarykite „ bluetoothctl“ naudingumo komandą žemiau:
sudo bluetoothctl
Galite patikrinti visas „ bluetoothctl“ naudingumo komandas įvesdami „help“ . Dabar turime įvesti žemiau esančias komandas nustatyta tvarka:
# maitinimas įjungtas # agentas įjungtas # aptinkamas # susietas su # nuskaitymu
Po paskutinės komandos „scan on“ sąraše pamatysite savo „Bluetooth“ įrenginį (mobilųjį telefoną). Įsitikinkite, kad jūsų mobiliajame telefone yra įjungtas „Bluetooth“ ryšys ir kad jį mato netoliese esantys įrenginiai. Tada nukopijuokite savo įrenginio MAC adresą ir suporuokite jį naudodami nurodytą komandą:
pora
Tada jūsų bus paprašyta įvesti kodą arba PIN kodą jūsų terminalo konsolėje, tada įveskite kodą ir paspauskite enter. Tada paprašę įveskite tą patį kodą į savo mobilųjį telefoną ir dabar esate sėkmingai suporuotas su „Raspberry Pi“. Mes taip pat paaiškinome visą šį procesą vaizdo įraše, pateiktame ankstesnėje GPIO valdymo pamokoje. Čia yra tiesioginė „YouTube“ nuoroda.
Kaip sakyta anksčiau, taip pat galite naudoti darbalaukio sąsają susieti mobilųjį telefoną. Įdiegę „Blueman“, dešinėje „Raspberry Pi“ darbalaukio pusėje pamatysite „Bluetooth“ piktogramą, kaip parodyta žemiau, kurią naudodami galite lengvai atlikti poravimą.
Žaislinio automobilio pasirinkimas:
Šiame „ Raspberry Pi“ valdomo automobilio projekte demonstravimui naudojome žaislinį automobilį. Čia mes pasirinkome RF žaislinį automobilį su judančia kairės ir dešinės vairavimo funkcija. Įsigiję šį automobilį, mes pakeitėme jo RF grandinę į mūsų aviečių grandinę. Šis automobilis turi du nuolatinės srovės variklius, iš kurių vienas turi pasukti du priekinius ratus, o kitas - pasukti du galinius ratus. Priekinis šoninis variklis naudojamas automobilio krypčiai nurodyti - tai posūkis kairėn ar dešinėn (kaip ir tikra automobilio vairavimo funkcija). Ir galinis šoninis variklis naudojamas vairuoti automobilį pirmyn ir atgal. Avietės „Bluetooth“ yra naudojamas norint gauti belaidį komandą iš „Android“ telefono, kad būtų galima valdyti automobilį.
Norėdami pasukti priekinius ir galinius ratus, galite naudoti bet kokį žaislinį automobilį, kuriame yra du nuolatinės srovės varikliai.
Grandinės schema ir paaiškinimas:
Šiame nuotolinio valdymo automobilyje mums reikia tik sujungti „Raspberry Pi“ su dviem varikliais, naudojant L293D modulį. Norėdami maitinti „Raspberry Pi“ ir automobilį, naudojome mobilųjį energijos banką. Mobilus energijos bankas yra pakankamas, kad maitintų „Raspberry Pi“ ir automobilio variklius, tačiau kai mes perkelsime jėgos banką virš automobilio, dėl didelio mobiliojo energijos banko automobilio svorio negalėsime tinkamai judėti. Taigi sistemai maitinti rekomenduojame naudoti mažo svorio maitinimo šaltinius arba ličio baterijas. Visos jungtys parodytos žemiau esančioje grandinės schemoje. Taip pat patikrinkite mūsų robotikos skyrių, kad sužinotumėte daugiau apie skirtingų variklių valdymą.
Pastaba: prie aviečių pi nedėkite daugiau nei 5v.
Ši grandinė buvo sukurta „Perf Board“ šiam projektui, kad automobilis turėtų mažiau svorio.
Automobilio nuotolinis valdymas naudojant „Android App BlueTerm“:
Nustačius visus dalykus ir sėkmingai bandžius sulieti „Smart Phone“ per „Bluetooth“, turime įdiegti „ Android“ programą, skirtą bendrauti su „Raspberry Pi“ naudojant „Bluetooth“ nuoseklųjį adapterį, kad galėtume valdyti „Raspberry Pi“ GPIO kaiščius. Kaip sakyta anksčiau, RFCOMM / SPP protokolas imituoja nuoseklųjį ryšį per „Bluetooth“, todėl čia įdiegėme „BlueTerm“ programą, palaikančią šį protokolą.
Taip pat galite naudoti bet kurią kitą „Bluetooth“ terminalo programą, palaikančią ryšį per RFCOMM lizdą.
Dabar, atsisiųsdami ir įdiegę „BlueTerm“ programą, paleiskite žemiau pateiktą „Python“ programą iš terminalo ir tuo pačiu metu prijunkite suporuotą „ raspberrypi“ įrenginį iš „BlueTerm“ programos.
Po sėkmingo ryšio pamatysite prijungtą: avietę viršutiniame dešiniajame programos kampe, kaip parodyta žemiau:
Dabar galite tiesiog įvesti šias komandas iš „BlueTerm“ programos, kad automobilis judėtų norima kryptimi. Norėdami išeiti iš programos, paspauskite „q“. Norėdami valdyti šį automobilį naudodami „Voice“, galite naudoti „Google Voice“ rašymo klaviatūrą. Pabaigoje pateiktame vaizdo įraše patikrinkite visą demonstracinę versiją.
Komandos:
F - judėti pirmyn
B - judėti atgal
S - sustok
L - judėjimas į priekį kairėn
R - judėti į priekį dešinėn
A - judėjimas atgal kairėn
P - judėjimas atgal dešinėn
Q - mesti
„Python“ programavimas:
„Python“ programa, skirta valdyti „Raspberry Pi GPIO“ naudojant „Android“ programą, yra labai paprasta ir savaime suprantama. Tik mes turime šiek tiek sužinoti apie kodą, susijusį su „Bluetooth RFCOMM“ ryšiu. Kitaip tas pats, kaip valdyti bet kurį robotą ar automobilį, variklio kaištį aukštai ar žemai padarant. Visa programa pateikiama toliau skyriuje Kodas.
Pirmiausia turime importuoti „ Bluetooth“ lizdo biblioteką, kuri leidžia mums valdyti „Bluetooth“ su „Python“ kalba; toje pačioje bibliotekoje įdiegėme ankstesniame skyriuje.
importuoti „Bluetooth“
Tada mes įtraukėme dar keletą antraštės failų ir nustatėme variklių kaiščius, kad jie būtų numatyti žemai.
importuoti „Bluetooth“ importavimo laiką importuoti RPi.GPIO kaip GPIO m11 = 18 m12 = 23 m21 = 24 m22 = 25 GPIO.setwarnings (False) GPIO.setmode (GPIO.BCM) GPIO.setup (m11, GPIO.OUT) GPIO.setup (m12, GPIO.OUT) GPIO.setup (m21, GPIO.OUT) GPIO.setup (m22, GPIO.OUT) GPIO.output (m11, 0) GPIO.output (m12, 0) GPIO.output (m21, 0) GPIO. Išvestis (m22, 0)
Žemiau yra kodas, atsakingas už „Bluetooth“ ryšį:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM) prievadas = 1 server_socket.bind (("", prievadas)) server_socket.listen (1) client_socket, address = server_socket.accept () print "Priimtas ryšys nuo", adresas
Čia mes galime juos suprasti eilute:
server_socket = bluetooth. BluetoothSocket (bluetooth.RFCOMM): „Bluetooth RFCOMM“ ryšio lizdo kūrimas.
server_socket.bind (("", prievadas): - Serveris susieja scenarijų pagrindiniame kompiuteryje su prievadu.
server_socket.listen (1): serveris klausosi, ar vienu metu priimti vieną ryšį.
kliento lizdas, adresas = serverio lizdas.accept (): serveris priima kliento prisijungimo užklausa ir priskiria mac adresą kintamajam adresui, kliento lizdas yra kliento lizdas
Po to mes sukūrėme keletą funkcijų, kurios yra atsakingos už automobilio judėjimą norima linkme: def left_side_forward (), def right_side_forward (), def forward (), def left_side_reverse (), def right_side_reverse (), def reverse () def stop (). Šios funkcijos bus iškviestos atitinkamai, kai paspausime L, R, F, A, P, B, S iš „Mobile blueTerm“ programos ir automobilis atitinkamai pajudės.
duomenys = "", o 1: duomenys = kliento lizdas.recv (1024) spausdinti "Gauta:% s"% duomenų, jei (duomenys == "F"): į priekį () elif (duomenys == "L"): kairė_ pusė_puola () elifas (duomenys == "R"): dešinysis_šalis_ priekis () elifas (duomenys == "B"): atvirkštinis () elifas (duomenys == "A"): kairysis_šalis_reverse () elifas (duomenys == "P"): dešinysis_šalis_reverse () elif data == "S": stop () elif (data == "Q"): spausdinti ("Quit") pertrauka client_socket.close () server_socket.close ()
duomenys = kliento lizdas.recv (1024): gaukite duomenis per kliento lizdą kliento lizdas ir priskirkite juos kintamiesiems duomenims. Vienu metu galima gauti ne daugiau kaip 1024 simbolius.
Galiausiai, atlikę visą programavimą, uždarykite kliento ir serverio ryšį naudodami žemiau esantį kodą:
client_socket.close () server_socket.close ()