Соединение Bluetooth между Python и Arduino, PyBluez

#python #android #arduino #bluetooth

#python #Android #arduino #bluetooth

Вопрос:

Я создаю личный проект, который может установить соединение между Python и Arduino через Bluetooth. Мне нужен код Python для подключения к модулю Bluetooth HC-05 и отправки на него символов. Код, который я сделал для Arduino:

 #include <SoftwareSerial.h>
SoftwareSerial bluetooth(10, 11);

void setup()
{
  Serial.begin(9600);
  bluetooth.begin(9600);
}

void loop()
{
  if (bluetooth.available())
  {
    Serial.println(bluetooth.read());
  }
}
 

Код, который я сделал до сих пор для Python:

 import bluetooth

nearby_devices = bluetooth.discover_devices(lookup_names=True)
print("Found {} devices.".format(len(nearby_devices)))

for addr, name in nearby_devices:
    print("  {} - {}".format(addr, name))
 

Каждый раз, когда я запускаю этот код, я получаю эту ошибку:

Обратная трассировка (последний последний вызов):
 Файл "C:UserspeijiOneDriveDocumentosArduinoCarromain.py ", строка 1, в
импорте bluetooth
Ошибка ModuleNotFoundError: нет модуля с именем "bluetooth"

Я уже пробовал: pip install pybluez

Однако я получаю эту ошибку:

введите описание изображения здесь

Ответ №1:

Начиная с версии Python 3.9, соединение Bluetooth с использованием профиля последовательного порта (SPP) стало возможным при стандартной установке Python с использованием библиотеки сокетов.

Модуль HC-05 является сервером, поэтому вам нужно создать клиента. Здесь есть блог, в котором сравниваются сокеты PyBluez и Python: http://blog.kevindoran.co/bluetooth-programming-with-python-3 /

Пример клиента из блога Кевина должен делать то, что вы хотите, если вы обновите информацию об адресе и порте:

 import socket

serverMACAddress = '00:1f:e1:dd:08:3d'  # Put your HC-05 address here
port = 1  # Match the setting on the HC-05 module
s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
s.connect((serverMACAddress,port))
print("Connected. Type something...")
while 1:
    text = input()
    if text == "quit":
        break
    s.send(bytes(text, 'UTF-8'))
s.close()