#python-3.x #serial-port
Вопрос:
Я соединил свои контакты RPi3 Tx и Rx вместе. Я использую следующий код:
import serial
from time import sleep
ser = serial.Serial(
port='/dev/ttyS0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=10
)
while True:
ser.write(0)
sleep(1)
incoming = ser.read(ser.inWaiting())
print(incoming)
Это печатает пусто b''
. Я могу сделать это: '0'.encode()
и тогда я получу b'0'
.
Мне нужно отправить пакеты данных на датчик: bytearray({0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79})
. Проблема в том, что в обратной связи я получаю неполный пакет, и он вышел из строя. Похоже, что после первого отправленного » 0 » он завершается или происходит что-то еще. Как правильно отправлять такие команды? Я также пытался ser.read(9)
, так как ожидаю 9 байт, но он все равно отключает его.
Ответ №1:
Проблема заключается в
bytearray({0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79})
где {...,}
синтаксис используется для построения набора. Это неупорядоченный список уникальных предметов. Следовательно, несколько нулевых байтов становятся только одним, а порядок произвольный. Вместо этого используйте список:
data = bytearray((0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79))
ser.write(data)
Комментарии:
1. Я проверю вечером, и если это правильно, вы получите большой 1 и зеленую галочку 🙂 Я потерял довольно много нервов из-за этого 😀
2. Большое спасибо! Это действительно было проблемой.