- Cài đặt Gói bắt buộc cho Giao tiếp Bluetooth:
- Ghép nối thiết bị với Raspberry Pi qua Bluetooth:
- Chọn xe đồ chơi:
- Sơ đồ mạch và giải thích:
- Điều khiển ô tô từ xa với ứng dụng Android BlueTerm:
- Lập trình Python:
Raspberry Pi rất phổ biến cho các dự án IoT vì khả năng giao tiếp không dây liền mạch qua internet. Raspberry Pi 3 có Wi-Fi và Bluetooth sẵn có, và Bluetooth là một Giao thức truyền thông không dây rất phổ biến. Hôm nay chúng ta sẽ cùng nhau chế tạo Xe ô tô điều khiển từ xa bằng Raspberry Pi 3 và Bluetooth, ở đây chúng ta sẽ sử dụng Smart Phone làm điều khiển xe từ xa. Trước đây chúng tôi đã tạo ra chiếc xe RC này bằng cách sử dụng Arduino.
Ở đây chúng tôi đang sử dụng Raspberry Pi 3 có Bluetooth sẵn có, vì vậy chúng tôi không cần sử dụng bất kỳ dongle USB Bluetooth bên ngoài nào. Ở đây chúng tôi đang sử dụng giao thức Bluetooth RFCOMM cho giao tiếp không dây.
Lập trình cho Bluetooth bằng Python tuân theo mô hình lập trình ổ cắm và giao tiếp giữa các thiết bị Bluetooth được thực hiện thông qua ổ cắm RFCOMM. RFCOMM (Giao tiếp tần số vô tuyến) là một Giao thức Bluetooth cung cấp các cổng nối tiếp RS-232 được mô phỏng và còn được gọi là Mô phỏng Cổng Nối tiếp. Cấu hình cổng nối tiếp Bluetooth dựa trên giao thức này. RFCOMM rất phổ biến trong các ứng dụng Bluetooth vì hỗ trợ rộng rãi và API có sẵn công khai. Nó bị ràng buộc với giao thức L2CAP.
Nếu bạn có Raspberry Pi 2, thì bạn cần sử dụng dongle Bluetooth bên ngoài hoặc mô-đun Bluetooth HC-06. Kiểm tra các dự án trước đây của chúng tôi để sử dụng các thiết bị Bluetooth bên ngoài này: Điều khiển Raspberry Pi GPIO bằng Ứng dụng Android qua Bluetooth và Thiết bị gia dụng được điều khiển bằng Raspberry Pi.
Cài đặt Gói bắt buộc cho Giao tiếp Bluetooth:
Trước khi bắt đầu, chúng ta cần cài đặt một số phần mềm để thiết lập giao tiếp Bluetooth trong Raspberry Pi. Bạn nên chuẩn bị sẵn thẻ nhớ đã cài đặt Raspbian Jessie với Raspberry Pi. Kiểm tra bài viết này để cài đặt hệ điều hành Raspbian và bắt đầu với Raspberry Pi. Vì vậy, trước tiên chúng ta cần cập nhật Raspbian bằng các lệnh dưới đây:
sudo apt-get cập nhật sudo apt-get nâng cấp
Sau đó, chúng tôi cần cài đặt một số gói liên quan đến Bluetooth:
sudo apt-get install bluetooth blueman bluez
Sau đó khởi động lại Raspberry Pi:
khởi động lại sudo
BlueZ là một dự án mã nguồn mở và ngăn xếp giao thức Bluetooth chính thức của Linux. Nó hỗ trợ tất cả các giao thức Bluetooth cốt lõi và hiện trở thành một phần của Nhân Linux chính thức.
Blueman cung cấp giao diện Desktop để quản lý và điều khiển các thiết bị Bluetooth.
Cuối cùng, chúng ta cần Thư viện python cho giao tiếp Bluetooth để chúng ta có thể gửi và nhận dữ liệu thông qua RFCOMM bằng ngôn ngữ Python:
sudo apt-get install python-bluetooth
Cũng cài đặt các thư viện hỗ trợ GPIO cho Raspberry Pi:
sudo apt-get install python-rpi.gpio
Bây giờ chúng ta đã hoàn tất việc cài đặt các gói bắt buộc cho giao tiếp Bluetooth trong Raspberry Pi.
Ghép nối thiết bị với Raspberry Pi qua Bluetooth:
Việc ghép nối Thiết bị Bluetooth, như điện thoại di động, với Raspberry Pi rất dễ dàng. Ở đây, chúng tôi đã ghép nối Điện thoại thông minh Android của mình với Raspberry Pi. Trước đây chúng tôi đã cài đặt BlueZ trong Pi, cung cấp tiện ích dòng lệnh có tên “bluetoothctl” để quản lý các thiết bị Bluetooth của chúng tôi.
Bây giờ mở tiện ích bluetoothctl bằng lệnh dưới đây:
sudo bluetoothctl
Bạn có thể kiểm tra tất cả các lệnh của tiện ích bluetoothctl bằng cách gõ 'trợ giúp' . Bây giờ chúng ta cần nhập các lệnh dưới đây theo thứ tự nhất định:
# bật nguồn # tác nhân trên # có thể phát hiện trên # có thể ghép nối trên # quét trên
Sau lệnh cuối cùng “quét trên”, bạn sẽ thấy thiết bị Bluetooth (Điện thoại di động) của mình trong danh sách. Đảm bảo rằng điện thoại di động của bạn đã bật Bluetooth và các thiết bị lân cận có thể nhìn thấy. Sau đó, sao chép địa chỉ MAC của thiết bị của bạn và ghép nối nó bằng cách sử dụng lệnh đã cho:
đôi
Sau đó, bạn sẽ được nhắc nhập Mật mã hoặc Ghim trong Bảng điều khiển đầu cuối, sau đó nhập mật mã vào đó và nhấn enter. Sau đó, nhập cùng một mật mã vào điện thoại di động của bạn khi được nhắc và bây giờ bạn đã ghép nối thành công với Raspberry Pi. Chúng tôi cũng đã giải thích toàn bộ quá trình này trong Video được đưa ra trong Hướng dẫn điều khiển GPIO trước đó. Đây là liên kết trực tiếp YouTube.
Như đã nói trước đó, bạn cũng có thể sử dụng giao diện Máy tính để bàn để ghép nối Điện thoại di động. Sau khi cài đặt Blueman, bạn sẽ thấy biểu tượng Bluetooth ở bên phải màn hình Raspberry Pi của mình như hình dưới đây, bằng cách sử dụng nó, bạn có thể dễ dàng thực hiện ghép nối.
Chọn xe đồ chơi:
Trong dự án Xe điều khiển Raspberry Pi này, chúng tôi đã sử dụng một chiếc ô tô đồ chơi để trình diễn. Ở đây chúng tôi đã chọn một chiếc ô tô đồ chơi RF với tính năng lái trái-phải. Sau khi mua chiếc xe này, chúng tôi đã thay thế mạch RF của nó bằng mạch Raspberry của chúng tôi. Chiếc xe này có hai động cơ điện một chiều, một động cơ để quay hai bánh trước và một để quay hai bánh sau. Động cơ phía trước được sử dụng để chỉ đường cho ô tô có nghĩa là rẽ trái hoặc phải (giống như tính năng lái ô tô thực). Và động cơ phía sau được sử dụng để điều khiển xe theo hướng tiến và lùi. Một Bluetooth của Raspberry được sử dụng để nhận lệnh không dây từ điện thoại Android để điều khiển ô tô.
Bạn có thể sử dụng bất kỳ ô tô đồ chơi nào có hai Động cơ DC để quay Bánh trước và Bánh sau.
Sơ đồ mạch và giải thích:
Trong Ô tô điều khiển từ xa này, chúng ta chỉ cần kết nối Raspberry Pi với hai động cơ sử dụng mô-đun L293D. Để cấp nguồn cho Raspberry Pi và ô tô, chúng tôi đã sử dụng một bộ sạc dự phòng di động. Ngân hàng điện di động đủ để cung cấp năng lượng cho Raspberry Pi và động cơ của ô tô nhưng khi chúng ta đặt ngân hàng điện trên ô tô thì do trọng lượng nặng của ngân hàng điện di động, ô tô sẽ không thể di chuyển đúng cách. Vì vậy, chúng tôi khuyên bạn nên sử dụng bộ nguồn trọng lượng thấp hoặc pin Lithium để cấp nguồn cho hệ thống. Tất cả các kết nối được hiển thị trong sơ đồ mạch bên dưới. Ngoài ra, hãy xem phần Người máy của chúng tôi để tìm hiểu thêm về cách điều khiển Động cơ bằng các công nghệ khác nhau.
Lưu ý: không đặt quá 5v cho pi mâm xôi.
Mạch này đã được thực hiện trên Perf Board cho dự án này, để có ít trọng lượng hơn trên xe.
Điều khiển ô tô từ xa với ứng dụng Android BlueTerm:
Bây giờ sau khi thiết lập tất cả mọi thứ và thử ghép nối thành công Điện thoại thông minh qua bluetooth, chúng tôi cần cài đặt Ứng dụng Android để giao tiếp với Raspberry Pi bằng Bộ điều hợp nối tiếp Bluetooth, để chúng tôi có thể điều khiển các chân GPIO của Raspberry Pi. Như đã nói trước đó, giao thức RFCOMM / SPP mô phỏng giao tiếp nối tiếp qua Bluetooth, vì vậy chúng tôi đã cài đặt tại đây Ứng dụng BlueTerm hỗ trợ giao thức này.
Bạn cũng có thể sử dụng bất kỳ Ứng dụng đầu cuối Bluetooth nào khác hỗ trợ giao tiếp qua ổ cắm RFCOMM.
Bây giờ sau khi tải xuống và cài đặt Ứng dụng BlueTerm, hãy chạy Chương trình Python cung cấp bên dưới từ thiết bị đầu cuối và kết nối thiết bị raspberrypi đã ghép nối từ Ứng dụng BlueTerm cùng một lúc.
Sau khi kết nối thành công bạn sẽ thấy kết nối: raspberrypi ở góc trên cùng bên phải của Ứng dụng như hình bên dưới:
Bây giờ bạn chỉ cần nhập các lệnh sau từ ứng dụng BlueTerm để điều khiển xe di chuyển theo hướng mong muốn. Nhấn 'q' để thoát khỏi chương trình. Bạn có thể sử dụng Bàn phím nhập bằng giọng nói của Google để điều khiển ô tô này bằng Giọng nói của mình. Kiểm tra bản trình diễn hoàn chỉnh trong Video được đưa ra ở cuối.
Lệnh:
F - Chuyển tiếp
B - Di chuyển lùi
S - Dừng lại
L - Chuyển tiếp sang trái
R - Chuyển tiếp sang phải
A - Di chuyển sang trái Lùi lại
P - Lùi sang phải Di chuyển
Q - Thoát
Lập trình Python:
Chương trình Python để điều khiển Raspberry Pi GPIO bằng Ứng dụng Android rất đơn giản và dễ hiểu. Chỉ chúng ta cần tìm hiểu một chút về mã liên quan đến giao tiếp Bluetooth RFCOMM. Nếu không, nó giống như điều khiển bất kỳ rô bốt hoặc ô tô nào bằng cách đặt chốt của động cơ cao hoặc thấp. Chương trình hoàn chỉnh được đưa ra bên dưới trong phần Mã.
Đầu tiên, chúng ta cần nhập thư viện ổ cắm Bluetooth cho phép chúng ta điều khiển Bluetooth bằng ngôn ngữ Python; chúng tôi đã cài đặt thư viện cho cùng một trong phần trước.
nhập Bluetooth
Sau đó, chúng tôi đưa thêm một số tệp tiêu đề và xác định chân cho động cơ đặt chúng ở mức thấp mặc định.
nhập thời gian nhập bluetooth nhập RPi.GPIO dưới dạng GPIO m11 = 18 m12 = 23 m21 = 24 m22 = 25 GPIO.setwarnings (Sai) 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)
Dưới đây là mã chịu trách nhiệm cho giao tiếp Bluetooth:
server_socket = bluetooth.Bl BluetoothSocket (bluetooth.RFCOMM) port = 1 server_socket.bind (("", port)) server_socket.listen (1) client_socket, address = server_socket.accept () in "Kết nối được chấp nhận từ", địa chỉ
Ở đây chúng ta có thể hiểu chúng từng dòng một:
server_socket = bluetooth.Bl BluetoothSocket (bluetooth.RFCOMM): Tạo ổ cắm cho giao tiếp Bluetooth RFCOMM.
server_socket.bind (("", cổng): - Máy chủ liên kết tập lệnh trên máy chủ '' với cổng.
server_socket.listen (1): Máy chủ lắng nghe để chấp nhận một kết nối tại một thời điểm.
client_socket, address = server_socket.accept (): Máy chủ chấp nhận yêu cầu kết nối của máy khách và gán địa chỉ mac cho địa chỉ biến, client_socket là ổ cắm của máy khách
Sau đó, chúng tôi đã tạo một số hàm chịu trách nhiệm cho việc di chuyển xe theo hướng mong muốn: def left_side_ntic (), def right_side_ionary (), def forward (), def left_side_reverse (), def right_side_reverse (), def reverse () def stop (). Các chức năng này sẽ được gọi lần lượt khi chúng ta nhấn L, R, F, A, P, B, S từ ứng dụng Mobile blueTerm và xe sẽ di chuyển tương ứng.
data = "" while 1: data = client_socket.recv (1024) print "Đã nhận:% s"% data if (data == "F"): forward () elif (data == "L"): left_side_earch () elif (data == "R"): right_side_osystem () 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): Nhận dữ liệu thông qua client_socket socket khách hàng và gán cho dữ liệu biến. Có thể nhận tối đa 1024 ký tự cùng một lúc.
Cuối cùng, sau khi lập trình xong, hãy đóng kết nối máy khách và máy chủ bằng đoạn mã dưới đây:
client_socket.close () server_socket.close ()