- การติดตั้งแพ็คเกจที่จำเป็นสำหรับการสื่อสาร Bluetooth:
- การจับคู่อุปกรณ์กับ Raspberry Pi ผ่านบลูทู ธ :
- การเลือกรถของเล่น:
- แผนภาพวงจรและคำอธิบาย:
- การควบคุมรถจากระยะไกลด้วย Android App BlueTerm:
- การเขียนโปรแกรม Python:
Raspberry Pi เป็นที่นิยมอย่างมากสำหรับโครงการ IoT เนื่องจากความสามารถในการสื่อสารไร้สายผ่านอินเทอร์เน็ตได้อย่างราบรื่น Raspberry Pi 3 มี Wi-Fi และ Bluetooth ในตัวและ Bluetooth เป็นโปรโตคอลการสื่อสารไร้สายที่ได้รับความนิยมอย่างมาก วันนี้เราจะสร้างRemote Controlled Car โดยใช้ Raspberry Pi 3 และ Bluetoothที่นี่เราจะใช้Smart Phone เป็นรีโมทในการควบคุมรถ ก่อนหน้านี้เราได้สร้างรถ RC นี้โดยใช้ Arduino
ที่นี่เราใช้ Raspberry Pi 3 ซึ่งมีบลูทู ธ ในตัวดังนั้นเราจึงไม่จำเป็นต้องใช้ดองเกิลบลูทู ธ USB ภายนอกใด ๆ ที่นี่เรากำลังใช้โปรโตคอล RFCOMM Bluetooth สำหรับการสื่อสารไร้สาย
การเขียนโปรแกรมสำหรับ Bluetooth ใน Python เป็น ไปตามรูปแบบการเขียนโปรแกรมซ็อกเก็ตและการสื่อสารระหว่างอุปกรณ์บลูทู ธ ทำได้ผ่านซ็อกเก็ต RFCOMM RFCOMM (การสื่อสารด้วยคลื่นความถี่วิทยุ) เป็นโปรโตคอลบลูทู ธ ที่ให้พอร์ตอนุกรม RS-232 จำลองและเรียกอีกอย่างว่า Serial Port Emulation โปรไฟล์พอร์ตอนุกรมบลูทู ธ ขึ้นอยู่กับโปรโตคอลนี้ RFCOMM ได้รับความนิยมอย่างมากในแอปพลิเคชันบลูทู ธ เนื่องจากมีการสนับสนุนที่กว้างขวางและ API ที่เผยแพร่สู่สาธารณะ ถูกผูกไว้กับโปรโตคอล L2CAP
หากคุณมี Raspberry Pi 2 คุณจำเป็นต้องใช้ดองเกิลบลูทู ธ ภายนอกหรือโมดูลบลูทู ธ HC-06 ตรวจสอบโครงการก่อนหน้าของเราสำหรับการใช้อุปกรณ์บลูทู ธ ภายนอกเหล่านี้: การควบคุม Raspberry Pi GPIO โดยใช้ Android App ผ่าน Bluetooth และ Raspberry Pi ที่ควบคุมเครื่องใช้ในบ้าน
การติดตั้งแพ็คเกจที่จำเป็นสำหรับการสื่อสาร Bluetooth:
ก่อนที่จะเริ่มเราต้องติดตั้งซอฟต์แวร์บางอย่างสำหรับการตั้งค่าบลูทู ธ ในการสื่อสารราสเบอร์รี่ Pi คุณควรติดตั้งการ์ดหน่วยความจำ Raspbian Jessie พร้อมกับ Raspberry Pi ตรวจสอบบทความนี้เพื่อติดตั้ง Raspbian OS และเริ่มต้นกับ Raspberry Pi ดังนั้นตอนนี้เราต้องอัปเดต Raspbian โดยใช้คำสั่งด้านล่างก่อน:
sudo apt-get update sudo apt-get upgrade
จากนั้นเราต้องติดตั้งแพ็คเกจที่เกี่ยวข้องกับบลูทู ธ บางส่วน:
sudo apt-get ติดตั้งบลูทู ธ blueman bluez
จากนั้นรีบูต Raspberry Pi:
sudo รีบูต
BlueZเป็นโครงการโอเพ่นซอร์สและสแต็กโปรโตคอล Linux Bluetooth อย่างเป็นทางการ รองรับโปรโตคอล Bluetooth หลักทั้งหมดและตอนนี้กลายเป็นส่วนหนึ่งของ Linux Kernel อย่างเป็นทางการ
Bluemanมีอินเทอร์เฟซเดสก์ท็อปเพื่อจัดการและควบคุมอุปกรณ์บลูทู ธ
ในที่สุดเราก็ต้องการpython Library สำหรับการสื่อสารบลูทู ธเพื่อให้เราสามารถส่งและรับข้อมูลผ่าน RFCOMM โดยใช้ภาษา Python:
sudo apt-get ติดตั้ง python-bluetooth
ติดตั้งไลบรารีรองรับ GPIO สำหรับ Raspberry Pi ด้วย:
sudo apt-get ติดตั้ง python-rpi.gpio
ตอนนี้เราได้ติดตั้งแพ็คเกจที่จำเป็นสำหรับการสื่อสาร Bluetooth ใน Raspberry Pi เรียบร้อยแล้ว
การจับคู่อุปกรณ์กับ Raspberry Pi ผ่านบลูทู ธ:
การจับคู่อุปกรณ์บลูทู ธ เช่นโทรศัพท์มือถือกับ Raspberry Pi นั้นง่ายมาก ที่นี่เราได้จับคู่โทรศัพท์ Android สมาร์ทของเรากับราสเบอร์รี่ Pi ก่อนหน้านี้เราได้ติดตั้ง BlueZ ใน Pi ซึ่งมียูทิลิตี้บรรทัดคำสั่งที่เรียกว่า "bluetoothctl" เพื่อจัดการอุปกรณ์บลูทู ธ ของเรา
ตอนนี้เปิดยูทิลิตี้ bluetoothctl ตามคำสั่งด้านล่าง:
sudo bluetoothctl
คุณสามารถตรวจสอบคำสั่งทั้งหมดของ bluetoothctl ยูทิลิตี้โดยพิมพ์'ช่วย' ตอนนี้เราต้องป้อนคำสั่งด้านล่างตามลำดับที่กำหนด:
# เปิดเครื่อง # ตัวแทนบน # ค้นพบบน # จ่ายได้ใน # สแกนบน
หลังจากคำสั่งสุดท้าย “ scan on” คุณจะเห็นอุปกรณ์ Bluetooth (โทรศัพท์มือถือ) ของคุณในรายการ ตรวจสอบให้แน่ใจว่ามือถือของคุณเปิดบลูทู ธ และอุปกรณ์ใกล้เคียงมองเห็นได้ จากนั้นคัดลอกที่อยู่ MAC ของอุปกรณ์ของคุณและจับคู่โดยใช้คำสั่งที่กำหนด:
คู่
จากนั้นคุณจะได้รับแจ้งให้ป้อนรหัสผ่านหรือพินในคอนโซลเทอร์มินัลของคุณจากนั้นพิมพ์รหัสผ่านที่นั่นแล้วกด Enter จากนั้นพิมพ์รหัสผ่านเดียวกันในโทรศัพท์มือถือของคุณเมื่อได้รับแจ้งและคุณจับคู่กับ Raspberry Pi เรียบร้อยแล้ว เราได้อธิบายกระบวนการทั้งหมดนี้ในวิดีโอที่ให้ไว้ในบทช่วยสอนการควบคุม GPIO ก่อนหน้านี้ด้วย นี่คือลิงค์โดยตรงของ YouTube
ตามที่บอกไว้ก่อนหน้านี้คุณยังสามารถใช้อินเทอร์เฟซเดสก์ท็อปเพื่อจับคู่โทรศัพท์มือถือได้ หลังจากติดตั้ง Blueman แล้วคุณจะเห็นไอคอน Bluetooth ทางด้านขวาของเดสก์ท็อป Raspberry Pi ดังที่แสดงด้านล่างซึ่งคุณสามารถจับคู่ได้อย่างง่ายดาย
การเลือกรถของเล่น:
ในโครงการ Raspberry Pi Controlled Car นี้เราได้ใช้รถของเล่นในการสาธิต เราได้เลือกรถของเล่น RF ที่มีคุณสมบัติบังคับเลี้ยวซ้าย - ขวา หลังจากซื้อรถคันนี้เราได้เปลี่ยนวงจร RF ด้วยวงจร Raspberry ของเรา รถคันนี้มีมอเตอร์กระแสตรงสองตัวตัวหนึ่งหมุนล้อหน้า 2 ตัวและอีกตัวหนึ่งคือหมุนสองล้อหลัง มอเตอร์ด้านหน้าใช้สำหรับบอกทิศทางไปยังรถหมายถึงการเลี้ยวซ้ายหรือขวา และมอเตอร์ด้านหลังใช้สำหรับขับเคลื่อนรถในทิศทางไปข้างหน้าและข้างหลัง ใช้ Bluetooth ของ Raspberry เพื่อรับคำสั่งแบบไร้สายจากโทรศัพท์ Android เพื่อควบคุมรถ
คุณสามารถใช้รถของเล่นใดก็ได้ที่มีมอเตอร์ DC สองตัวเพื่อหมุนล้อหน้าและล้อหลัง
แผนภาพวงจรและคำอธิบาย:
ในรถควบคุมระยะไกลนี้เราต้องเชื่อมต่อ Raspberry Pi กับมอเตอร์สองตัวโดยใช้โมดูล L293Dเท่านั้น สำหรับการเปิดเครื่อง Raspberry Pi และรถยนต์เราได้ใช้ธนาคารพลังงานมือถือ แบตสำรองมือถือนั้นเพียงพอที่จะจ่ายไฟให้กับ Raspberry Pi และมอเตอร์ของรถยนต์ แต่เมื่อเราวางพาวเวอร์แบงค์ไว้บนรถแล้วเนื่องจากรถแบตเตอรีพกพามีน้ำหนักมากจะไม่สามารถเคลื่อนที่ได้อย่างถูกต้อง ดังนั้นเราขอแนะนำให้ใช้แหล่งจ่ายไฟน้ำหนักเบาหรือแบตเตอรี่ลิเธียมในการเปิดระบบ การเชื่อมต่อทั้งหมดแสดงในแผนภาพวงจรด้านล่าง ตรวจสอบส่วนหุ่นยนต์ของเราเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการควบคุมมอเตอร์ด้วยเทคโนโลยีต่างๆ
หมายเหตุ: อย่าใส่ raspberry pi เกิน 5v
วงจรนี้ถูกสร้างขึ้นบน Perf Board สำหรับโครงการนี้เพื่อให้รถมีน้ำหนักน้อยลง
การควบคุมรถจากระยะไกลด้วย Android App BlueTerm:
หลังจากตั้งค่าทุกอย่างและลองจับคู่สมาร์ทโฟนผ่านบลูทู ธ เรียบร้อยแล้วเราจำเป็นต้องติดตั้ง แอพ Android เพื่อสื่อสารกับ Raspberry Pi โดยใช้ Bluetooth Serial Adapterเพื่อให้เราสามารถควบคุมพิน GPIO ของ Raspberry Pi ได้ ตามที่บอกไว้ก่อนหน้านี้โปรโตคอล RFCOMM / SPP เลียนแบบการสื่อสารแบบอนุกรมผ่านบลูทู ธ ดังนั้นเราจึงติดตั้งแอพ BlueTermที่นี่ซึ่งรองรับโปรโตคอลนี้
คุณยังสามารถใช้แอพ Bluetooth Terminal อื่น ๆ ที่รองรับการสื่อสารผ่านซ็อกเก็ต RFCOMM
หลังจากดาวน์โหลดและติดตั้งแอพ BlueTerm แล้วให้เรียกใช้โปรแกรม Python ด้านล่างจากเทอร์มินัลและเชื่อมต่ออุปกรณ์ raspberrypi ที่ จับคู่จากแอพ BlueTerm ในเวลาเดียวกัน
หลังจากเชื่อมต่อสำเร็จคุณจะเห็นการ เชื่อมต่อ: raspberrypi ที่มุมขวาบนของแอพดังที่แสดงด้านล่าง:
ตอนนี้คุณก็สามารถ ป้อนคำสั่งต่อไปนี้จากการตรวจสอบ BlueTerm ที่จะทำให้รถเคลื่อนที่ไปในทิศทางที่ต้องการ กด 'q' เพื่อออกจากโปรแกรม คุณสามารถ ใช้แป้นพิมพ์การพิมพ์ด้วยเสียงของ Google เพื่อควบคุมรถคันนี้โดยใช้เสียงของคุณ ตรวจสอบการสาธิตทั้งหมดใน วิดีโอที่ ให้ไว้ในตอนท้าย
คำสั่ง:
F - ไปข้างหน้า
B - ย้ายไปข้างหลัง
S - หยุด
L - ไปข้างหน้าย้ายซ้าย
R - เดินหน้าไปทางขวา
A - ถอยหลังไปทางซ้าย
P - ถอยหลังไปทางขวา
ถาม - เลิก
การเขียนโปรแกรม Python:
โปรแกรม Python สำหรับ ควบคุม Raspberry Pi GPIO ด้วย Android App นั้นง่ายมากและอธิบายได้ด้วยตนเอง เพียง แต่เราต้องเรียนรู้เล็กน้อยเกี่ยวกับรหัสที่เกี่ยวข้องกับการสื่อสาร Bluetooth RFCOMM มิฉะนั้นก็เหมือนกับการควบคุมหุ่นยนต์หรือรถยนต์โดยทำให้ขาของมอเตอร์สูงหรือต่ำ โปรแกรมที่สมบูรณ์จะได้รับด้านล่างในส่วนรหัส
ขั้นแรกเราต้องนำเข้าไลบรารีซ็อกเก็ตบลูทู ธซึ่งช่วยให้เราสามารถควบคุมบลูทู ธ ด้วยภาษา Python เราได้ติดตั้งไลบรารีสำหรับสิ่งเดียวกันในส่วนก่อนหน้านี้
นำเข้าบลูทู ธ
จากนั้นเราได้รวมไฟล์ส่วนหัวเพิ่มเติมและกำหนดพินสำหรับมอเตอร์ทำให้ค่าเริ่มต้นต่ำ
นำเข้าเวลานำเข้าบลูทู ธ RPi.GPIO เป็น GPIO m11 = 18 m12 = 23m21 = 24m22 = 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.output (m22, 0)
ด้านล่างนี้เป็นรหัสที่รับผิดชอบในการสื่อสารด้วย Bluetooth:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM) port = 1 server_socket.bind (("", port)) server_socket.listen (1) client_socket, address = server_socket.accept () พิมพ์ "ยอมรับการเชื่อมต่อจาก" ที่อยู่
ที่นี่เราสามารถเข้าใจพวกเขาทีละบรรทัด:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM): การสร้างซ็อกเก็ตสำหรับการสื่อสาร Bluetooth RFCOMM
server_socket.bind (("", พอร์ต): - เซิร์ฟเวอร์ผูกสคริปต์บนโฮสต์ '' กับพอร์ต
server_socket.listen (1): เซิร์ฟเวอร์จะรับฟังการเชื่อมต่อทีละรายการ
client_socket ที่อยู่ = server_socket.accept (): เซิร์ฟเวอร์ยอมรับคำขอเชื่อมต่อของไคลเอ็นต์และกำหนดที่อยู่ mac ให้กับที่อยู่ตัวแปร client_socket คือซ็อกเก็ตของไคลเอนต์
หลังจากนี้เราได้สร้างฟังก์ชันบางอย่างที่รับผิดชอบในการเคลื่อนรถไปในทิศทางที่ต้องการ: def left_side_forward (), def right_side_forward (), def forward (), def left_side_reverse (), def right_side_reverse (), def reverse () def stop (). ฟังก์ชันเหล่านี้จะถูกเรียกตามลำดับเมื่อเรากด L, R, F, A, P, B, S จากแอพ Mobile blueTerm แล้วรถจะเคลื่อนที่ตาม
data = "" ในขณะที่ 1: data = client_socket.recv (1024) พิมพ์ "ได้รับ:% s"% data if (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 ("Quit") break client_socket.close () server_socket.close ()
data = client_socket.recv (1024): รับข้อมูลผ่านซ็อกเก็ตไคลเอนต์ client_socket และกำหนดให้กับข้อมูลตัวแปร สามารถรับอักขระได้สูงสุด 1024 ตัวต่อครั้ง
สุดท้ายหลังจากการเขียนโปรแกรมทั้งหมดให้ปิดการเชื่อมต่อไคลเอนต์และเซิร์ฟเวอร์โดยใช้รหัสด้านล่าง:
client_socket.close () server_socket.close ()