problema de codificación de la versión de comunicación de tarta de arduino y frambuesa

En un experimento de comunicación entre arduino y Raspberry Pi, encontré un problema, es decir, las versiones de Python3 y Python2 tienen diferentes métodos de codificación. Si no presta atención, provocará errores en la comunicación o errores de ejecución. Encontró el código de la versión 3, python2 también se puede lograr, lo contrario no funcionará, lo siguiente para ilustrar

código arduino

int val; // Definir la variable val 
int ledpin = 13; // Definir la interfaz digital 13 
void setup () 
{ 
  Serial.begin (9600); // Establecer la velocidad en baudios a 9600, que debe ser coherente con la configuración del software. Al acceder a un dispositivo específico (como Bluetooth), también debemos alcanzar la misma velocidad en baudios que otros dispositivos. 
  pinMode (ledpin, OUTPUT); // Establezca el puerto digital 13 como interfaz de salida, los puertos de E / S que utilizamos en el Arduino deben definirse así. 
} void loop () 
{ 
  val = Serial. read (); // Lee el comando o personaje enviado desde la PC al Arduino, y asigna el comando o personaje a val if (val == 'R') // Juzga la recepción Si la instrucción o el carácter recibido es "R". 
  { // Si el carácter "R" recibido 
    Serial.println (" Hello World! "); // Muestra la cadena "Hello World!" 
    DigitalWrite (ledpin, HIGH);

  

// Enciende el LED digital de 13 puertos. 
    delay (500); 
    digitalWrite (ledpin, LOW); // apaga el LED digital de 13 puertos 
    delay (500); 
  } 
}

Código de ejecución normal de Python2

# - * - codificación: UTF-8 - * - 
import serial 
ser = serial.Serial ('/ dev / ttyACM0', 9600, timeout = 1); 
intente: 
        mientras que 1: 
                ser. escribir ('R'); 
                respuesta = ser.readall (); respuesta impresa ; 
excepto: 
        ser. cerrar ();

                

Lo que se devuelve es

Hola Mundo! 

Hola Mundo!


El código normal de ejecución de Python3

# - * - codificación: UTF-8 - * - 
import serial 
ser = serial.Serial ('/ dev / ttyACM0', 9600, timeout = 1); 
intente: 
        mientras que 1: 
                ser. escribir ('R'. codificar ()); 
                respuesta = ser.readall (); imprimir (respuesta); 
excepto: 
        ser. cerrar ();

                

El programa devuelve esto

b'Hola mundo! \ r \ n ' 
b'Hola mundo! \ r \ n'
Y la comparación muestra que la sintaxis de la función es diferente:

ser. escribir ('R'. codificar ());
imprimir (respuesta);

Código de codificación de conversión de Python3

# - * - codificación: UTF-8 - * - 
import serial 
ser = serial.Serial ('/ dev / ttyACM0', 9600, timeout = 1); 
intente: 
	mientras que 1: 
		ser. escribir ('R'. codificar ()); 
		respuesta = ser.readall (). decodificar ();
		imprimir (respuesta); 
excepto: 
	ser. cerrar ();

El efecto final es el mismo que 2. , Y python2 también puede ejecutarse

Hola Mundo! 

Hola Mundo!

Resumen

Este es realmente un problema de codificación muy simple,

Python 2 trata las cadenas como bytes.
Python 3 trata las cadenas como unicode.

He olvidado todo durante mucho tiempo antes de aprender. Tales problemas de codificación deberían aprenderse. Parece que todavía es necesario escribir más para profundizar la memoria y facilitar el recuerdo.

Referencia de la pregunta

https://stackoverflow.com/questions/46685761/typeerror-unicode-strings-are-not-supported-please-encode-to-bytes-x08

Prefijo de codificación

https://blog.csdn.net/anlian523/article/details/80504699

Cambio de código

https://blog.csdn.net/Panda996/article/details/84780377

Supongo que te gusta

Origin www.cnblogs.com/nightowl/p/12758182.html
Recomendado
Clasificación