# 传感器扩展板（Sense HAT）

## 传感器扩展板（Sense HAT）简介

树莓派传感器扩展板（Sense HAT）可为你的树莓派提供一系列传感功能。板载传感器可让你监测压力、湿度、温度、颜色、方向和运动。明亮的 8×8 RGB LED 矩阵可使传感器数据可视化，五个按钮的摇杆能让用户与你的项目进行交互。

![Sense HAT](https://www.raspberrypi.com/documentation/accessories/images/Sense-HAT.jpg?hash=e095672e700544fc89a62dad3d9fc164)

Sense HAT 最初是为在国际空间站上使用而开发的，是[树莓派基金会](https://raspberrypi.org/)与[欧洲航天局](https://www.esa.int/)合作开展的 [Astro Pi](https://astro-pi.org/) 教育计划的一部分。它可以帮助完成一切需要位置、运动、方向或环境传感的项目。

由官方支持的 Python 库提供了对所有板载传感器、LED 矩阵和操纵杆的控制。传感器扩展板兼容带有 40 针 GPIO 引脚排针型号的树莓派计算机。

## 安装

为了正确工作，传感器扩展板需要最新的内核，启用 I²C，并准备一些库来继续。

确保你的 APT 软件源是最新的：

```
$ sudo apt update && sudo apt full-upgrade
```

接下来，安装传感器扩展板软件包，这将确保内核是最新的，启用 I²C，并安装必要的库和程序：

```
$ sudo apt install sense-hat
```

最后，如果 I²C 被禁用或在安装之前内核是旧的，则可能需要重启：

```
$ sudo reboot
```

## 入门指南

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

### 进一步阅读

![](https://www.raspberrypi.com/documentation/accessories/images/experiment-with-the-sense-hat.png)

你可以在由树莓派出版的《Experiment with the Sense HAT》一书中找到有关如何使用传感器扩展板的更多信息。由 Raspberry Pi 基金会的教育团队编写，这本书是由 Raspberry Pi Press 出版的 MagPi Essentials 系列的一部分。该书涵盖了 Astro Pi 项目的背景，并指导你如何使用 Python 库利用所有传感器扩展板的功能。

你可以以 PDF 格式免费下载这本书，它已根据知识共享署名-非商业性使用-相同方式共享 3.0 未本地化（CC BY NC-SA）许可发布。

### 使用 Python 与传感器扩展板

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

可在 sense-hat.readthedocs.io 找到该库的完整文档。

### 使用 C++ 与传感器扩展板

RTIMULib 是一个 C++ 和 Python 库，可使嵌入式 Linux 系统与 9 自由度和 10 自由度 IMU 的使用变得更加容易。/etc/RTIMULib.ini 中提供了一个预校准的设置文件，也被 sense-hat 复制并使用。包含的示例在当前工作目录中查找 RTIMULib.ini，因此你可能希望将文件复制到那里以获得更准确的数据。

RTIMULibDrive11 示例已经被预编译，以确保一切按预期工作。可以通过运行 RTIMULibDrive11 启动，并通过按 **Ctrl** **C** 停止。

> **注意**
>
> 可以通过在适当的目录中运行 make 来编译 C/C++ 示例。

## 传感器扩展板硬件

传感器扩展板配备有 8×8 RGB LED 点阵和五向按钮摇杆，并包含以下传感器：

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

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

* Sense HAT V1 原理图。
* Sense HAT V2 原理图。
* 传感器扩展板机械图纸。

### LED 点阵

LED 点阵是一个带有 id“RPi-Sense FB”的 RGB565 帧缓冲区。适当的设备节点可以被写入为标准文件或进行 mmap 映射。包含的“snake”示例展示了如何访问帧缓冲区。

### 操纵杆

操纵杆显示为名为“Raspberry Pi Sense HAT Joystick”的输入事件设备，映射到方向键和`回车键`。它应该受到任意能够处理输入的库的支持，或直接通过 evdev 接口。适用的库包括 SDL、pygame 和 python-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
```

关注屏幕底部的两行，因为这些是程序中最近发布的测量结果。

现在，拿起树莓派和传感器扩展板，以尽可能多的方式移动它。最好拔掉所有非必要的电缆，以避免混乱。

尝试在俯仰、横滚和偏航轴上各获得一个完整的圆圈。在执行此操作时，请注意不要意外弹出存储卡。花几分钟移动传感器扩展板，当你发现数字不再变化时停止。

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

除了这些步骤，你还可以通过执行上述步骤，但按 m 键而不是 e 键来执行椭球拟合。

当你完成后，将生成的 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
```

下载并构建闪存工具：

```
$ 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
```

> **警告**
>
> 此操作不会损坏你的树莓派或传感器扩展板，但如果发生错误，扩展板可能不能被自动检测到。上述步骤仅供调试目的。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rpicn.bsdcn.org/pei-jian/chuan-gan-qi-kuo-zhan-ban-sense-hat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
