Sense-HAT Api 文档

从官方给的 api 文档中硬翻的…

LED 模型

set_rotation 设置翻转角度

这个函数可以设置 led 的旋转角度

参数 类型 可选参数 描述
r Integer 0,90,180,270 0指的是树莓派 HDMI 接口向下的方向
redraw Boolean TRUE,FALSE 默认为 TRUE

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/python
import sys
import time
from sense_hat import SenseHat

X = (255, 0, 0)
O = (255, 255, 255)

question_mark = [
O, O, O, X, X, O, O, O,
O, O, X, O, O, X, O, O,
O, O, O, O, O, X, O, O,
O, O, O, O, X, O, O, O,
O, O, O, X, O, O, O, O,
O, O, O, X, O, O, O, O,
O, O, O, O, O, O, O, O,
O, O, O, X, O, O, O, O
]

sense = SenseHat()

sense.set_pixels(question_mark)

sense.set_pixel(0, 0, 255, 0, 0)
sense.set_pixel(0, 7, 0, 255, 0)
sense.set_pixel(7, 0, 0, 0, 255)
sense.set_pixel(7, 7, 255, 0, 255)

def close_light():
black = [ [0,0,0] ] * 64
sense.set_pixels(black)

try:
while True:
for r in [0, 90, 180, 270]:
sense.set_rotation(r)
time.sleep(0.3)
except KeyboardInterrupt:
close_light()
print "Good bye"

set_pixels 批量设置像素点

改变64颗 led 的显示颜色

参数 类型 可选参数 描述
pixel_list List [[R, G, B] * 64] 需要提供 list 长度为64的二维数组, (r,g,b)为三原色的色值

示例参考上一个示例

get_pixels 获取当前像素点数组

返回类型 描述
List 将当前的 led 屏上显示的图像转换成list

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python
from sense_hat import SenseHat


X = (255, 0, 0)
O = (0, 0, 0)
question_mark = [
O, X, O, O, O, O, X, O,
O, O, X, O, O, X, O, O,
O, X, X, X, X, X, X, O,
X, X, O, X, X, O, X, X,
X, X, X, X, X, X, X, X,
X, X, X, X, X, X, X, X,
O, X, O, O, O, O, X, O,
X, O, O, O, O, O, O, X
]

sense = SenseHat()

sense.set_pixels(question_mark)
out_list = sense.get_pixels()
print out_list

提示:之所以有这个函数是因为传入set_pixels的像素值有时会发生变化,sense HAT 是将每个像素指定为
8 位数 (0-255) 但是如果传入 led 的 frameBuffer 中的时候,颜色的位数会转成 RGB565(5位红色,6位绿色和5位蓝色)
执行转换的时候可以看到二进制转换时发生的精度损失
get_pixels 就是显示像素在缓冲区内结束时的值

set_pixel 设置单点像素颜色

通过 x-y 坐标系来定位像素位置,以 HDMI 接口面向的位置为

参数 类型 可选参数 描述
x Integer 0-7 0为左 7为右
y Integer 0-7 0为上 7为下
当只有三个参数的时候
pixel Tuple / List 0-255 (r, g, b) 数值
当有五个参数的时候
r Integer 0-255
g Integer 0-255 绿
b Integer 0-255

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sense_hat import SenseHat

sense = SenseHat()

# examples using (x, y, r, g, b)
sense.set_pixel(0, 0, 255, 0, 0)
sense.set_pixel(0, 7, 0, 255, 0)
sense.set_pixel(7, 0, 0, 0, 255)
sense.set_pixel(7, 7, 255, 0, 255)

red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

# examples using (x, y, pixel)
sense.set_pixel(0, 0, red)
sense.set_pixel(0, 0, green)
sense.set_pixel(0, 0, blue)

get_pixel 获取指定位置的颜色

get_pixels 不过是单体版的

参数 类型 可选参数 描述
x Integer 0-7 0为左 7为右
y Integer 0-7 0为上 7为下
返回类型 描述
List [R,G,B] 组成的数组

示例:

1
2
3
4
from sense_hat import SenseHat

sense = SenseHat()
top_left_pixel = sense.get_pixel(0, 0)

load_image 加载图像到矩阵中

