编码
字符串
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()