接触TPYBoard开发实属巧合。某天我在网上寻思毕业设计课题的事情,当时还在纠结到底是选择做嵌入式还是做网络安全方向的项目。这个纠结的根源就在于,我和一位教我们嵌入式开发的老师做毕设,然后自己培训找工作的内容是刚接触不久的网络安全方向。(而本科又是学的物联网工程这个覆盖面广泛的专业…我真的是太不专业了T_T,目前安心在网络安全行业扎根,潜心学习)在即将毕业之际,还是选择了一个嵌入式的方向的课题,主要是在它的官方网站上看了一下相关的内容,说不会很难,哈哈!毕业设计记录文档目的旨在记录这个过程的点滴,以作回顾用(任何第三方不得擅自转载或用作商业用途,本文档主要参考于Micropython TPYBoard官方网站)。最后,让我们开始这最后的旅程吧!
开发流程大致如下:
TPYBoard v102开发板是本次开发的主战场,让我们来点亮它的LED灯,板子的默认程序是一个流水灯,给开发板上电就会出现流水灯现象。而想要在这个小板子上点亮一盏灯出奇的简单,不需要像51单片机那样做一系列的初始化配置,代码只有简单的两句话就可以啦。
import pyb //导入pyb模块
pyb.led(4).on() //选择pyb模块下的led模块,选择打开。ps:这里代码中的"."和结构体中的含义基本类似,相当于一个选择功能的函数,我们可以通过它来选择当前模块下的任意一个成员。
REPL(交互式解释器)全称是 Read Evaluate Print Loop,TPYBoard 允许用户和 MicorPython 的交互式连接。 使用REPL是迄今为止来测试你的代码、获取程序错误信息和运行命令的最简单的方法。这部分更详细的内容到时候如果忘记了就看“参考资料”部分的连接吧!(链接1)
在这里我们先记住两个快捷键就可以了:
Ctrl + D重新运行程序(软复位)
Ctrl + C停止运行程序
1.参数解析
pyb.LED类的函数有:LED.on()亮灯,LED.off()关灯,LED.toggle() 与LED现在的状态对调,LED.intensity([value])设置LED亮度,value是亮度值,0-255,0是关,255最亮(仅LED3和LED4支持)
2.控制亮灭:在putty终端输入交互指令来随意控制LED灯,通过on()函数点灯,off()函数关灯。(每次只可输入一条语句并执行)
import pyb
from pyb import led
myled = pyb.led(1)
myled.on()#关灯
myled.off()#熄灯
3.循环亮灭:通过延时函数delay()和pyb的重要成员函数toggle()来实现LED灯1秒后亮起,5秒后熄灭。
led = pyb.LED(2)
while True:
led.toggle()
pyb.delay(1000)
4.流水灯:在python里面我们用对象的思想来控制每一个led灯,开始为每个led灯创建一个对象。这时代码是这样的:
#previous
leds = [pyb.LED(i) for i in range(1,5)]#为每个LED灯创建一个对象
n = 0
while True:
n = (n + 1) % 4
leds[n].toggle()
pyb.delay(50)
但是这可能会有一个问题,你会发现一旦停下当前脚本的运行并重新启动,开发板上的 LED 灯将从之前运行的状态突然进入到流水灯中。
这个时候我们用try…finally语句来捕获异常,告诉开发板我们在退出时想要做什么,修改后的代码如下:
leds = [pyb.LED(i) for i in range(1,5)]#给每个LED灯创建一个对象,通过对象来控制他们
for l in leds:
l.off()
n = 0
try:
while True:
n = (n+1) % 4
leds[n].toggle()
pyb.delay(50)
finally: #告诉开发板在退出时关闭所有的LED灯
for l in leds:
l.off()
到现在为止,我们顺利走到了完成流水灯现象这一步。
5.特殊的第四颗灯:TPYBoard v102开发板上的第四颗灯为蓝色LED灯,可以在让其亮灭的同时通过 intensity()的方法控制其亮度。其亮度值在 0 到 255 的值间决定。实现代码如下:
led = pyb.LED(4)
intensity = 0
while True:
intensity = (intensity + 1) % 255#intensity的值在0-255之间变化
led.intensity(intensity)
pyb.delay(20)
现在,我们想要通过板子上的按键来控制LED灯,这一点在TPYBoard上可以轻松实现。pyb上有两个按键,分别是USR和RST。RST是复位按键,相当于执行对pyb断电后重新上电的操作,现在我们主要来利用USR按键。通过下面的代码实现按下USR按键时,LED1亮起,LED3熄灭;松开时LED1熄灭,LED3亮起。
sw = pyb.Switch()#实例化一个Switch对象命名为sw,这个对象sw实际上是一个按键对象(Switch Object)
led = pyb.LED(1)#定义led为第一个LED灯(红灯)
led3 = pyb.LED(3)#定义led3为第三个LED灯(黄灯)
while True:
sw_state = sw()#sw()获取当前按键状态,按下返回True,弹起返回False
if sw_state:
led.on()
led3.off()
else:
led.off()
led3.on()
通过下面的代码关闭按键回调
sw.callback(None)
1.使用加速度传感器: 开发板上有一个能够检测角度和运动状态的加速度传感器。X ,Y, Z 轴上各有不同的传感器。通过创建一个 pyb.Accel()对象和调用 *() 方法可以获取对应方向上的数值。通过下面的代码来使用加速度传感器:
accel = pyb.Accel()#创建一个Accel()对象
accel.x()#调用x()方法,以获取加速度传感器在x方向上的数值
2.用加速度传感器点亮LED灯: 在下面的代码中创建了 Accel 和 LED 两个对象,然后直接获得加速度传感器在 X 方向上的数值。如果 x 值的大小比定值 SENSITIVITY 大,LED 灯将被点亮,否则将被熄灭。循环中调用了 pyb.delay()函数,否则当 x 的值接近 SENSITIVITY 时LED灯将闪烁得十分频繁。
accel = pyb.Accel()#创建一个加速度传感器对象
light = pyb.LED(3)#light为3号LED灯
SENSITIVITY = 3
while True:
x = accel.x()
if abs(x) > SENSITIVITY:
light.on()
else:
light.off()
pyb.delay(100)#循环中调用了pyb.delay()函数,否则当x的值接近SENSITIVITY时LED灯将闪烁地十分频繁
3.用加速度传感器制作水平仪: 通过y()函数的值和更多的LED灯将tpyboard开发板打造成一个水平仪
#创建一个包含x和y方向上的元组,python语言中元组是不可更改的对象,即意味着一旦创建后就不能被改变
xlights = (pyb.LED(2),pyb.LED(3))
ylights = (pyb.LED(1),pyb.LED(4))
accel = pyb.Accel()
SENSITIVITY = 3
#当pyb板在不同方向上倾斜时,点亮不同的LED灯,如果在x,y方向上都有倾斜时,相应的灯都会亮起
while True:
x = accel.x()
if x > SENSITIVITY:
xlights[0].on()
xlights[1].off()
elif x < -SENSITIVITY:
xlights[1].on()
xlights[0].off()
else:
xlights[0].off()
xlights[1].off()
y = accel.y()
if y > SENSITIVITY:
ylights[0].on()
ylights[1].off()
elif y < -SENSITIVITY:
ylights[1].on()
ylights[0].off()
else:
ylights[0].off()
ylights[1].off()
pyb.delay(100)
由于操作不当,开发板可能出现文件损坏无法读取的情况,我们可以通过安全模式或恢复出厂设置来修复它。同时也提醒我们在平时的编程中一定要养成保存副本的习惯,以免丢失重要代码!详细内容请参见链接3。
定时器是单片机上的一个重要组成部分,pyb上有一个Timer库,要使用定时器,先需要导入Timer库。
from pyb import Timer
定义Timer的基本操作如下:
tm = Timer(n)
n = 1,2,4,7,8,9,10,11,12,13,14#n为其中之一,定时器最大数量为11个
tm.freq(100)#定义频率,数字越大频率越高
tm.callback(f)#定时器的回调函数,不需要时传入参数None
下面是一个用定时器让LED等持续闪烁的例子
tim = pyb.Timer(4)#设置Timer编号
tim.init(freq = 10)#设置初始频率大小
tim.callback(lambda t:pyb.LED(4).toggle())#在回调函数中使用lambda表达式
1.Micropython TPYBoard之repl
2.Micropython TPYBoard资料官网
3.Micropython TPYBoard v102安全模式和恢复出厂设置
持续更新中…
<<回到顶部