Raspberry Pi 3B+ BLE связь с Arduino Nano 33 IOT

У меня есть Arduino Nano 33 IOT, и он использует BLE. Я хочу, чтобы он разговаривал с моим Pi 3B+ и отправлял все свои данные датчиков. Я не могу найти способ сделать это с помощью Python для Pi и библиотеки ArduinoBLE для моего Nano IoT. Возможно ли это?

, 👍1

Обсуждение

это описывает сторону Arduino ... вы должны будете выяснить сторону RPi, так как это не по теме здесь .. https://www.arduino.cc/en/Reference/ArduinoBLE, @jsotola

Ладно, спасибо., @DragonflyRobotics


1 ответ


1

Для полноты, кажется, что соответствующая библиотека Python может быть установлена с:

pip3 install adafruit-circuitpython-ble

Тестовый код, используемый с кодом Arduino "Echo" из библиотеки ArduinoHardwareBLE, приведен ниже. Это было обновлено, чтобы позволить вам выбрать имя устройства (здесь, MY_BLE), а не любое случайное устройство, которое имеет возможность UART. Он также позволяет отправить небольшой файл из нескольких строк, с"#", обозначающим комментарий (первый символ в строке). ESC и возврат выходят из программы.

# Подключение к службе "eval()" через BLE UART.
 
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService

ble = BLERadio()
 
uart_connection = None

def send_stuff(s):
    uart_service.write(s.encode("utf-8"))
    uart_service.write(b'\n')
    readline=uart_service.readline().decode("utf-8")
    while(len(readline)>0):
        print(readline)
        readline=uart_service.readline().decode("utf-8")
            
while True:
    

    if not uart_connection:
        print("Trying to connect...")
        print("ESC then RETURN to exit.")
        for adv in ble.start_scan(ProvideServicesAdvertisement):
            if UARTService in adv.services:
                regular_name = adv.complete_name
                if(regular_name=='MY_BLE'):
                    uart_connection = ble.connect(adv)
                    print("Connected")
                    # for some reason, we have to read a line...
                    uart_service = uart_connection[UARTService]
                    print(uart_service.readline().decode("utf-8"))
                    break
        ble.stop_scan()
 
    if uart_connection and uart_connection.connected:
        uart_service = uart_connection[UARTService]
        while uart_connection.connected:
            s = input("Prompt: ")
            if(len(s)>0):
                if(ord(s[0])==27):
                    print("done.")
                    exit()
                else:
                    
                    # Check if "!" character is used; if so, send contents of a file
                    if(s[0]=="!"):
                        print("sending commands")
                        count=0
                        file1=open('commands.txt','r')
                        Lines=file1.readlines()
                        for line in Lines:
                            count=count+1
                            tmp=line.strip()
                            if(len(tmp)>0):
                                if(tmp[0]=='#'):
                                    print("comment:" + tmp)
                                else:
                                    print("Line{}: {}".format(count, tmp))
                                    send_stuff(tmp)
                
                    else:
                        send_stuff(s)
,

Будет ли это работать на Pi 3B+, потому что я не знаю, работает ли он., @DragonflyRobotics

Если вы добавите адаптер BT, вы должны иметь такую возможность., @asylumax

Спецификации на 3B+ говорят, что у него есть BLE, так что это может сработать. Однако я не тестировал его; только с системой Ubuntu 20.04 LTS с (Anaconda) Python 3.7.7., @asylumax