Отправка/получение данных от/на Raspberry Pi к/от Arduino с помощью HM-10 (модуль Bluetooth LE)

Моя цель — отправить строку с Arduino через Bluetooth-модуль HM-10 на Rasperry Pi. Я сделал это сегодня, подключив HM-10 на Arduino к другому модулю HM-10 (главный/подчиненный), а затем от этого модуля к Raspberry Pi через последовательный USB-адаптер, который дает мне /dev/ttyUSB0, который я могу прочитать. Я хотел бы просто подключить Arduino HM-10 напрямую к Bluetooth Raspberry Pi без каких-либо дополнительных модулей.

Я нашел приложение "Arduino Bluetooth Controller" (Android), которое может подключаться к модулю, и последовательная связь работает.

У меня также есть модуль HC-05, и я могу решить эту проблему с помощью rfcomm bind 2 , но это не работает на HM-10.

Я открыт для любого решения, которое может это сделать. Либо привяжите последовательную связь с помощью rfcomm (или альтернативы), как на HC-05, либо попробуйте создать приложение, которое делает то же самое, что и приложение для Android, только на Raspberry Pi.

, 👍0


1 ответ


Лучший ответ:

1

HM-10 — это устройство BLE. Вам нужно будет понимать программирование BLE, которое сильно отличается от классического Bluetooth. Стандартной службы BLE для последовательной связи не существует. Лучший способ использовать BLE на Pi — использовать

  • модули noble и bleno для node.js .
  • Или начните с поиграйте с gatttool.

Если вы подходите для Phyton: Устройство в стиле HM-10 будет отправлять уведомления, которые может прочитать устройство BLE Pi. В основном вам нужно прикрепите функцию обратного вызова «делегата» к периферийному объекту, а затем ждите уведомлений. Затем обратный вызов может обрабатывать полученные данные. Вам нужно будет установить bluepy lib на PI. Этот пример кода записывает данные в устройство Arduino HC-10

import bluepy.btle as btle

p = btle.Peripheral("AA:BB:CC:DD:EE:FF")
s = p.getServiceByUUID("0000ffe0-0000-1000-8000-00805f9b34fb")
c = s.getCharacteristics()[0]

c.write(bytes("Hello world\n", "utf-8"))
p.disconnect()   

Вот код для чтения с устройства Arduino HC-10

import bluepy.btle as btle

class ReadDelegate(btle.DefaultDelegate):
    def handleNotification(self, cHandle, data):
        print(data.decode("utf-8"))

p = btle.Peripheral("AA:BB:CC:DD:EE:FF")
p.withDelegate(ReadDelegate())

while True:
    while p.waitForNotifications(1):
        pass

p.disconnect()
,

В итоге я использовал bluepy, как в вашем примере, и с некоторым разделением входящих данных (кажется, ограничение в 20 байтов) все отлично работает! Спасибо!, @miccet