加载一个图像文件,将其转换为RGB格式,并在LED矩阵上显示。图像的大小必须是8×8像素。

参数 类型 可选参数 描述
file_path String ... 有效的图片路径
redraw Boolean TRUE/FALSE 是否重绘已加载的图像文件在LED矩阵上。默认值为True

示例:

1
2
3
4
from sense_hat import SenseHat

sense = SenseHat()
sense.load_image("space_invader.png")

返回类型 描述
List [[R,G,B] * 64] 组成的数组
1
2
3
4
from sense_hat import SenseHat

sense = SenseHat()
invader_pixels = sense.load_image("space_invader.png", redraw=False)

clear 让 led 屏变成纯色,默认是关闭

参数 类型 可选参数 描述
当只有一个参数的时候
pixel Tuple / List 0-255 (r, g, b) 数值,默认为[0,0,0]
当有三个参数的时候
r Integer 0-255
g Integer 0-255 绿
b Integer 0-255

示例:

1
2
3
4
5
6
7
8
9
10
11
12
from sense_hat import SenseHat
from time import sleep

sense = SenseHat()

red = (255, 0, 0)

sense.clear() # no arguments defaults to off
sleep(1)
sense.clear(red) # passing in an RGB tuple
sleep(1)
sense.clear(255, 255, 255) # passing in r, g and b values of a colour

show_message 屏幕显示单个文字

就是街头广告灯的那种 led 滚屏啦!

参数 类型 可选参数 描述
text_string String ... 将要滚屏的字母
scroll_speed Float 任意浮点数 滚屏速度,默认 0.1
text_colour List [R,G,B]] 文字颜色,默认[255,255,255]
back_colour List [R,G,B]] 背景颜色,默认[0,0,0]

示例:

1
2
3
4
from sense_hat import SenseHat

sense = SenseHat()
sense.show_message("One small step for Pi!", text_colour=[255, 0, 0])

show_letter 单屏显示字母

参数 类型 可选参数 描述
s String ... 将要显示的字母
text_colour List [R,G,B]] 文字颜色,默认[255,255,255]
back_colour List [R,G,B]] 背景颜色,默认[0,0,0]

示例:

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python
import time
from sense_hat import SenseHat

sense = SenseHat()

letters = "ABCDEFGHIJKLMNOPQRSTUVWSYZ"


for i in letters:
sense.show_letter(str(i))
time.sleep(1)

low_light 调低亮度

如果觉得亮度有点刺眼的话可以开低亮度模式

1
2
3
4
5
6
7
8
import time
from sense_hat import SenseHat

sense = SenseHat()
sense.clear(255, 255, 255)
sense.low_light = True
time.sleep(2)
sense.low_light = False

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
import time
from sense_hat import SenseHat

sense = SenseHat()
sense.clear(255, 127, 0)

sense.set_pixels(question_mark)

print(sense.gamma)
time.sleep(2)

old = sense.gamma
sense.gamma = old[::-1]
print(sense.gamma)
time.sleep(2)


sense.low_light = True
print(sense.gamma)
time.sleep(2)

sense.low_light = False

gamma

For advanced users. Most users will just need the low_light Boolean property above. The Sense HAT python API uses 8 bit (0 to 255) colours for R, G, B. When these are written to the Linux frame buffer they’re bit shifted into RGB 5 6 5. The driver then converts them to RGB 5 5 5 before it passes them over to the ATTiny88 AVR for writing to the LEDs.
The gamma property allows you to specify a gamma lookup table for the final 5 bits of colour used. The lookup table is a list of 32 numbers that must be between 0 and 31. The value of the incoming 5 bit colour is used to index the lookup table and the value found at that position is then written to the LEDs.

对于高级用户。大多数用户只需要上面的low_light布尔属性。这个感觉帽python API使用8位(0到255)的颜色为R,G,b。当这些被写入Linux框架缓冲区时,它们被位转换为RGB 5 6 5。然后,驱动程序将它们转换为RGB 5 5 5,然后将其传递给ATTiny88 AVR以写入led。
gamma属性允许您为使用的最后5位颜色指定一个伽马查找表。查找表是32个数字的列表,它们必须在0到31之间。传入的5位颜色的值用于索引查找表,然后将该位置上发现的值写入led。
—来自有道词典,因为暂时不知道用在哪里

