Sample: Display ESP32 Temperature on Several Drivers
This sample demonstrates how to initialize the driver with three cascaded MAX7219 / MAX7221 devices and display the current temperature, minimum temperature and maximum temperature.
Walk through
This sample demonstrates the following capabilities:
- Initialize the ESP temperature sensor via
temperature_sensor_install()
and temperature_sensor_enable()
,
- Initialize an SPI host in master mode using ESP-IDF
spi_bus_initialize()
,
- Initialize the MAX7219 / MAX7221 driver via
led_driver_max7219_init()
,
- Configure scan limit to eight digits with
led_driver_max7219_configure_chain_scan_limit()
,
- Set ‘Direct Addressing’ decoding using
led_driver_max7219_configure_chain_decode()
,
- Set LEDs intensity to
MAX7219_INTENSITY_DUTY_CYCLE_STEP_2
using led_driver_max7219_set_chain_intensity()
,
- Switch between shutdown mode and normal mode with
led_driver_max7219_set_chain_mode()
,
- Read the current temperature via
temperature_sensor_get_celsius()
, calculate the minimum and maximum,
- Display the current, minimum and maximum temperature with
led_driver_max7219_set_digits()
,
- Shutdown the MAX7219 / MAX7221 driver and free up resources it allocated via
led_driver_max7219_free()
.
Hardware
To make the most out of the sample, the following hardware setup is recommended:
- An ESP32 family device equipped with a temperature sensor. This sample has been tested with ESP32, ESP32-S3 and ESP32-C3. Other members of the ESP32 family should also work,
- A power source capable of providing the MAX7219 / MAX7221 with a maximum of 6V at 500mA. See the MAX7219 / MAX7221 data sheet for electrical characteristics,
- Three MAX7219 / MAX7221 devices each connected to eight seven-segment displays with decimal point. The rightmost digit is assumed to be wired as digit ‘0’ on the MAX7219 / MAX7221.
- Connect the first MAX7219 / MAX7221
DOUT
to the second MAX7219 / MAX7221 DIN
and DOUT
from the second MAX7219 / MAX7221 to DIN
of the third MAX7219 / MAX7221 device,
- Connect all devices
LOAD/CS
and CLK
. When cascading MAX7219 / MAX7221 devices, all devices share the same SPI LOAD/CS
and CLK
. Refer to the MAX7219 / MAX7221 data sheet for more information on cascading devices,
- A 3-wire SPI connection (CLK, MOSI, /CS) between the MAX7219 / MAX7221 chain and the ESP32. MAX7219 / 7221 devices cannot be reliably driven directly by 3.3V logic due to their higher than normal minimum logic high voltage (Vih) requirement of 3.5V. There are several ways to overcome this challenge. Here are a few options, among many others:
- Connect the ESP32 SPI lines (CLK, MOSI, /CS) to the first MAX7219 / MAX7221 in the chain via a logic level shifter (for instance a TXS0108E),
- Connect the ESP32 SPI lines (CLK, MOSI, /CS) to the first MAX7219 / MAX7221 in the chain via a 3.3V compatible logic buffer (for instance a 74HCT125 / 74AHCT125),
- Microchip 3V Tips ‘n Tricks offers a few alternatives including connection via discrete N-Channel Logic Level Enhancement Mode FET circuitry (for instance BSS138), diode clamps, …
Firmware
In max7219_7221_cascade.c
, configure CS_LOAD_PIN
(/CS
), CLK_PIN
(CLK
) and DIN_PIN
(MOSI
) adequately for your hardware setup:
const gpio_num_t CS_LOAD_PIN = GPIO_NUM_19;
const gpio_num_t CLK_PIN = GPIO_NUM_18;
const gpio_num_t DIN_PIN = GPIO_NUM_16;
Build and flash an ESP32 device. Ensure you have a working connection to UART as the sample emits various information via ESP_LOGxxx.