Проблемы с закрытием портов с помощью pyserial на малине Pi 3

Я использую PySerial на Raspberry Pi 3b для получения данных с внешнего устройства Bluetooth ( FireFly . Я могу подключиться к устройству и получать данные. Но когда я закрываю соединение с помощью функции close (), устройство, похоже, не отключается должным образом от малины ( это частично указано зеленым светом на Firefly, который не меняет цвета светодиодов после отключения соединения. Ниже приведен код, который я пытаюсь работать. Я попытался использовать PySerial 2.7 и PySerial 3.3.0, а также python 2.7 .9 /10 и python 3.4. Ни одно из этих изменений не имеет значения.

import serial
import sys
from timeit import default_timer as timer
port = serial.Serial(
        baudrate=115200,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=1

    )
port.port = '/dev/rfcomm1'
port.open()

sys.stdout.flush()
time = timer()
while timer()-time < 10:
    print(port.read())

port.flush()
port.flushInput()
port.flushOutput()
port.close()

Если я попытаюсь использовать minicom для получения данных, он работает безупречно, если я ранее не использовал скрипт python, и в этом случае он не получает никаких данных, кроме случаев, когда он будет получать данные примерно через 5 минут.

Ниже приведен снимок экрана после того, как скрипт был выполнен и закончен. FireFly все еще подключен, что приводит к тому, что программа не сможет запускаться снова до перезапуска устройства.

1

Любая помощь будет принята с благодарностью:)

4 голоса | спросил Johan Edstedt 11 Maypm17 2017, 19:14:16

1 ответ


3

Вы не отсоединяете устройство. Фактически, вы вообще не отключите устройство. Устройство FireFly подключено к вашему RPi, а не к вашему приложению Python.

Ваш скрипт читает последовательный порт на нашем устройстве, а затем закрывает его. Это очень похоже на открытие файла. Если у вас есть код, который открывает файл, записывает на него и закрывает его.

# Essentially, what you're doing is:
f = open("file.txt", "w")
f.write("hello, world")
f.close() # You wouldn't expect this to delete your file, right?

Самый простой способ фактически отключить устройство FireFly, вероятно, будет использовать системный вызов.

bluez-test-device disconnect xx:xx:xx:xx:xx:xx
ответил Jacobm001 11 Maypm17 2017, 19:34:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132