类型 可选参数 描述
List 长度为32的元组或列表,包含0到31之间的整数 最后的5位颜色的查找表

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import time
from sense_hat import SenseHat

sense = SenseHat()
sense.clear(255, 127, 0)

print(sense.gamma)
time.sleep(2)

sense.gamma = sense.gamma[::-1]
print(sense.gamma)
time.sleep(2)

sense.low_light = True
print(sense.gamma)
time.sleep(2)

sense.low_light = False

gamma_reset

一个函数将gamma查找表重置为默认值,理想情况下,如果您已经对它进行了处理,并希望将它恢复到默认状态。
示例:

1
2
3
4
5
6
7
8
9
import time
from sense_hat import SenseHat

sense = SenseHat()
sense.clear(255, 127, 0)
time.sleep(2)
sense.gamma = [0] * 32 # Will turn the LED matrix off
time.sleep(2)
sense.gamma_reset()

环境感应器

get_humidity 湿度

返回类型 描述
Float 湿度的百分数

示例:

1
2
3
4
5
6
7
8
9
#!/usr/bin/python
from sense_hat import SenseHat

sense = SenseHat()
humidity = sense.get_humidity()
print("Humidity: %s %%rH" % humidity) #Humidity: 13.8048038483 %rH

# 同样效果
print(sense.humidity) #14.9011135101

get_temperature 温度

返回值也是浮点数
示例:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/python
from sense_hat import SenseHat

sense = SenseHat()
temp = sense.get_temperature()
print("Temperature: %s C" % temp) # Temperature: 33.0 C

# alternatives
print(sense.temp) # 33.0
print(sense.temperature) # 33.0

get_temperature_from_humidity 温度

从湿度传感器获取当前温度(摄氏度)。
示例:

1
2
3
4
5
from sense_hat import SenseHat

sense = SenseHat()
temp = sense.get_temperature_from_humidity()
print("Temperature: %s C" % temp)

get_temperature_from_pressure 温度

从压力传感器获取温度

1
2
3
4
5
from sense_hat import SenseHat

sense = SenseHat()
temp = sense.get_temperature_from_pressure()
print("Temperature: %s C" % temp)

get_pressure 压力

获取压力参数

ps: 1Bar=0.1MPa=1000mba=1000hpa=100*7.5mmhg=75mmhg=1个大气压

返回类型 描述
Float 单位为Millibars

示例:

1
2
3
4
5
6
7
8
from sense_hat import SenseHat

sense = SenseHat()
pressure = sense.get_pressure()
print("Pressure: %s Millibars" % pressure) #Pressure: 1024.56738281 Millibars

# 同理
print(sense.pressure) # 1024.56738281

IMU Sensor 惯性测量单元

IMU(inertial measurement unit)传感器是三个传感器的组合,每个传感器分别有x、y和z轴。由于这个原因,它被认为是一个9自由度的传感器。

  • 陀螺仪(Gyroscope)
  • 加速度计(Accelerometer)
  • 指南针(Magnetometer)
    这个API允许你在任何组合中使用这些传感器来测量方向或单独的传感器。

set_imu_config

支持或禁用陀螺仪、加速度计和/或磁强计

参数 类型 可选参数 描述
compass_enabled Boolean TRUE,FALSE 是否启用指南针
gyro_enabled Boolean TRUE,FALSE 是否启用陀螺仪
accel_enabled Boolean TRUE,FALSE 是否启用加速度计

示例:

1
2
3
4
from sense_hat import SenseHat

sense = SenseHat()
sense.set_imu_config(False, True, False) # 只开启陀螺仪

get_orientation_radians

获取当前方向弧度,依据飞行器轴参数的 pitch, roll 和 yaw.
理解传说中的roll、yaw、pitch
欧拉角

返回类型 描述
Dictionary 由俯仰角pitch,偏航角yaw,翻滚角roll组成的字典key 值,value 为轴弧度

示例:

1
2
3
4
5
6
7
8
from sense_hat import SenseHat

sense = SenseHat()
orientation_rad = sense.get_orientation_radians()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation_rad)) # p: 0.0906969159842, r: -0.218863099813, y: 2.87161874771

# alternatives
print(sense.orientation_radians) # {'yaw': 2.933598041534424, 'roll': -0.20759552717208862, 'pitch': 0.09733205288648605}

get_orientation_degrees

以俯仰、翻滚和偏航的飞机主轴得到当前的方向。

返回类型 描述
Dictionary 由俯仰角pitch,偏航角yaw,翻滚角roll组成的字典key 值,value 为轴角度

示例:

1
2
3
4
5
from sense_hat import SenseHat

sense = SenseHat()
orientation = sense.get_orientation_degrees()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation)) # p: 359.368855623, r: 359.958133745, y: 24.4292643968

get_orientation

作用同get_orientation_degrees

1
2
3
4
5
6
from sense_hat import SenseHat

sense = SenseHat()
orientation = sense.get_orientation()

print(sense.orientation) # {'yaw': 20.334569404489745, 'roll': 0.02406978340326997, 'pitch': 359.2895215347403}

get_compass

调用罗盘时会预先调用set_imu_config禁止掉重力计和加速度计的功能

1
2
3
4
5
6
7
8
from sense_hat import SenseHat

sense = SenseHat()
north = sense.get_compass()
print("North: %s" % north) # North: 351.031626941

# alternatives
print(sense.compass) # 351.031626941

get_compass_raw

获取原始x、y和z轴的磁强计数据。

返回类型 描述
Dictionary 字典对象索引的字符串x,y和z。表示磁场强度的值浮动轴的microteslas(µT)。
1
2
3
4
5
6
7
8
from sense_hat import SenseHat

sense = SenseHat()
raw = sense.get_compass_raw()
print("x: {x}, y: {y}, z: {z}".format(**raw)) # x: 3.14855718613, y: 0.269534498453, z: -0.743863344193

# alternatives
print(sense.compass_raw) # {'y': 0.4851621091365814, 'x': 5.667402744293213, 'z': -1.338953971862793}

get_gyroscope

调用set_imu_config来禁用磁强计和加速计,然后只从陀螺仪获取当前方向。

返回类型 描述
Dictionary 由俯仰角pitch,偏航角yaw,翻滚角roll组成的字典key 值,value 为轴角度
1
2
3
4
5
6
7
8
9
from sense_hat import SenseHat

sense = SenseHat()
gyro_only = sense.get_gyroscope()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**gyro_only))

# alternatives
print(sense.gyro) # {'yaw': 0.0604013305118731, 'roll': 359.9494321175156, 'pitch': 359.9567423509234}
print(sense.gyroscope) # {'yaw': 0.0604013305118731, 'roll': 359.9494321175156, 'pitch': 359.9567423509234}

get_gyroscope_raw

获取原始x、y和z轴的陀螺仪数据。

返回类型 描述
Dictionary 一个由字符串x、y和z索引的字典对象。这些值是按每秒弧度表示轴的旋转强度的浮点数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14

from sense_hat import SenseHat

sense = SenseHat()
raw = sense.get_gyroscope_raw()
print("x: {x}, y: {y}, z: {z}".format(**raw))

# alternatives
print(sense.gyro_raw)
print(sense.gyroscope_raw)

# x: 1.03765261173, y: 2.46352291107, z: 0.185390725732
# {'y': 1.5728815793991089, 'x': 0.34309887886047363, 'z': 0.2984008193016052}
# {'y': 0.8343454599380493, 'x': 0.163504496216774, 'z': 0.4767734408378601}

get_accelerometer

调用set_imu_config来禁用磁力仪和陀螺仪,然后从加速度计得到当前的方向。

返回类型 描述
Dictionary 由俯仰角pitch,偏航角yaw,翻滚角roll组成的字典key 值,value 为轴角度
1
2
3
4
5
6
7
8
9
10
11
12
13
14

from sense_hat import SenseHat

sense = SenseHat()
accel_only = sense.get_accelerometer()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**accel_only))

# alternatives
print(sense.accel)
print(sense.accelerometer)

# p: 3.76471788135, r: 10.0814548376, y: 0.0
# {'yaw': 4.5454772552392335e-07, 'roll': 10.082596332952239, 'pitch': 3.7639588765826475}
# {'yaw': 4.5454772552392335e-07, 'roll': 10.082596332952239, 'pitch': 3.7639588765826475}

