Introduction
今天给大家带来的是树莓派家族的另一成员—-SenseHat。
作为Astropi https://astro-pi.org/ 任务的一个基本组成部分,也作为树莓派上的一个插件,它将让你的树莓派感知周围的世界。
它可以用来读取:
- 方向(加速计,3D陀螺仪, 磁力计)
- 压力
- 温度(0-65°摄氏度,2°的准确度)
- 相对湿度(20-80%,4.5%的准确度)
- [Image: https://easytester.quip.com/-/blob/MIbAAAJ1qID/wOUpgIYxQHyWNqmEqFjmPA]
8*8LED点阵可以用来显示从各种传感器中传来的数据。
What you will make
这次实验,我们将使用sense hat 和树莓派来:
- 使用Python跟sense hat 通讯
- 访问sense hat 的输出输入端口
- 同过sense hat 库显示图像和信息
- 储存传感器数据
What you will do
跟以往一样,首先,更新树莓派的操作系统:
sudo apt-get update sudo apt-get upgrade
安装sense hat:
sudo apt-get install sense-hat
显示文本
在Sensehat的LED上显示你想要出现的字符:
from sense_hat import SenseHat sense = SenseHat() sense.show_message("Teddy")
你也可以改变LED的颜色:
from sense_hat import SenseHat sense = SenseHat() r = 255 g = 255 b = 255 sense.clear((r, g, b))
使用一个While来循环显示:
from sense_hat import SenseHat
sense = SenseHat()
blue = (0, 0, 255)
yellow = (255, 255, 0)
while True:
sense.show_message("Astro Pi is awesome!", text_colour=yellow, back_colour=blue, scroll_speed=0.05)
设置方向
sensehat 允许你设置它的LED矩阵方向,下面举个列子说明:
from sense_hat import SenseHat from time import sleep sense = SenseHat() w = (150, 150, 150) b = (0, 0, 255) e = (0, 0, 0) image = [ e,e,e,e,e,e,e,e, e,e,e,e,e,e,e,e, w,w,w,e,e,w,w,w, w,w,b,e,e,w,w,b, w,w,w,e,e,w,w,w, e,e,e,e,e,e,e,e, e,e,e,e,e,e,e,e, e,e,e,e,e,e,e,e ] sense.set_pixels(image) while True: sleep(1) sense.flip_h()
我们将每个LED做成一个像素点,w,b,e作为三种颜色,每隔1s循环显示像素点。
感知环境
sensehat 具有一组感知环境的传感器,我们通常用来测量温度,湿度和气压。
我们引入一个小程序来说明sensehat库的用法,结果是采集三组温度,湿度和气压数据并在LED上显示出来,:
from sense_hat import SenseHat sense = SenseHat() while True: t = sense.get_temperature() p = sense.get_pressure() h = sense.get_humidity() t = round(t, 1) p = round(p, 1) h = round(h, 1) message = "Temperature: " + str(t) + " Pressure: " + str(p) + " Humidity: " + str(h) sense.show_message(message, scroll_speed=0.05)
我们也可以拓展一下,用一个条件来判断温度高低并使用LED报警:
red = (255, 0, 0) green = (0, 255, 0) if t > 18.3 and t < 26.7: bg = green else: bg = red sense.show_message(message, scroll_speed=0.05,back_colour=bg)
感知运动
Sense帽有一个IMU((Inertial Measurement Unit惯性测量单元)芯片,其中包括一组检测运动的传感器:
- 一个陀螺仪(用来检测板上的方向)
- 加速度计(用于检测运动)
- 磁力仪(用于探测磁场)
我们都知道地球绕着南北两极之间的一个轴旋转。我们也可以将sensehat增加三个轴,这些都是:
- 俯仰pitch
- 滚动roll
- 偏航yaw
我们在编程时,也需要使用这三个轴来定位:
get_accelerometer_raw
()作为SenseHat的一个方法用于访问三轴的坐标,告诉你在每个轴上的重力作用(x,y,z)。如果任意轴为+1G,那么你就知道这个轴是向下的,反之则向上。
from sense_hat import SenseHat sense = SenseHat() red = (255, 0, 0) while True: acceleration = sense.get_accelerometer_raw() x = acceleration['x'] y = acceleration['y'] z = acceleration['z'] x = abs(x) y = abs(y) z = abs(z) if x > 1 or y > 1 or z > 1: sense.show_letter("!", red) else: sense.clear()
使用操纵杆
sensehat具有一个可操作的方向按键,可以五个不同的方向释放:上,下,左,右,中。
我们可以使用一个事件来反馈用户操作:
sense.stick.direction_up = pushed_up def pushed_up(event): print(event)
读到到这里,我们已经探索了sensehat的大部分特性,下一期,我们将用它们组合起来创建一个项目,敬请期待。
参考文档
有关跟多SenseHat 函数及方法可以参考:
https://pythonhosted.org/sense-hat/