- Bluetooth İletişimi için Gerekli Paketleri Yükleme:
- Bluetooth üzerinden Raspberry Pi ile Cihazları Eşleştirme:
- Oyuncak Arabayı Seçme:
- Devre Şeması ve Açıklaması:
- Android Uygulaması BlueTerm ile Aracı Uzaktan Kontrol Etme:
- Python Programlama:
Raspberry Pi, internet üzerinden kesintisiz kablosuz iletişim yeteneği nedeniyle IoT projeleri için çok popülerdir. Raspberry Pi 3 dahili Wi-Fi ve Bluetooth'a sahiptir ve Bluetooth çok popüler bir kablosuz iletişim Protokolüdür. Bugün Raspberry Pi 3 ve Bluetooth kullanarak Uzaktan Kumandalı Araba yapacağız , burada arabayı kontrol etmek için Akıllı Telefonu uzaktan kumanda olarak kullanacağız. Daha önce bu RC arabayı Arduino kullanarak oluşturduk.
Burada dahili Bluetooth'a sahip Raspberry Pi 3 kullanıyoruz, bu nedenle herhangi bir harici USB Bluetooth dongle kullanmamıza gerek yok. Burada kablosuz iletişim için RFCOMM Bluetooth protokolünü kullanıyoruz.
Python'da Bluetooth için programlama, soket programlama modelini takip eder ve Bluetooth cihazları arasındaki iletişim RFCOMM soketi aracılığıyla yapılır. RFCOMM (Radyo Frekansı İletişimi), benzetilmiş RS-232 seri bağlantı noktaları sağlayan ve Seri Bağlantı Noktası Emülasyonu olarak da adlandırılan bir Bluetooth Protokolüdür. Bluetooth seri bağlantı noktası profili bu protokole dayanmaktadır. RFCOMM, geniş desteği ve halka açık API'si nedeniyle Bluetooth uygulamalarında çok popülerdir. L2CAP protokolüne bağlıdır.
Raspberry Pi 2'niz varsa, harici Bluetooth dongle veya Bluetooth modülü HC-06 kullanmanız gerekir. Bu harici Bluetooth cihazlarını kullanmak için önceki projelerimize göz atın: Bluetooth üzerinden Android Uygulaması ve Raspberry Pi kontrollü Ev Aletleri kullanarak Raspberry Pi GPIO'yu kontrol etme.
Bluetooth İletişimi için Gerekli Paketleri Yükleme:
Başlamadan önce, Raspberry Pi'de Bluetooth iletişimini kurmak için bazı yazılımlar yüklememiz gerekiyor. Raspberry Pi ile birlikte Raspbian Jessie yüklü bir hafıza kartına sahip olmalısınız. Raspbian OS'yi yüklemek ve Raspberry Pi'yi kullanmaya başlamak için bu makaleye bakın. Bu yüzden şimdi aşağıdaki komutları kullanarak Raspbian'ı güncellememiz gerekiyor:
sudo apt-get update sudo apt-get yükseltme
O zaman Bluetooth ile ilgili birkaç paket kurmamız gerekiyor:
sudo apt-get bluetooth blueman bluez yükle
Ardından Raspberry Pi'yi yeniden başlatın:
sudo yeniden başlatma
BlueZ açık kaynaklı bir proje ve resmi Linux Bluetooth protokol yığınıdır. Tüm temel Bluetooth protokollerini destekler ve artık resmi Linux Kernel'in bir parçası haline gelir.
Blueman, Bluetooth cihazlarını yönetmek ve kontrol etmek için Masaüstü arayüzü sağlar.
Son olarak, Python dilini kullanarak RFCOMM aracılığıyla veri gönderip alabilmemiz için Bluetooth iletişimi için python Kitaplığına ihtiyacımız var:
sudo apt-get install python-bluetooth
Ayrıca Raspberry Pi için GPIO destek kitaplıklarını yükleyin:
sudo apt-get install python-rpi.gpio
Artık Raspberry Pi'de Bluetooth iletişimi için gerekli paketlerin kurulumunu tamamladık.
Bluetooth üzerinden Raspberry Pi ile Cihazları Eşleştirme:
Raspberry Pi ile cep telefonu gibi Bluetooth Cihazlarını eşleştirmek çok kolaydır. Burada Android Smart telefonumuzu Raspberry Pi ile eşleştirdik. Bluetooth cihazlarımızı yönetmek için "bluetoothctl" adlı bir komut satırı yardımcı programı sağlayan BlueZ'yi Pi'ye daha önce kurmuştuk.
Şimdi bluetoothctl yardımcı programını aşağıdaki komutla açın:
sudo bluetoothctl
'Help' yazarak bluetoothctl yardımcı programının tüm komutlarını kontrol edebilirsiniz. Şimdilik aşağıdaki komutları verilen sırayla girmemiz gerekiyor:
# power on # ajan açık # keşfedilebilir # eşleştirilebilir # tarama açık
Son "tara" komutundan sonra, listede Bluetooth cihazınızı (Cep telefonu) göreceksiniz. Cep telefonunuzda Bluetooth'un açık olduğundan ve yakındaki cihazlar tarafından görülebilir olduğundan emin olun. Ardından cihazınızın MAC adresini kopyalayın ve verilen komutu kullanarak eşleştirin:
çift
Ardından, Terminal konsolunuzda Parola veya Pin girmeniz istenir, ardından parolayı oraya yazın ve enter tuşuna basın. Ardından, istendiğinde cep telefonunuza aynı parolayı yazın ve artık Raspberry Pi ile başarıyla eşleştirildiniz. Önceki GPIO kontrol Eğitiminde verilen Videoda tüm bu süreci de açıkladık. İşte doğrudan YouTube bağlantısı.
Daha önce de belirtildiği gibi, Cep telefonunu eşleştirmek için Masaüstü arayüzünü de kullanabilirsiniz. Blueman'ı kurduktan sonra, Raspberry Pi masaüstünüzün sağ tarafında aşağıda gösterildiği gibi eşleştirmeyi kolayca yapabileceğiniz bir Bluetooth simgesi göreceksiniz.
Oyuncak Arabayı Seçme:
Bu Raspberry Pi Kontrollü Araba projesinde gösteri için bir oyuncak araba kullandık. Burada, sağa-sola hareket edebilen bir RF oyuncak araba seçtik. Bu arabayı satın aldıktan sonra RF devresini Raspberry devremiz ile değiştirdik. Bu arabanın biri iki ön tekerleği, diğeri iki arka tekerleği döndüren iki DC motoru var. Ön yan motor, araca yön vermek için sola veya sağa dönme anlamında kullanılır (gerçek araba yönlendirme özelliği gibi). Ve arka yan motor, arabayı ileri ve geri yönde sürmek için kullanılır. Ahududu Bluetooth'u, arabayı kontrol etmek için android telefondan kablosuz olarak komut almak için kullanılır.
Ön ve Arka Tekerlekleri döndürmek için iki DC Motoru olan herhangi bir oyuncak arabayı kullanabilirsiniz.
Devre Şeması ve Açıklaması:
Bu Uzaktan Kumandalı Arabada sadece Raspberry Pi'yi L293D modülünü kullanarak iki motora bağlamamız gerekiyor. Raspberry Pi'yi ve arabayı güçlendirmek için mobil bir güç bankası kullandık. Mobil güç bankası, Raspberry Pi'ye ve arabanın motorlarına güç sağlamak için yeterlidir, ancak güç bankasını arabanın üzerine koyduğumuzda, mobil güç bankası arabasının ağır ağırlığı nedeniyle düzgün hareket edemeyecektir. Bu nedenle, sisteme güç sağlamak için düşük ağırlıklı güç kaynağını veya Lityum pilleri kullanmanızı öneririz. Tüm bağlantılar aşağıdaki devre şemasında gösterilmektedir. Motorları farklı teknolojilerle kontrol etme hakkında daha fazla bilgi edinmek için Robotik bölümümüzü de kontrol edin.
Not: ahududu pi'ye 5v'den fazla koymayın.
Bu devre, bu proje için Perf Board üzerinde yapılmıştır, böylelikle arabada daha az ağırlık olur.
Android Uygulaması BlueTerm ile Aracı Uzaktan Kontrol Etme:
Şimdi her şeyi kurduktan ve Akıllı Telefonu bluetooth üzerinden başarıyla eşleştirmeyi denedikten sonra , Raspberry Pi'nin GPIO pinlerini kontrol edebilmemiz için Bluetooth Seri Adaptör kullanarak Raspberry Pi ile iletişim kurmak için bir Android Uygulaması yüklememiz gerekiyor. Daha önce de belirtildiği gibi, RFCOMM / SPP protokolü Bluetooth üzerinden seri iletişimi taklit eder, bu yüzden burada bu protokolü destekleyen BlueTerm Uygulamasını yükledik.
Ayrıca, RFCOMM soketi aracılığıyla iletişimi destekleyen diğer herhangi bir Bluetooth Terminal Uygulamasını da kullanabilirsiniz.
Şimdi BlueTerm Uygulamasını indirip kurduktan sonra , aşağıda verilen Python Programını terminalden çalıştırın ve eşleştirilmiş raspberrypi cihazını aynı anda BlueTerm Uygulamasından bağlayın.
Başarılı bağlantıdan sonra, aşağıda gösterildiği gibi Uygulamanın sağ üst köşesinde bağlandı: raspberrypi göreceksiniz:
Artık arabayı istediğiniz yönde hareket ettirmek için BlueTerm uygulamasından aşağıdaki komutları girebilirsiniz. Programdan çıkmak için 'q' tuşuna basın. Sen olabilir Google Sesle Yazma Klavye kullanmak için Voice kullanarak bu araç kontrolü için. Tam Demo kontrol video sonunda verilen.
Komutlar:
F - İleri Hareket
B - Geri Hareket
S - Durdur
L - İleri Sola Hareket
R - İleri Sağa Hareket
A - Geri Sola Hareket
P - Geri Sağa Hareket
Q - Çık
Python Programlama:
Android Uygulaması ile Raspberry Pi GPIO'yu Kontrol Etmek İçin Python Programı çok basit ve açıklayıcıdır. Sadece Bluetooth RFCOMM iletişimiyle ilgili kod hakkında biraz bilgi edinmemiz gerekiyor. Aksi takdirde, motorun pimini yüksek veya alçak yaparak herhangi bir robotu veya arabayı kontrol etmeye benzer. Programın tamamı aşağıda Kod bölümünde verilmiştir.
Öncelikle, Bluetooth'u Python diliyle kontrol etmemizi sağlayan Bluetooth soket kitaplığını içe aktarmamız gerekiyor; kütüphaneyi bir önceki bölümde aynı şekilde kurduk.
Bluetooth'u içe aktar
Sonra daha fazla başlık dosyası ekledik ve motorlar için pinler tanımlayarak onları varsayılan olarak düşük hale getirdik.
RPi.GPIO'yu GPIO olarak içe aktarma 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. Çıktı (m22, 0)
Bluetooth iletişiminden sorumlu kod aşağıdadır:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM) port = 1 server_socket.bind (("", port)) server_socket.listen (1) client_socket, adres = server_socket.accept () print "Şuradan kabul edilen bağlantı", adres
Burada onları satır satır anlayabiliriz:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM): Bluetooth RFCOMM iletişimi için soket oluşturma.
server_socket.bind (("", bağlantı noktası): - Sunucu, ana bilgisayar üzerindeki komut dosyasını bağlantı noktasına '' bağlar.
server_socket.listen (1): Sunucu, her seferinde bir bağlantıyı kabul etmeyi dinler.
client_socket, address = server_socket.accept (): Sunucu, istemcinin bağlantı isteğini kabul eder ve mac adresini değişken adresine atar, client_socket, istemcinin soketidir
Bundan sonra, arabayı istenen yönde hareket ettirmekten sorumlu bazı işlevler oluşturduk: def left_side_forward (), def right_side_forward (), def forward (), def left_side_reverse (), def right_side_reverse (), def reverse () def stop (). Mobile blueTerm uygulamasından L, R, F, A, P, B, S tuşlarına bastığımızda bu işlevler sırasıyla çağrılacak ve araç buna göre hareket edecek.
data = "" while 1: data = client_socket.recv (1024) print "Alındı:% s"% data eğer (data == "F"): forward () elif (data == "L"): left_side_forward () elif (data == "R"): right_side_forward () elif (data == "B"): reverse () elif (data == "A"): left_side_reverse () elif (data == "P"): right_side_reverse () elif data == "S": stop () elif (data == "Q"): print ("Çık") break client_socket.close () server_socket.close ()
data = client_socket.recv (1024): Client_socket istemci soketi aracılığıyla veri alır ve onu değişken verilere atar. Bir seferde maksimum 1024 karakter alınabilir.
Son olarak, tüm programlamadan sonra, aşağıdaki kodu kullanarak istemci ve sunucu bağlantısını kapatın:
client_socket.close () server_socket.close ()