zoukankan      html  css  js  c++  java
  • 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!
    '
    b'Hello World!
    '
    
    并且对比可知道函数语法不同:

    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

  • 相关阅读:
    试题 历届试题 整数拼接(数位dp)
    试题 历届试题 波动数列(dp)
    序列化二叉树(模拟)
    对于maven中无法加载类路径下的配置文件
    [蓝桥杯][算法训练]文章翻转
    [蓝桥杯][算法训练] 无权最长链
    [蓝桥杯][基础训练]2n皇后问题
    蓝桥杯 基础练习——Huffuman树
    蓝桥杯 基础练习——高精度加法
    蓝桥杯 基础练习——阶乘计算
  • 原文地址:https://www.cnblogs.com/nightowl/p/12758182.html
Copyright © 2011-2022 走看看