毕业设计笔记(官方网站文档资料学习笔记)

文章目录

  • 智慧蔬果大棚监测控制系统
    • 1. 写在前面
    • 2. 熟悉你的开发环境
      • 2.1 开发工具
      • 2.2 开发流程
      • 2.3 范例——点亮一盏LED灯
      • 2.4 REPL是个啥?
    • 3. 新手入门
      • 3.1 LED灯实验
      • 3.2 按键初探
      • 3.3 加速度传感器
      • 3.4 安全模式与恢复出厂模式
      • 3.5 使用定时器
    • 参考资料

跳到底部>>

智慧蔬果大棚监测控制系统

1. 写在前面

  接触TPYBoard开发实属巧合。某天我在网上寻思毕业设计课题的事情,当时还在纠结到底是选择做嵌入式还是做网络安全方向的项目。这个纠结的根源就在于,我和一位教我们嵌入式开发的老师做毕设,然后自己培训找工作的内容是刚接触不久的网络安全方向。(而本科又是学的物联网工程这个覆盖面广泛的专业…我真的是太不专业了T_T,目前安心在网络安全行业扎根,潜心学习)在即将毕业之际,还是选择了一个嵌入式的方向的课题,主要是在它的官方网站上看了一下相关的内容,说不会很难,哈哈!毕业设计记录文档目的旨在记录这个过程的点滴,以作回顾用(任何第三方不得擅自转载或用作商业用途,本文档主要参考于Micropython TPYBoard官方网站)。最后,让我们开始这最后的旅程吧!

2. 熟悉你的开发环境

2.1 开发工具

  • 代码编辑器选择VS CODE,需安装micropython插件(目前只用到这一个工具)

2.2 开发流程

  开发流程大致如下:

  • 编写代码:在电脑中的同名副本文件main.py中编写代码,这将有利于保护开发板中的原始代码不被破坏;
  • 代码覆盖:将写好的main.py放到TPYBFLASH中覆盖原有的main.py;
  • 代码保存:编写好的代码按下Ctrl + S进行保存,这时开发板的红色LED等亮起,表示正在写入代码,大约持续5s后熄灭,表示代码保存成功;
  • 复位:可通过按键复位和软复位进行复位操作,按键复位是指按下开发板中的RST键,软件复位是在putty终端中输入Ctrl + D,复位后开发板会执行更新后的代码,此时可观察实验结果。

2.3 范例——点亮一盏LED灯

  TPYBoard v102开发板是本次开发的主战场,让我们来点亮它的LED灯,板子的默认程序是一个流水灯,给开发板上电就会出现流水灯现象。而想要在这个小板子上点亮一盏灯出奇的简单,不需要像51单片机那样做一系列的初始化配置,代码只有简单的两句话就可以啦。

import pyb	//导入pyb模块
pyb.led(4).on()	//选择pyb模块下的led模块,选择打开。ps:这里代码中的"."和结构体中的含义基本类似,相当于一个选择功能的函数,我们可以通过它来选择当前模块下的任意一个成员。

2.4 REPL是个啥?

  REPL(交互式解释器)全称是 Read Evaluate Print Loop,TPYBoard 允许用户和 MicorPython 的交互式连接。 使用REPL是迄今为止来测试你的代码、获取程序错误信息和运行命令的最简单的方法。这部分更详细的内容到时候如果忘记了就看“参考资料”部分的连接吧!(链接1)
  在这里我们先记住两个快捷键就可以了:

Ctrl + D重新运行程序(软复位)
Ctrl + C停止运行程序

3. 新手入门

3.1 LED灯实验

  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()#熄灯

putty终端控制LED灯
  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)

3.2 按键初探

  现在,我们想要通过板子上的按键来控制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)

3.3 加速度传感器

  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.4 安全模式与恢复出厂模式

  由于操作不当,开发板可能出现文件损坏无法读取的情况,我们可以通过安全模式或恢复出厂设置来修复它。同时也提醒我们在平时的编程中一定要养成保存副本的习惯,以免丢失重要代码!详细内容请参见链接3。

3.5 使用定时器

  定时器是单片机上的一个重要组成部分,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安全模式和恢复出厂设置
持续更新中…
<<回到顶部

你可能感兴趣的:(毕业设计)