跳到主要内容

Sense HAT

介绍Sense HAT

树莓派Sense HAT 是一块附加板,可为您的树莓派提供一系列传感功能。通过板载传感器,您可以监控压力、湿度、温度、颜色、方向和移动。明亮的 8×8 RGB LED 矩阵可让您将来自传感器的数据可视化,五键操纵杆可让用户与您的项目互动。

Sense HAT

Sense HAT 最初是为在国际空间站上使用而开发的,是树莓派基金会欧洲航天局合作开展的 Astro Pi 教育计划的一部分。它非常适合许多需要位置、运动、方向或环境传感的项目。Sense HAT 由与其连接的树莓派计算机供电。

通过官方支持的 Python 库,可以访问所有板载传感器、LED 矩阵和操纵杆。Sense HAT 兼容任何带有 40 针 GPIO 接口的 树莓派 电脑。

安装

为了正常工作,Sense HAT 需要最新的内核、启用 I2C 和一些库才能启动。

确保你的 APT 软件包列表是最新的:

sudo apt update

接下来,安装 sense-hat 软件包,它将确保内核是最新的,启用 I2C 并安装必要的库和程序:

sudo apt install sense-hat

最后,如果在安装之前禁用了 I2C 或内核不是最新的,可能需要重启:

sudo reboot

开始使用

安装完成后,可在 /usr/src/sense-hat/examples 下找到示例代码。

更多阅读

您可以在树莓派Press出版的《Experiment with the Sense HAT》一书中找到更多有关如何使用 Sense HAT 的信息。该书由树莓派基金会教育团队编写,是树莓派出版社出版的 MagPi Essentials 系列丛书的一部分。该书介绍了 Astro Pi 项目的背景,并指导您如何使用 Python 库使用 Sense HAT 的所有功能。

您可以免费下载本书的 PDF 文件,它采用知识共享 署名-非商业性-相同方式共享 3.0 Unported (CC BY NC-SA) 许可发布。

Experiment with the Sense HAT

Python使用Sense HAT

sense-hat 是官方支持的 Sense HAT 库;它提供了对所有板载传感器和 LED 矩阵的访问。

有关该库的完整文档,请访问 sense-hat.readthedocs.io

C++使用Sense HAT

RTIMULib 是一个 C++ 和 Python 库,可在嵌入式 Linux 系统中轻松使用 9-dof 和 10-dof IMU。/etc/RTIMULib.ini中提供了一个预校准设置文件,sense-hat也可以复制并使用该文件。附带的示例会在当前工作目录下查找 RTIMULib.ini,因此您可以将该文件复制到该目录下,以获得更准确的数据。

RTIMULibDrive11 示例已预编译,有助于确保一切按预期运行。运行 RTIMULibDrive11 即可启动该示例,按下 Ctrl C 关闭该示例。

注意

C/C++ 示例可通过在相应目录下运行 make 进行编译。

Sense HAT硬件

Sense HAT 有一个 8×8 RGB LED 矩阵和一个五键操纵杆,还包括以下传感器:

  • 陀螺仪
  • 加速计
  • 磁力计
  • 温度计
  • 气压
  • 湿度
  • 颜色和亮度

可下载 Sense HAT 和 Sense HAT V2 的原理图和机械图纸。

LED矩阵

LED 矩阵是一个 RGB565 帧缓冲器,id 为 "RPi-Sense FB"。相应的设备节点可作为标准文件或mmap文件写入。附带的 "snake" 示例展示了如何访问帧缓冲器。

操纵杆

操纵杆作为输入事件设备出现,名为 "Raspberry Pi Sense HAT Joystick",映射到方向键和回车键。任何能够处理输入的库都应支持它,或者直接通过 evdev 接口 支持。合适的库包括 SDL、pygamepython-evdev 等。附带的 "snake "示例展示了如何直接访问操纵杆。

校准

安装必要的软件并运行校准程序,如下所示:

sudo apt update
sudo apt install octave -y
cd
cp /usr/share/librtimulib-utils/RTEllipsoidFit ./ -a
cd RTEllipsoidFit
RTIMULibCal

校准程序将显示以下菜单:

Options are:

m - calibrate magnetometer with min/max
e - calibrate magnetometer with ellipsoid (do min/max first)
a - calibrate accelerometers
x - exit

Enter option:

按小写 m。按任意键开始。

    Magnetometer min/max calibration
--------------------------------
Waggle the IMU chip around, ensuring that all six axes
(+x, -x, +y, -y and +z, -z) go through their extrema.
When all extrema have been achieved, enter 's' to save, 'r' to reset
or 'x' to abort and discard the data.

Press any key to start...

启动后,你会看到类似下面的输出在屏幕上滚动:

 Min x:  51.60  min y:  69.39  min z:  65.91
Max x: 53.15 max y: 70.97 max z: 67.97

关注屏幕最下方的两行,因为这两行是程序最近发布的测量结果。

现在,拿起树莓派和 Sense HAT,以你能想到的各种方式移动它。如果能拔掉所有非必要的电缆,就能避免杂乱无章。

尝试在俯仰、滚动和偏航轴上各绕一圈。注意在此过程中不要意外弹出 SD 卡。花几分钟移动 Sense HAT,当发现数字不再变化时停止。

现在按小写 s,然后按小写 x 退出程序。现在运行 ls 命令,你会看到一个新的 RTIMULib.ini 文件已经创建。

除上述步骤外,您还可以按上述步骤进行椭圆拟合,但要按 e 而不是 m

完成后,将生成的 RTIMULib.ini 文件复制到 /etc/,并删除 ~/.config/sense_hat/ 中的本地副本:

rm ~/.config/sense_hat/RTIMULib.ini
sudo cp RTIMULib.ini /etc

读写EEPROM数据

/boot/firmware/config.txt 文件中添加以下一行,启用 I2C0 和 I2C1:

dtparam=i2c_vc=on
dtparam=i2c_arm=on

输入以下命令重新启动

sudo systemctl reboot

下载并构建 flash 工具:

git clone https://github.com/raspberrypi/hats.git
cd hats/eepromutils
make
注意

这些步骤可能不适用于树莓派2B Rev 1.0 和树莓派3B。固件将控制 I2C0,导致 ID 引脚被配置为输入。

读取

可使用以下命令读取 EEPROM 数据:

sudo ./eepflash.sh -f=sense_read.eep -t=24c32 -r

写入

下载 EEPROM 设置并生成 .eep 二进制文件:

wget https://github.com/raspberrypi/rpi-sense/raw/master/eeprom/eeprom_settings.txt -O sense_eeprom.txt
./eepmake sense_eeprom.txt sense.eep /boot/firmware/overlays/rpi-sense-overlay.dtb

禁用写保护:

i2cset -y -f 1 0x46 0xf3 1

写入 EEPROM 数据:

sudo ./eepflash.sh -f=sense.eep -t=24c32 -w

重新启用写保护:

i2cset -y -f 1 0x46 0xf3 0
警告

此操作不会损坏树莓派或 Sense Hat,但如果发生错误,HAT 可能无法自动检测到。上述步骤仅供调试之用。


中文翻译版以英文版相同知识授权方式共享:CC-BY-SA 4.0。交流 Q群:498908352