编码

字符串

python里的字符串就是文本,用于与人类交互,像这样:
阿拉伯数字:a = '12345'
英语: b = 'I can eat glass, it doesn't hurt me.'
简体中文:c = '我能吞下玻璃而不伤身体'
繁体中文:d = '我能吞下玻璃而不傷身體'
粤语:e = '我可以食玻璃,佢信唔到我㗎'
日语:f = '私は硝子を食べられます。私を傷付けません。'
拉丁文:g = 'Vitrum edere possum; mihi non nocet.'

因为Python3的字符串是utf8编码的,可以支持世界上所有的语言,并且是ASCII兼容的。

bytes

python中,bytes是二进制数据,与string不同的是,bytes是用来传输的,就是一个一个的二进制数据。

string与bytess转换

那么,什么是编码?

推荐阅读:
http://www.ituring.com.cn/article/1115

粗暴来说,将字符串转成bytes,就是编码;将bytes转成字符串,就是解码。
通过不同的编码方式,比如ASCII,UTF-8,Unicode,一样的bytes代表的string是不同的(不严格)。
同理,一个string,用 ASCII,UTF-8,Unicode,分别编码,也是不同的(不严格)。

串口

micropython的串口操作,除了发送uart.write(string)外,还有:

uart.write(string)    #发送一个字符串
uart.writechar(int)   #发送一个char
uart.any()            #检测还有多少字符可以接受
uart.read(n)          #接收n个byte
uart.readall()        #接受所有
uart.readchar()       #接受一个字符
uart.readline()       #读取一行,以换行符为结尾
uart.sendbreak()      #发送一个00

注意:不要直接使用uart.read(),不加参数的话,会持续1s,会拖慢程序。

自收发实验

把X1与X2接在一起,做一个自发自收的实验。因为这两个引脚是UART4的RX,TX。

from pyb import UART
uart = UART(4, 115200)
uart.write("1234\n2345\n3456\nabcd\n")    #发送一个字符串
uart.writechar(67)    #发送一个char,67的ASCII为g
uart.any()            #返回21
d1 = uart.read(5)     #d1 -> b'1234\n'
uart.any()            #返回16
d2 = uart.readline()  #d2 -> b'2345\n'
d3 = uart.readchar()  #d3 -> 51,因为字符3的ASCII码为51
uart.any()            #返回10
uart.sendbreak()      #发送一个00

USB连接到电脑

pyboard USB-TTL
X1-TX RX
X1-RX TX
GND GND

  • USB-TTL模块连接到电脑,打开串口软件,设置好波特率。
  • 在pyboard运行以下代码
from pyb import UART
uart = UART(4, 115200)
while True:
    uart.write("hello world!")
  • 电脑每秒会显示Hello world!

收到指令字符串,亮灯实验

from pyb import UART, LED
uart = UART(4, 115200)
led = LED(1)
while True:
    if(uart.any()):
        data = uart.readline()
        print("reseived:",data)
        if data.decode().startswith('on'):
            led.on()
        elif data.decode().startswith('off'):
            led.off()

收到指令char,亮灯实验