arduino和树莓派通信的版本编码问题

在一次arduino和树莓派通信实验中,发现一个问题,就是Python3 和Python2的版本,对于编码有不同的方法,不注意的话会使通信来说就形成错误,或者运行出错,笔者试了一下,发现3 的版本代码,python2也能实现,反过来就不行,下面通过实验来说明

arduino代码

int val;//定义变量val
int ledpin = 13; //定义数字接口13
void setup()
{
  Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。
  pinMode(ledpin, OUTPUT); //设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。
}
void loop()
{
  val = Serial.read(); //读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val
  if (val == 'R') //判断接收到的指令或字符是否是“R”。
  { //如果接收到的是“R”字符

    Serial.println("Hello World!");//显示“Hello World!”字符串

    digitalWrite(ledpin, HIGH); //点亮数字13 口LED。
    delay(500);
    digitalWrite(ledpin, LOW); //熄灭数字13 口LED
    delay(500);
  }
}

Python2的正常运行代码

#-*-coding:UTF-8-*-
import serial
ser = serial.Serial('/dev/ttyACM0',9600,timeout=1);
try:
        while 1:
                ser.write('R');
                response = ser.readall();
                print response;
except:
        ser.close();

返回的是

Hello World!

Hello World!


Python3的正常运行代码

#-*-coding:UTF-8-*-
import serial
ser = serial.Serial('/dev/ttyACM0',9600,timeout=1);
try:
        while 1:
                ser.write('R'.encode());
                response = ser.readall();
                print (response);
except:
        ser.close();

程序返回的是这个

b'Hello World!\r\n'
b'Hello World!\r\n'
并且对比可知道函数语法不同:

ser.write('R'.encode());
print (response);

Python3转换编码代码

#-*-coding:UTF-8-*-
import serial
ser = serial.Serial('/dev/ttyACM0',9600,timeout=1);
try:
	while 1:
		ser.write('R'.encode());
		response =ser.readall().decode();
		print (response);
except:
	ser.close();

最后实现效果跟2 的一样。,并且python2也能运行

Hello World!

Hello World!

总结

这其实就是很简单的编码问题,

Python 2 将字符串处理为 bytes 类型。
Python 3 将字符串处理为 unicode 类型。

之前学的隔了好久什么都忘了,这样的编码问题应该学过,看来还是要多写写加深记忆和方便回忆。

问题参考

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

编码前缀

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

编码切换

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

猜你喜欢

转载自www.cnblogs.com/nightowl/p/12758182.html
今日推荐