Softwareentwicklung
›
Thread
binaere Werte an /dev/ttyUSB1
U
usuru
Gast
20.03.2021 19:21
#6628010
Ich muss einen Sensor über eine ser. Schnittstelle /dev/ttyUSB1
ansteueren, die Codefolge ist binaer
(\xFF\x01\x86\x00\x00\x00\x00\x00\x79). In Python3 habe ich das so
gemacht:
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3
4 import time , serial
5
6 geraet = ' /dev/ttyUSB1 '
7
8 ser = serial . Serial ( port = geraet , baudrate = 9600 , bytesize = 8 , parity = ' N ' , stopbits = 1 , timeout = 10 , xonxoff = 0 , rtscts = 0 , dsrdtr = 0 )
9 ser . flushOutput ()
10 ser . flushInput ()
11
12 ser . write ( ' \xFF\x01\x86\x00\x00\x00\x00\x00\x79 ' )
13
14 data = ser . read ( 9 )
15 ser . close ()
16
17 wert = data [ 2 ] * 256 + data [ 3 ]
18 print ( data [ 0 ], data [ 1 ], data [ 2 ], data [ 3 ], data [ 4 ], data [ 5 ], data [ 6 ], data [ 7 ], data [ 8 ], wert )
Prompt meckert Python 'unicode strings are not supported':
1 Traceback (most recent call last):
2 File "./mh.py", line 12, in <module>
3 ser.write('\xFF\x01\x86\x00\x00\x00\x00\x00\x79')
4 File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 532, in write
5 d = to_bytes(data)
6 File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 63, in to_bytes
7 raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
8 TypeError: unicode strings are not supported, please encode to bytes: 'ÿ\x01\x86\x00\x00\x00\x00\x00y'
Wie mache ich das denn?
JM
Jim M.
(turboj)
20.03.2021 22:02
#6628201
Manuell nach Bytes konvertieren:
1 ser.write('\xFF\x01\x86\x00\x00\x00\x00\x00\x79'.encode("ascii"))
Default Encoding ist nicht mehr ASCII.
U
usuru
Gast
20.03.2021 22:15
#6628216
Leider nicht zielführend 1 Traceback (most recent call last):
2 File "./mh.py", line 12, in <module>
3 ser.write('\xFF\x01\x86\x00\x00\x00\x00\x00\x79'.encode('ascii'))
4 UnicodeEncodeError: 'ascii' codec can't encode character '\xff' in position 0: ordinal not in range(128)
Jawoll, weil du die als ASCII interpretieren willst...
programiz.com schrieb:
> rList = [1, 2, 3, 4, 5]
> arr = bytes(rList)
> print(arr)
> Output
> b'\x01\x02\x03\x04\x05'
//mf
U
usuru
Gast
20.03.2021 22:23
#6628226
1 ser.write(b'\xFF\x01\x86\x00\x00\x00\x00\x00\x79')
Damit geht's.
Danke an alle.
so sollte das eigentlich aussehen:
programiz.com schrieb:
> rList = [1, 2, 3, 4, 5]
>
> arr = bytes(rList)
>
> print(arr)
>
> Output
>
> b'\x01\x02\x03\x04\x05'
Oder wie du es gemacht hast...
mfg mf
↑ Nach oben
← Zurück zu Softwareentwicklung
Antwort schreiben