Introducing the Sense HAT
The Raspberry Pi Sense HAT is an add-on board that gives your Raspberry Pi an array of sensing capabilities. The on-board sensors allow you to monitor pressure, humidity, temperature, colour, orientation, and movement. The bright 8×8 RGB LED matrix allows you to visualise data from the sensors, and the five-button joystick lets users interact with your projects.
The Sense HAT was originally developed for use on the International Space Station, as part of the educational Astro Pi programme run by the Raspberry Pi Foundation in partnership with the European Space Agency. It is well suited to many projects that require position, motion, orientation, or environmental sensing. The Sense HAT is powered by the Raspberry Pi computer to which it is connected.
An officially supported Python library provides access to all of the on-board sensors, the LED matrix, and the joystick. The Sense HAT is compatible with any Raspberry Pi computer with a 40-pin GPIO header.
In order to work correctly, the Sense HAT requires an up-to-date kernel, I2C to be enabled, and a few libraries to get started.
Ensure your APT package list is up-to-date:
sudo apt update
Next, install the sense-hat package, which will ensure the kernel is up to date, enable I2C, and install the necessary libraries and programs:
sudo apt install sense-hat
Finally, a reboot may be required if I2C was disabled or the kernel was not up-to-date prior to the install:
After installation, example code can be found under
You can find more information on how to use the Sense HAT in the Raspberry Pi Press book Experiment with the Sense HAT. Written by The Raspberry Pi Foundation’s Education Team, it is part of the MagPi Essentials series published by Raspberry Pi Press. The book covers the background of the Astro Pi project, and walks you through how to make use of all the Sense HAT features using the Python library.
You can download this book as a PDF file for free, it has been released under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY NC-SA) licence.
Using the Sense HAT with Python
sense-hat is the officially supported library for the Sense HAT; it provides access to all of the on-board sensors and the LED matrix.
Complete documentation for the library can be found at pythonhosted.org/sense-hat.
Using the Sense HAT with C++
RTIMULib is a C++ and Python library that makes it easy to use 9-dof and 10-dof IMUs with embedded Linux systems. A pre-calibrated settings file is provided in
/etc/RTIMULib.ini, which is also copied and used by
sense-hat. The included examples look for
RTIMULib.ini in the current working directory, so you may wish to copy the file there to get more accurate data.
The RTIMULibDrive11 example comes pre-compiled to help ensure everything works as intended. It can be launched by running
RTIMULibDrive11 and closed by pressing
The C/C++ examples can be compiled by running
Sense HAT hardware
The Sense HAT has an 8×8 RGB LED matrix and a five-button joystick, and includes the following sensors:
Colour and brightness
Schematics and mechanical drawings for the Sense HAT are available for download.
The LED matrix is an RGB565 framebuffer with the id "RPi-Sense FB". The appropriate device node can be written to as a standard file or mmap-ed. The included 'snake' example shows how to access the framebuffer.
The joystick comes up as an input event device named "Raspberry Pi Sense HAT Joystick", mapped to the arrow keys and
Enter. It should be supported by any library which is capable of handling inputs, or directly through the evdev interface. Suitable libraries include SDL, pygame and python-evdev. The included 'snake' example shows how to access the joystick directly.
Install the necessary software and run the calibration program as follows:
$ sudo apt update $ sudo apt install octave -y $ cd $ cp /usr/share/librtimulib-utils/RTEllipsoidFit ./ -a $ cd RTEllipsoidFit $ RTIMULibCal
You will then see this menu:
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. The following message will then show. Press any key to start.
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...
After it starts, you will see something similar to this scrolling up the screen:
Min x: 51.60 min y: 69.39 min z: 65.91 Max x: 53.15 max y: 70.97 max z: 67.97
Focus on the two lines at the very bottom of the screen, as these are the most recently posted measurements from the program.
Now, pick up the Raspberry Pi and Sense HAT and move it around in every possible way you can think of. It helps if you unplug all non-essential cables to avoid clutter.
Try and get a complete circle in each of the pitch, roll and yaw axes. Take care not to accidentally eject the SD card while doing this. Spend a few minutes moving the Sense HAT, and stop when you find that the numbers are not changing anymore.
Now press lowercase
s then lowercase
x to exit the program. If you run the
ls command now, you’ll see a new
RTIMULib.ini file has been created.
In addition to those steps, you can also do the ellipsoid fit by performing the steps above, but pressing
e instead of
When you’re done, copy the resulting
RTIMULib.ini to /etc/ and remove the local copy in
$ rm ~/.config/sense_hat/RTIMULib.ini $ sudo cp RTIMULib.ini /etc
Reading and writing EEPROM data
Enable I2C0 and I2C1 by adding the following line to
Enter the following command to reboot:
sudo systemctl reboot
Download and build the flash tool:
$ git clone https://github.com/raspberrypi/hats.git $ cd hats/eepromutils $ make
|These steps may not work on Raspberry Pi 2 Model B Rev 1.0 and Raspberry Pi 3 Model B boards. The firmware will take control of I2C0, causing the ID pins to be configured as inputs.|
EEPROM data can be read with the following command:
$ sudo ./eepflash.sh -f=sense_read.eep -t=24c32 -r
Download EEPROM settings and build the
$ wget https://github.com/raspberrypi/rpi-sense/raw/master/eeprom/eeprom_settings.txt -O sense_eeprom.txt ./eepmake sense_eeprom.txt sense.eep /boot/overlays/rpi-sense-overlay.dtb
Disable write protection:
$ i2cset -y -f 1 0x46 0xf3 1
Write the EEPROM data:
$ sudo ./eepflash.sh -f=sense.eep -t=24c32 -w
Re-enable write protection:
i2cset -y -f 1 0x46 0xf3 0
|This operation will not damage your Raspberry Pi or Sense Hat, but if an error occurs, the HAT may no longer be automatically detected. The steps above are provided for debugging purposes only.|