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'
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
Prefijo de codificación
https://blog.csdn.net/anlian523/article/details/80504699
Cambio de código