实例1:控制树莓派板载LED灯闪烁
实验目的
- 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派。
- 通过对树莓派板载LED灯的状态读写控制,熟悉树莓派本身的操作及Linux中文件的读写。
- 掌握常见函数time.sleep()的用法。
实验要求
使用Python语言编程,通过Linux文件的读写操作,周期性地改变树莓派状态指示灯的亮灭状态,使之发生周期为一秒的持续明暗闪烁。
实验知识
1. 什么是树莓派?
树莓派(Raspberry Pi)是英国树莓派基金会开发的低成本微型单板计算机,硬件上配置有SoC (片上系统),具有 GPU和RAM并支持有线、无线连接方案。值得称道的是,树莓派有着完善的社区与软件支持,这极大地方便了机器人开发初学者的入门学习。
树莓派在具备计算机基本功能的同时,保持着一张卡片的大小,这意味着你可以简单便捷地搭建自己的机器人编程平台,并将这台微型计算机部署在小巧可爱的四足机器狗mini pupper上。
图片1:树莓派4B
参考链接:树莓派
2. 树莓派状态指示灯
在树莓派4B上,状态指示灯对应的文件如下,通过对Linux系统中对应文件的读写操作,可以改变状态指示灯的亮灭状态。
# 树莓派4B状态灯
/sys/class/leds/led0/brightness # 灯1二进制亮灭开关
/sys/class/leds/led1/brightness # 灯2二进制亮灭开关
本实例中的使用:
status_led = open('/sys/class/leds/led1/brightness', 'wb', 0)
图片2:树莓派板载的LED灯
3. Python open()函数的用法
python open() 函数用于打开一个文件,在Linux中,相当多的操作是通过对文件的读写完成的。
varible_name = open(file_name,mode,buffering)
# name : 要访问的文件名,需以字符串形式表现,比如'/sys/class/leds/led1/brightness'
# mode : 打开文件的模式,写入的模式为:'wb' 意为以二进制方式写入
# buffering :缓冲,为了不调用close方法,实现无缓冲写入,此处为:0
本实例中的使用:
status_led = open('/sys/class/leds/led1/brightness', 'wb', 0)
参考链接:Python open()函数
4. Python sleep()函数的用法
python sleep()函数推迟调用线程的运行,可以实现延时功能,这使得LED灯在改变状态后可以保持一段时间再发生下一次状态的改变。
调用sleep()函数需首先引入time库的sleep函数。
from time import sleep
# 引入time库的sleep函数
time.sleep(time)
# 暂缓延时,长达time
本实例中的使用:
from time import sleep # 在文件头引入time库的sleep函数
sleep(0.5) # 用于延时,保持灯的状态
参考链接:Python time.sleep()函数
5. 对文件的写入
python的file.write()函数用于向文件中写入指定的字符串。
在文件关闭以及缓冲区刷新前,字符串是暂未写入文件,而是存在缓冲区里,为了使树莓派快速改变灯的亮灭状态,采用了无缓冲写入,因此open()的buffering为0,实现无缓冲写入。
当文件使用二进制写入时,需要使用encode()方式转为bytes形式,或者在其前加b。
status_led.write(b'1') # LED熄灭 b为指定二进制
status_led.write(b'0') # LED开启
实验步骤
1. 编写Python程序 led_blink.py
#!/usr/bin/python
#coding:utf-8
# led_blink.py
# 使树莓派状态指示灯的亮灭状态周期性地改变,发生周期为一秒的持续明暗闪烁。
from time import sleep
status_led = open('/sys/class/leds/led1/brightness', 'wb', 0)
# mini pupper 默认禁用了开启后的指示灯,如led1无法闪烁,此处可改为led0
# 如果你希望启用指示灯,请修改/boot/firmware/config.txt
# 修改config.txt的具体方法可查看课程的进阶参考文档中实例1部分
while True:
status_led.write(b'0') # Turn on
sleep(0.5)
status_led.write(b'1') # Turn off
sleep(0.5)
2. 运行程序,观察效果
在led_blink.py的目录下执行以下命令:
sudo python led_blink.py
此时应观察到树莓派状态指示灯的亮灭状态周期性地改变,发生周期为一秒的持续明暗闪烁。
图片3:板载LED灯闪烁
实验总结
经过本知识点的学习和实验操作,你应该能达到以下水平:
知识点 | 内容 | 了解 | 熟悉 | 掌握 |
---|---|---|---|---|
树莓派 | 树莓派的来历、用途及基本硬件性能 | ✔ | ||
树莓派 | 树莓派的状态指示灯 | ✔ | ||
Linux | Linux的文件读写 | ✔ | ||
语言 | 延时函数time.sleep()的用法 | ✔ |