'How to write and read binary (not ASCII encoded) to Arduino with pyserial

I need to make a Raspberry Pi communicate with an Arduino. I will only need values between 0 and 180, and this is within the range of a single byte so I want to only send the value in binary, and not send it with ASCII encoding for faster transfer (i.e.: if I want to write a "123" to the Arduino, I want 0x7B to be sent, and not the ASCII codes for 1, then 2, then 3 (0x31,0x32, 0x33).

In my testing I have been trying to write a Python program that will take an integer within that range and then send it over serial in binary.

Here is a test I was trying. I want to write a binary number to the Arduino, and then have the Arduino print out the value it received.

Python code:

USB_PORT = "/dev/ttyUSB0"  # Arduino Uno WiFi Rev2

import serial

try:
   usb = serial.Serial(USB_PORT, 9600, timeout=2)
except:
   print("ERROR - Could not open USB serial port.  Please check your port name and permissions.")
   print("Exiting program.")
   exit()

while True:
    command = int(input("Enter command: "))
    usb.write(command)
    
    value = (usb.readline())
    print("You sent:", value)

And here is the Arduino code

byte command;
void setup()
{
    Serial.begin(9600);

}

void loop()
{
    if (Serial.available() > 0)
    {
        command = Serial.read();
        Serial.print(command);
    }
    
}

All this gives me is this:

Enter command: 1
You sent: b'0'
Enter command: 4
You sent: b'0000'


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source