hex bytes statt ascii strings mit pyserial senden??

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
andi.huber
User
Beiträge: 3
Registriert: Freitag 23. November 2007, 10:02

Freitag 23. November 2007, 10:21

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 23. November 2007, 10:59

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
:-)
Zuletzt geändert von gerold am Freitag 23. November 2007, 11:56, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
andi.huber
User
Beiträge: 3
Registriert: Freitag 23. November 2007, 10:02

Freitag 23. November 2007, 11:27

super danke, haut hin!

sehr schnelle beantwortung...wirklich klasse...
andi.huber
User
Beiträge: 3
Registriert: Freitag 23. November 2007, 10:02

Freitag 23. November 2007, 15:08

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
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Freitag 23. November 2007, 15:24

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)
Antworten