Я пытаюсь понять, почему я не могу несколько раз открыть один и тот же последовательный порт с помощью API Digi-Xbee (импорт digi.xbee) для python, а с API Xbee (импорт xbee) для python Я могу.
Когда я запускаю приведенный ниже код, возникает исключение digi.xbee.exception.InvalidOperatingModeException: Could not determine operating mode
.
from digi.xbee.devices import *
import time
import codecs
class start(object):
while True:
xbeeApi2 = DigiMeshDevice(port='/dev/ttyUSB0', baud_rate=9600)
xbeeApi2.open()
time.sleep(0.5)
message = xbeeApi2.read_data(timeout=None)
if message is not None:
print(codecs.decode(message.data, 'utf-8'))
time.sleep(1)
Модуль XBee - это S2 C (XB24 C), установленный как Digime sh 2.4 TH, прошивка 9002 (новейшая) с USB-ключом. Python - это 3,7, и мое основное оборудование - это Raspberry Pi 3 B + под управлением Debian.
Любая помощь приветствуется.
EDIT 1 Исключение возникает, когда для во второй раз выполняется {xbeeApi2.open ()}. Фактически, мой исходный код имеет несколько потоков, которые импортируют класс, в котором открыт порт, много раз до того, как предыдущий поток успел его закрыть. Ниже приведен "исходный" фрагмент кода, который работает нормально:
from xbee import ZigBee
import serial
import time
class start(object):
while True:
ser = serial.Serial('/dev/ttyUSB0', 9600)
xbeeApi2 = ZigBee(ser, escaped=True) # S2 e S2C
time.sleep(0.5)
message = ''
try:
message = xbeeApi2.wait_read_frame(timeout=0.5)
except:
pass #timeout exception
if message is not None:
print(message)
time.sleep(1)