Найти - Пользователи
Полная версия: Помогите разобраться с pyserial
Начало » Python для новичков » Помогите разобраться с pyserial
1 2
staxbel
PEHDOM
Serial Port Monitor
C 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                                                .                
откуда эти 30 и 31 ума не приложу,
PEHDOM
ну все правильно
staxbel
ser.write(“01\r”.encode())
Вы же строку пишете ‘01’.encode() без параметров кодирует строку ‘01’ в байты используя кодировку юникод, в юникоде ‘0’ это 30 ‘1’ - 31
‘1’ вовсе не равно 1, хотите писать байты, так и передавайте байты.
py.user.next
Попробуй такой код
  
import serial
 
ser = serial.Serial('COM4')
cmd = bytearray([0x0, 0x1, 0xd])
ser.write(cmd)
out = ser.read(10)
print(out)
ser.close()
staxbel

PEHDOM
Вы же строку пишете ‘01’.encode() без параметров кодирует строку ‘01’ в байты используя кодировку юникод, в юникоде ‘0’ это 30 ‘1’ - 31
‘1’ вовсе не равно 1, хотите писать байты, так и передавайте байты.
Да, спасибо, что-то этот момент я упустил.
py.user.next
Попробуй такой код
Огромное спасибо. Работает.
Но появился вопросик, мне на запрос, приходит 22 байта данных, можно ли получить данные только допустим с 8го по 16й?
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
Спасибо. С этим всем разобрался, осталась последняя проблема. Я получаю данные, эти данные я записываю в БД, сделал цикличность выполнения программы, но как остановить при необходимости?
py.user.next
При нажатии в 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB