1

I am trying to send a string variable contains the command.

Like this:

value="[0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]"
self.s.write(serial.to_bytes(value))

The above one fails. Won't give any error.

But it's working when I send a value like this:

self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))

I also tried sending string like this:

self.s.write(serial.to_bytes(str(value)))

Still not working. Can someone please let me know how to send the value by storing in string?

I want to do this thing:

value="[0x"+anotherstring+",0x"+string2+"0x33, 0x0a]"

and send the value.

Thanks!

2
  • Are you using Python 2 or Python 3? In Python 3 try s.write(b"Hello") to send a sequence of bytes instead of an unicode string. Commented Sep 13, 2016 at 21:23
  • @Dietrich i am using 2.7 Commented Sep 14, 2016 at 7:36

2 Answers 2

4

serial.to_bytes takes a sequence as input. You should remove double quotes around value to pass a sequence of integers instead of a str representing the sequence you want to pass:

value = [0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]
self.s.write(serial.to_bytes(value))  # works now

In the first case, you sent a sequence of bytes representing "[0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]". Now, you will send the sequence [0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a] as expected.


If you want to send a string, just send it as bytes:

# Python 2
self.s.write('this is my string')
text = 'a string'
self.s.write(text)

# Python 3
self.s.write(b'this is my string')
text = 'a string'
self.s.write(text.encode())

And for a sequence:

for value in values:
    # Python 2
    self.s.write(value)

    # Python 3
    self.s.write(value.encode())
Sign up to request clarification or add additional context in comments.

9 Comments

str is also a sequence... it just so happens that the representation of a list of ints with hex notation is different than the actual list itself...
I want to join multiple values like this value="[0x"+anotherstring+",0x"+string2 how can i do this?
@JonClements yes I know that, but in this case, it is not what arslion is seeking for.
@Tiger-222 if they're only able to receive the data as a string and it's not hard-coded that way so they can remove the quote marks, then I can only guess the OP is after ast.literal_eval or else the answer is literally - don't send it as a string :)
So there is no other way to attach a string to a serial value?
|
3

If passing a list of integers works for you then just convert your hexadecimal representations into integers and put them in a list.

Detailed steps:

  1. Open a python interpreter

  2. Import serialand open a serial port, call it ser.

  3. Copy the code below and paste it in the python interpreter:

The code:

command = '310a320a330a'
hex_values = ['0x' + command[0:2],  '0x' + command[2:4],
              '0x' + command[4:6],  '0x' + command[6:8],
              '0x' + command[8:10], '0x' + command[10:12]]
int_values = [int(h, base=16) for h in hex_values]
ser.write(serial.to_bytes(int_values))

It will have the same effect that just this:

ser.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))

actually you can test that int_values == [0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a] is True so you are writing exactly the same thing.

9 Comments

I have this 310a320a330a hex data converted from a string using encode('hex') I want to convert hex data to this: [0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a] and then send it as a variable to this s.write(serial.to_bytes(value))
That's exactly what the code in my answer does except (a) I used the name int_values instead of value for clarity, feel free to change it to your heart's content (b) I assumed your hex data is already split into individual bytes because that's how it appears to be in your question, feel free to edit it if you think something is missing.
done exactly the same thing you did, gives me syntax error on Python 2.7 @goyo
@arslion you must have done something different, I double checked and there are no syntax errors in the code I posted. Of course you will get a NameError if string1, string2 and selfare undefined, but no syntax errors.
string is defined already. sendcmd=[0x+command[0:2],0x+command[2:4],0x+command[4:6],0x+command[6:8],0x+command[8:10],0x+command[10:12],0x+command[12:14],0x0D] ^ SyntaxError: invalid token .This is the error
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.