PYB Nano 开发板快速指南
这篇快速指南是为 MicroPython 和 PYB Nano 的初学者写的,通过这个文档,可以快速掌握 MicroPython 和 PYB Nano 的基本使用方法。
PYB Nano开发板简介
PYB Nano开发板是目前体积最小、成本最低的MicroPython开发板
PYB Nano的主要特点
STM32F401CEU6微控制器
16M主时钟
支持 macroUSB
2路UART
3路I2C
3路SPI
10路12位ADC
支持RTC
支持后备电池输入
支持USB供电和VIN输入(最高12V)
一个用户按键和一个复位键
带有 4个支持亮度调节功能的 LED
带有加速度传感器(MMA7660)
支持USB升级功能
低成本、高性能
开源
应用范围
教育、学习
电子竞赛
机器人
智能硬件
物联网开发
快速原型设计
创客、DIYer
PYB Nano非常适合作为MicroPython的入门开发板,它支持绝大部分MicroPython的功能和函数,成本却只有官方 PyBoard 的几分之一,是学习MicroPython的首选开发板之一,也是从Arduino进阶到其它应用的最好选择。
系统需求
在开始使用 PYB Nano 前,需要做一点准备工作:
一台计算机,安装了不低于Win7,或者Linux、MacOS操作系统,32位/64位都可以
串口终端软件,如超级终端、putty、MobaXterm、SecureCRT等
macroUSB数据线(可以使用安卓手机的数据线)
因为Windows的用户最多,所以下面的介绍也以Windwos为主,但其它操作系统下的用法也是类似的,甚至更简单。
另外,为了顺利使用 MicroPython,大家还需要对 Python 语言有基本了解,因为MicroPython 是基于 python3 的。
安装驱动
在Windows系统中,第一次连接开发板时,会出现一个PYBFLASH磁盘,同时提示需要安装新的设备。这个新的设备就是虚拟串口,它的驱动程序就在新出现的PYBFLASH磁盘上,浏览到这个磁盘安装驱动,安装后就可以使用。
在大部分的Linux、MacOS下无需安装任何驱动程序。
终端软件设置
在调试时,通常都使用串口终端软件。在使用前,需要对终端软件的串口参数进行设置。
先用数据线连接开发板,然后运行任一串口终端软件,并设置串口为 PYB Nano 对应的虚拟串口,在将串口参数设置如下:
波特率
115200
数据位
8
奇偶校验
无
停止位
1
流量控制
无
个别软件还需要设置字符集才能正常显示。
REPL 的用法
通常调试程序时,都是在 MicroPython 的 REPL (read–eval–print loop,循环交互解释器)环境下运行。在REPL下可以直接输入命令,有内置的解释器执行。如果命令输入正常就会执行,命令错误会有提示。
MicroPython支持几个常用的快捷键,如果你熟悉串口终端,会发现它们的习惯是一样的。
Ctrl-C,停止正在的程序或终止当前的命令行
Ctrl-D,软复位(soft reset)
Ctrl-B,显示系统提示
Ctrl-E,进入粘贴模式。可以按下Ctrl-C退出粘贴模式,Ctrl-D完成粘贴
Tab,键盘上的Tab键,可以补全命令
除了Ctrl-C,其它快捷键需要在空命令行下(没有输入任何字符)才能生效。此外,还可以使用上下左右光标键
上下键,调出以前输入的命令。MicroPython可以保存最后输入的6条命令
左右键,在当前命令行中移动,编辑命令
基本用法
LED
无论在哪个开发板中,LED都是最常用的的例程,我们也从这里开始。
PYB Nano上有4个LED,分别是红、绿、黄、蓝色。我们可以通过 pyb.LED(n) [n = 1-4]去使用它们。如:
pyb.LED(1).on() # LED1亮
pyb.LED(2).off() # LED2灭
pyb.LED(3).toggle() #翻转LED3
pyb.LED(4).intensity(20) # 设置LED4亮度20 [范围是0-255]
呼吸灯,下面程序将LED3设置为呼吸灯
from pyb import Timer
ia = 1
da = 1
def fa(t):
global ia, da
if (ia==0)or(ia==255):
da=256-da
ia=(ia+da)%256
pyb.LED(3).intensity(ia)
tm=Timer(1, freq=200, callback=fa)
在其它MicroPython开发板上,LED的数量可能是1-4个,但用法是一样的。此外不是每种 MicroPyhon 开发板的 LED 都支持亮度调整功能(intensity())。
按键
在MicroPython的Pyboard中,预定义了按键开关对象,它的使用方法如下:
sw = pyb.Switch()
sw()
如果按键按下,返回True,否则返回False。
GPIO
使用GPIO,需要导入pyb库的Pin对象。
from pyb import Pin
p_out = Pin('X1', Pin.OUT_PP) # 定义 X1 引脚为输出
p_out.high() # 输出高电平
p_out.low() # 输出低电平
p_out.value(1) # 等同于 p_out.high()
p_in = Pin('X2', Pin.IN, Pin.PULL_UP) # 定义 X2 为输入
p_in.value() # get value, 0 or 1
外中断
下面代码将按键(PC13)定义为外中断输入,上升沿触发模式。每当按下一次按键,LED1就会翻转一次。
from pyb import Pin, ExtInt
callback = lambda e: pyb.LED(1).toggle()
ext = ExtInt(Pin('C13'), ExtInt.IRQ_RISING, Pin.PULL_UP, callback)
定时器
定时器需要使用到pyb库的Timer对象。下面程序中,先设置定时器1的频率为1000Hz,然后读取计数器的值,再设置定时器的频率为0.5Hz,并在定时器回调函数(中断)里翻转LED2。
from pyb import Timer
tim = Timer(1, freq=1000)
tim.counter() # get counter value
tim.freq(0.5) # 0.5 Hz
tim.callback(lambda t: pyb.LED(2).toggle())
PWM
PWM是定时器模块的一个子功能,可以将定时器的某一通道设置为PWM输出。下面代码将 PA3 设置为定时器2的CH4输出,最后设置占空比是10%。注意占空比参数可以是浮点数。
from pyb import Pin, Timer
p = Pin('A3') # X1 has TIM2, CH4
tim = Timer(2, freq=1000)
ch = tim.channel(4, Timer.PWM, pin=p)
ch.pulse_width_percent(10)
ADC
PYB Nano带有10路12位ADC输入,可以非常容易读取ADC的参数。下面的代码读取引脚 X8 (PB0)的输入
from pyb import Pin, ADC
adc = ADC(Pin('X8'))
adc.read() # read value, 0-4095
另外一种读取ADC的方法是
from pyb import Pin, ADC
a=pyb.ADCAll(12) # 设置ADC为12位模式
a.read_channel(8) # 读取ADC8
a.read_core_temp() # 读取内部温度传感器
UART
from pyb import UART
uart = UART(1, 9600)
uart.write('hello')
uart.read(5) # read up to 5 bytes
SPI
from pyb import SPI
spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
spi.send('hello')
spi.recv(5) # receive 5 bytes on the bus
spi.send_recv('hello') # send a receive 5 bytes
I2C
from pyb import I2C
i2c = I2C(1, I2C.MASTER, baudrate=100000)
i2c.scan() # returns list of slave addresses
i2c.send('hello', 0x42) # send 5 bytes to slave with address 0x42
i2c.recv(5, 0x42) # receive 5 bytes from slave
i2c.mem_read(2, 0x42, 0x10) # read 2 bytes from slave 0x42, slave memory 0x10
i2c.mem_write('xy', 0x42, 0x10) # write 2 bytes to slave 0x42, slave memory 0x10
加速度传感器
PYB Nano内置了加速度传感器MMA7660,可以直接读取传感器的参数(数值范围是[-32..32])。
acc = pyb.Accel()
while True:
print(acc.x(), acc.y(), acc.z())
pyb.delay(500)
其它常用功能
pyb.delay(500) # 延时500ms
pyb.udelay(20) # 延时20us
pyb.unique_id() # 读取芯片的唯一序列号
pyb.millis() # 复位后的运行时间(ms)
pyb.hard_reset() # 复位,和按下复位键的效果相同
pyb.bootloader() # 直接进入 bootloader 模式升级
pyb.disable_irq() # 禁止中断
pyb.enable_irq() # 恢复中断
pyb.freq() # 读取系统时钟
pyb.wfi() # 等待内部或外部中断
pyb.stop() # 休眠模式,需要外部中断或者实时时钟唤醒
MocroPython的启动模式
在启动后,MicroPython会先运行 boot.py 文件,加载用户驱动,然后在运行main.py,执行用户程序。可以将用户程序放在main.py中,也可以在main.py中再加载其它的文件。
常见故障
在使用过程中,我们需要注意下面问题,避免造成文件系统破坏、数据丢失。
取下数据线前,需要先U盘那样安全删除硬件,弹出PYBFLASH磁盘,否则可能会造成文件系统破坏,特别在修改了文件或复制新文件到PYBFLASH磁盘后。
不要轻易按复位键,这样会造成当前的USB通讯中断。一般的问题,可以通过按下Ctrl-D软复位接近。
出厂模式
使用时间长了,因为各种原因可能会出现故障,造成无法正常启动,不能进入REPL,文件系统破坏等现象,这时就需要通过出厂模式进行恢复。
进入出厂模式的方法是,
按下复位键(RESET)的同时,按住用户按键SW。
然后保持用户按键不放,释放复位键。
这时LED将循环显示:绿-》黄-》绿+黄-》灭
等黄绿灯同时亮时,松开用户键,这时黄绿灯会同时快速闪4次
然后红灯亮起(这时红绿黄三个灯同时亮)
红灯灭,开始进行恢复到出厂状态
所有灯都灭,恢复出厂设置完成。
恢复出厂设置后,PYBFLASH中的内容会丢失,变为默认文件。
升级固件
MicroPython的更新速度很快,每次更新都会带来一些新的功能,修正错误。所以掌握 MicroPython 的固件升级方法是有必要的。
PYB Nano支持下面几种升级方法:
通过DFU模式升级
通过SWD方式升级
使用DFU模式,需要安装ST的DfuSe_demo软件(Windows)或者dfu-util(Linux)。使用SWD需要将开发板的SWD接口(PA13/PA14)连接到编程器,通过编程软件(如STM32 ST-LINK Utility)下载。
参考资源
以上是 MicroPython 和 PYB Nano 的最基础知识,掌握后大家就可以逐步深入了。下面是一些MicroPython相关的参考网站和论坛,供大家参考。