Форум сайта python.su
PEHDOMC serial port monitor разобрался, сейчас посмотрю что там происходит/
Serial Port Monitor
[14/03/2021 16:13:23] Written data (COM4) 30 31 01
[14/03/2021 16:15:13] Written data (COM4) 06 .
Отредактировано staxbel (Март 14, 2021 16:15:53)
Офлайн
ну все правильно
staxbelВы же строку пишете ‘01’.encode() без параметров кодирует строку ‘01’ в байты используя кодировку юникод, в юникоде ‘0’ это 30 ‘1’ - 31
ser.write(“01\r”.encode())
[code python][/code]
Отредактировано PEHDOM (Март 15, 2021 09:53:11)
Офлайн
Попробуй такой код
import serial ser = serial.Serial('COM4') cmd = bytearray([0x0, 0x1, 0xd]) ser.write(cmd) out = ser.read(10) print(out) ser.close()
Офлайн
PEHDOMДа, спасибо, что-то этот момент я упустил.
Вы же строку пишете ‘01’.encode() без параметров кодирует строку ‘01’ в байты используя кодировку юникод, в юникоде ‘0’ это 30 ‘1’ - 31
‘1’ вовсе не равно 1, хотите писать байты, так и передавайте байты.
py.user.nextОгромное спасибо. Работает.
Попробуй такой код
Офлайн
staxbel
мне на запрос, приходит 22 байта данных, можно ли получить данные только допустим с 8го по 16й?
reply = ser.read(22) out = reply[7:16]
>>> arr = bytes(range(22)) >>> arr b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15' >>> arr[7:16] b'\x07\x08\t\n\x0b\x0c\r\x0e\x0f' >>>
Офлайн
Спасибо. С этим всем разобрался, осталась последняя проблема. Я получаю данные, эти данные я записываю в БД, сделал цикличность выполнения программы, но как остановить при необходимости?
Отредактировано staxbel (Март 29, 2021 02:01:16)
Офлайн
При нажатии в Linux комбинации Ctrl+C или в Windows комбинации Ctrl+Z
#!/usr/bin/env python3 def f(): n = 1 while True: print(n) n += 1 try: f() except KeyboardInterrupt: print('exit')
[guest@localhost py]$ python int.py
1
2
...
162915
162916
162917
^Cexit
Офлайн