get_accelerometer_raw

获取原始x、y和z轴加速度计数据。

返回类型 描述
Dictionary 一个由字符串x、y和z索引的字典对象。这些值代表了在Gs中轴的加速度强度。
1
2
3
4
5
6
7
8
9
10
11
12
13
from sense_hat import SenseHat

sense = SenseHat()
raw = sense.get_accelerometer_raw()
print("x: {x}, y: {y}, z: {z}".format(**raw))

# alternatives
print(sense.accel_raw)
print(sense.accelerometer_raw)

# x: -0.0634367614985, y: 0.172625526786, z: 0.974787354469
# {'y': 0.1738394945859909, 'x': -0.06516461074352264, 'z': 0.9757621884346008}
# {'y': 0.17286831140518188, 'x': -0.06565827876329422, 'z': 0.9735689163208008}

Joystick 操纵杆

操纵事件

描述操纵杆事件的元组。包含三个命名参数:

  • 时间戳—事件发生的时间,作为秒数(与内置时间函数相同的格式)
  • 方向-操纵杆移动的方向,作为一个字符串(“向上”,“向下”,“左”,“右”,“中间”)
  • 动作—发生的动作,作为一个字符串(“按压”,“释放”,“持有”)

这个tuple类型被一些joystick方法使用,要么作为返回类型,要么是参数的类型。

wait_for_event

在发生joystick事件之前阻止执行,然后返回一个表示发生的事件的InputEvent

1
2
3
4
5
6
7
8
9
from sense_hat import SenseHat
from time import sleep

sense = SenseHat()
event = sense.stick.wait_for_event()
print("The joystick was {} {}".format(event.action, event.direction))
sleep(0.1)
event = sense.stick.wait_for_event()
print("The joystick was {} {}".format(event.action, event.direction))

在上面的例子中,如果你将操纵杆简单地推到一个单一的方向,你就会看到两个事件输出:一个被压的动作和一个释放的动作。可选的emptybuffer可以用于在等待新事件之前刷新任何未决事件。试试下面的脚本,看看有什么不同:

1
2
3
4
5
6
7
8
9
from sense_hat import SenseHat
from time import sleep

sense = SenseHat()
event = sense.stick.wait_for_event()
print("The joystick was {} {}".format(event.action, event.direction))
sleep(0.1)
event = sense.stick.wait_for_event(emptybuffer=True)
print("The joystick was {} {}".format(event.action, event.direction))

get_events

返回自最后一次调用get_eventswait_for_event之后发生的所有事件的InputEvent tuple的列表。

1
2
3
4
5
6
from sense_hat import SenseHat

sense = SenseHat()
while True:
for event in sense.stick.get_events():
print("The joystick was {} {}".format(event.action, event.direction))

direction_up, direction_left, direction_right, direction_down, direction_middle, direction_any

这些属性可以被分配一个函数,当操纵杆按在相关的方向(或者在direction_any的任何方向上)时,它就会被调用。分配的函数要么不接受参数,要么必须接受一个参数,该参数将传递给相关的InputEvent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED
from signal import pause

x = 3
y = 3
sense = SenseHat()

def clamp(value, min_value=0, max_value=7):
return min(max_value, max(min_value, value))

def pushed_up(event):
global y
if event.action != ACTION_RELEASED:
y = clamp(y - 1)

def pushed_down(event):
global y
if event.action != ACTION_RELEASED:
y = clamp(y + 1)

def pushed_left(event):
global x
if event.action != ACTION_RELEASED:
x = clamp(x - 1)

def pushed_right(event):
global x
if event.action != ACTION_RELEASED:
x = clamp(x + 1)

def refresh():
sense.clear()
sense.set_pixel(x, y, 255, 255, 255)

sense.stick.direction_up = pushed_up
sense.stick.direction_down = pushed_down
sense.stick.direction_left = pushed_left
sense.stick.direction_right = pushed_right
sense.stick.direction_any = refresh
refresh()
pause()

相关资料

博客原文
api 原文
树莓派+senseHAT 的一个入门项目
来自官方的 astro-pi 简介

这个博客有个赞赏功能,不试一下吗?