Seite 1 von 1

hex bytes statt ascii strings mit pyserial senden??

Verfasst: Freitag 23. November 2007, 10:21
von andi.huber
Hallo Leute!

Benütze ein python script um mit einem µC über die serielle Schnittstelle zu kommunizieren. Dazu benutze ich die Klasse "serialwin32.py", in der ich aber bis jetzt nur das Objekt

" def write(self, s): ("""Output the given string over the serial port.""") "

gefunden habe. Ich kann mit dieser Funktion nur z.b. einen Ascii String senden z.b. "a", über die serielle wird dann hexadezimal 0x61 gesendet. Jetzt will ich aber keine Strings senden, sondern direkt 0x61. Hätte gerne eine Funktion, welche eine Liste von Bytes über die serielle schickt! Habe es auch schon mit der Funktion "Hex2Ascii" versucht, jedoch enthält diese Funktion nur den Standard - ASCII Satz bis 7F und alles was darüber ist, wird wieder zu einem Leerzeichen (0x00).

Ich hoffe, dass mir jemand helfen kann...

lg

Re: hex bytes statt ascii strings mit pyserial senden??

Verfasst: Freitag 23. November 2007, 10:59
von gerold
andi.huber hat geschrieben:Jetzt will ich aber keine Strings senden, sondern direkt 0x61.
Hallo andi!

Willkommen im Python-Forum!

Du kannst deine Bytes im Bytestring auch hexadezimal angeben.

Code: Alles auswählen

>>> s = "\x61"
>>> s
'a'
>>>
Wenn du ``serial`` und nicht ``serialwin32`` verwendest, dann beleibst du betriebssystemunabhängig. Es wird automatisch das korrekte Modul für das verwendete Betriebssystem ausgewählt.

Code: Alles auswählen

import serial

ser = serial.Serial("COM1")
ser.write("\x61")
ser.close()
mfg
Gerold
:-)

Verfasst: Freitag 23. November 2007, 11:27
von andi.huber
super danke, haut hin!

sehr schnelle beantwortung...wirklich klasse...

noch ein problem!

Verfasst: Freitag 23. November 2007, 15:08
von andi.huber
Habe eine Liste command=[0x26,0x40,0x40] und würde diese HexWerte gerne transparent über die serielle Schnittstelle schicken. Nun habe ich versucht mir einen String zusammenzubauen, d.h. aus jedem HexWert soll ein Ascii String entstehen....


for cnt in range(0, len(command), 1):
string_command="\x"+command[cnt]

Leider haut dies nicht hin, da er jetzt folgendes macht:

string_command="\x26\x40\x40"

und nicht:

string_command="&@@"

hmm. gibs da ne lösung??

danke im vorraus für anregungen oder sogar lösungsvorschläge

Verfasst: Freitag 23. November 2007, 15:24
von keppla
Das kann so nicht klappen. die \ im string werden zur "compilezeit" interpretiert.
Was du möchtest, ginge so:

Code: Alles auswählen

for cmd in commands:
  string_command = chr(cmd)
chr nimmt eine Zahl und gibt dir das dazugehörende Zeichen. die Umkehrfunktion dazu wäre ord(x)

(tipp: nutze die code-tags der forumssoftware)