Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2021 14:56:41

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

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 ума не приложу,

Отредактировано staxbel (Март 14, 2021 16:15:53)

Офлайн

#2 Март 15, 2021 09:51:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

ну все правильно

staxbel
ser.write(“01\r”.encode())
Вы же строку пишете ‘01’.encode() без параметров кодирует строку ‘01’ в байты используя кодировку юникод, в юникоде ‘0’ это 30 ‘1’ - 31
‘1’ вовсе не равно 1, хотите писать байты, так и передавайте байты.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 15, 2021 09:53:11)

Офлайн

#3 Март 15, 2021 12:55:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

Попробуй такой код

  
import serial
 
ser = serial.Serial('COM4')
cmd = bytearray([0x0, 0x1, 0xd])
ser.write(cmd)
out = ser.read(10)
print(out)
ser.close()



Офлайн

#4 Март 28, 2021 21:00:22

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial


PEHDOM
Вы же строку пишете ‘01’.encode() без параметров кодирует строку ‘01’ в байты используя кодировку юникод, в юникоде ‘0’ это 30 ‘1’ - 31
‘1’ вовсе не равно 1, хотите писать байты, так и передавайте байты.
Да, спасибо, что-то этот момент я упустил.
py.user.next
Попробуй такой код
Огромное спасибо. Работает.
Но появился вопросик, мне на запрос, приходит 22 байта данных, можно ли получить данные только допустим с 8го по 16й?

Офлайн

#5 Март 28, 2021 22:21:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

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'
>>>



Офлайн

#6 Март 29, 2021 01:40:01

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

Спасибо. С этим всем разобрался, осталась последняя проблема. Я получаю данные, эти данные я записываю в БД, сделал цикличность выполнения программы, но как остановить при необходимости?

Отредактировано staxbel (Март 29, 2021 02:01:16)

Офлайн

#7 Март 29, 2021 05:07:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

При нажатии в 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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version