Découvrez comment interfacer l’affichage LED à 7 segments à 4 chiffres TM1637 avec les cartes ESP32 et ESP8266 programmées avec MicroPython. Apprenez à connecter l’écran aux tableaux et à les programmer pour afficher du texte, des chiffres et des caractères personnalisés. À titre d’exemple, nous allons créer un affichage de prévisionniste météo.

Table des matières
Dans ce didacticiel, nous aborderons les sujets suivants :
Nouveau sur MicroPython ? Consultez notre eBook : Programmation MicroPython avec ESP32 et ESP8266 eBook (2e édition)
Conditions préalables
Pour suivre ce tutoriel, vous devez installer le firmware MicroPython sur vos cartes ESP32 ou ESP8266. Vous avez également besoin d’un IDE pour écrire et télécharger le code sur votre tableau. Nous vous suggérons d’utiliser Thonny IDE ou uPyCraft IDE :
- ThonnyIDE :
- L’EDI uPyCraft :
Présentation de l’affichage LED à 7 segments à 4 chiffres TM1637
L’écran LED à 4 chiffres et 7 segments TM1637 est un module d’affichage qui combine quatre chiffres à 7 segments sur un seul écran qui peut être contrôlé via le pilote TM1637. Le module particulier que nous utilisons ici comporte quatre chiffres séparés par deux points entre le deuxième et le troisième chiffre.

Il existe des modules similaires avec des points entre les chiffres.
Il existe également des modules similaires avec six chiffres à 7 segments. Ceux-ci nécessitent une bibliothèque différente de celle que nous utiliserons dans ce tutoriel.
Remarque : J’ai essayé d’utiliser mes six modules d’affichage à 7 segments, mais il semble que bon nombre de ces écrans soient défectueux par défaut. Je n’arrivais pas à faire fonctionner le mien. Ainsi, ce tutoriel ne portera que sur celui à quatre chiffres avec deux points au milieu.
Où acheter ?
Vous pouvez consulter notre page Maker Advisor Tools pour comparer le prix du module d’affichage à 4 chiffres et 7 segments TM1637 dans différents magasins :
Vous pouvez utiliser les liens précédents ou vous rendre directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

Câblage de l’afficheur 7 segments à 4 chiffres TM1637 à l’ESP32 ou à l’ESP8266

Le câblage de l’écran à l’ESP32 et à l’ESP8266 est assez simple, car il ne nécessite que deux broches numériques : CLK et DI/O.
| Affichage TM1637 | ESP32 | ESP8266 |
| CLK | N’importe quelle broche numérique (par exemple : GPIO 19)* | N’importe quelle broche numérique (par exemple : GPIO 14 (D5))* |
| DIO | N’importe quelle broche numérique (par exemple : GPIO 18)* | N’importe quelle broche numérique (par exemple : GPIO 12 (D6))* |
| VCC | NIV | NIV |
| GND | GND | GND |
* vous pouvez utiliser n’importe quel autre GPIO approprié. Consultez les guides de brochage ESP32 et ESP8266 :
ESP32
Nous connecterons la broche CLK au GPIO 19 et la broche DIO au GPIO 18, mais vous pouvez utiliser une autre combinaison de broches.

ESP8266
Nous connecterons la broche CLK au GPIO 14 (D5) et la broche DIO au GPIO 12 (D6), mais vous pouvez utiliser une combinaison différente de broches.

Bibliothèque MicroPython TM1637
Pour faciliter l’interface avec l’écran TM1637, nous utiliserons une version forkée de ce module MicroPython TM1637.
Suivez les étapes suivantes pour l’installer.
- Cliquez ici pour télécharger notre version forkée du fichier tm1637.py.
- Copiez le code dans un fichier sur Thonny IDE ;
- Allez dans Fichier > Enregistrer sous… et sélectionnez Périphérique MicroPython ;
- Enregistrez le fichier sous le nom tm1637.py (ne changez pas le nom).

"""
MicroPython TM1637 quad 7-segment LED display driver
https://github.com/mcauser/micropython-tm1637
MIT License
Copyright (c) 2016-2023 Mike Causer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
__version__ = '1.3.0'
from micropython import const
from machine import Pin
from time import sleep_us, sleep_ms
TM1637_CMD1 = const(64) # 0x40 data command
TM1637_CMD2 = const(192) # 0xC0 address command
TM1637_CMD3 = const(128) # 0x80 display control command
TM1637_DSP_ON = const(8) # 0x08 display on
TM1637_DELAY = const(10) # 10us delay between clk/dio pulses
TM1637_MSB = const(128) # msb is the decimal point or the colon depending on your display
# 0-9, a-z, blank, dash, star
_SEGMENTS = bytearray(b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F\x77\x7C\x39\x5E\x79\x71\x3D\x76\x06\x1E\x76\x38\x55\x54\x3F\x73\x67\x50\x6D\x78\x3E\x1C\x2A\x76\x6E\x5B\x00\x40\x63')
class TM1637(object):
"""Library for quad 7-segment LED modules based on the TM1637 LED driver."""
def __init__(self, clk, dio, brightness=7):
self.clk = clk
self.dio = dio
if not 0 <= brightness <= 7:
raise ValueError("Brightness out of range")
self._brightness = brightness
self.clk.init(Pin.OUT, value=0)
self.dio.init(Pin.OUT, value=0)
sleep_us(TM1637_DELAY)
self._write_data_cmd()
self._write_dsp_ctrl()
def _start(self):
self.dio(0)
sleep_us(TM1637_DELAY)
self.clk(0)
sleep_us(TM1637_DELAY)
def _stop(self):
self.dio(0)
sleep_us(TM1637_DELAY)
self.clk(1)
sleep_us(TM1637_DELAY)
self.dio(1)
def _write_data_cmd(self):
# automatic address increment, normal mode
self._start()
self._write_byte(TM1637_CMD1)
self._stop()
def _write_dsp_ctrl(self):
# display on, set brightness
self._start()
self._write_byte(TM1637_CMD3 | TM1637_DSP_ON | self._brightness)
self._stop()
def _write_byte(self, b):
for i in range(8):
self.dio((b >> i) & 1)
sleep_us(TM1637_DELAY)
self.clk(1)
sleep_us(TM1637_DELAY)
self.clk(0)
sleep_us(TM1637_DELAY)
self.clk(0)
sleep_us(TM1637_DELAY)
self.clk(1)
sleep_us(TM1637_DELAY)
self.clk(0)
sleep_us(TM1637_DELAY)
def brightness(self, val=None):
"""Set the display brightness 0-7."""
# brightness 0 = 1/16th pulse width
# brightness 7 = 14/16th pulse width
if val is None:
return self._brightness
if not 0 <= val <= 7:
raise ValueError("Brightness out of range")
self._brightness = val
self._write_data_cmd()
self._write_dsp_ctrl()
def write(self, segments, pos=0):
"""Display up to 6 segments moving right from a given position.
The MSB in the 2nd segment controls the colon between the 2nd
and 3rd segments."""
if not 0 <= pos <= 5:
raise ValueError("Position out of range")
self._write_data_cmd()
self._start()
self._write_byte(TM1637_CMD2 | pos)
for seg in segments:
self._write_byte(seg)
self._stop()
self._write_dsp_ctrl()
def encode_digit(self, digit):
"""Convert a character 0-9, a-f to a segment."""
return _SEGMENTS[digit & 0x0f]
def encode_string(self, string):
"""Convert an up to 4 character length string containing 0-9, a-z,
space, dash, star to an array of segments, matching the length of the
source string."""
segments = bytearray(len(string))
for i in range(len(string)):
segments[i] = self.encode_char(string[i])
return segments
def encode_char(self, char):
"""Convert a character 0-9, a-z, space, dash or star to a segment."""
o = ord(char)
if o == 32:
return _SEGMENTS[36] # space
if o == 42:
return _SEGMENTS[38] # star/degrees
if o == 45:
return _SEGMENTS[37] # dash
if o >= 65 and o <= 90:
return _SEGMENTS[o-55] # uppercase A-Z
if o >= 97 and o <= 122:
return _SEGMENTS[o-87] # lowercase a-z
if o >= 48 and o <= 57:
return _SEGMENTS[o-48] # 0-9
raise ValueError("Character out of range: {:d} '{:s}'".format(o, chr(o)))
def hex(self, val):
"""Display a hex value 0x0000 through 0xffff, right aligned."""
string = '{:04x}'.format(val & 0xffff)
self.write(self.encode_string(string))
def number(self, num):
"""Display a numeric value -999 through 9999, right aligned."""
# limit to range -999 to 9999
num = max(-999, min(num, 9999))
string = '{0: >4d}'.format(num)
self.write(self.encode_string(string))
def numbers(self, num1, num2, colon=True):
"""Display two numeric values -9 through 99, with leading zeros
and separated by a colon."""
num1 = max(-9, min(num1, 99))
num2 = max(-9, min(num2, 99))
segments = self.encode_string('{0:0>2d}{1:0>2d}'.format(num1, num2))
if colon:
segments[1] |= 0x80 # colon on
self.write(segments)
def temperature(self, num):
if num < -9:
self.show('lo') # low
elif num > 99:
self.show('hi') # high
else:
string = '{0: >2d}'.format(num)
self.write(self.encode_string(string))
self.write([_SEGMENTS[38], _SEGMENTS[12]], 2) # degrees C
def temperature_f(self, num):
if num < -9:
self.show('lo') # low
elif num > 99:
self.show('hi') # high
else:
string = '{0: >2d}'.format(num)
self.write(self.encode_string(string))
self.write([_SEGMENTS[38], _SEGMENTS[15]], 2) # degrees F
def show(self, string, colon=False):
segments = self.encode_string(string)
if len(segments) > 1 and colon:
segments[1] |= 128
self.write(segments[:4])
def scroll(self, string, delay=250):
segments = string if isinstance(string, list) else self.encode_string(string)
data = [0] * 8
data[4:0] = list(segments)
for i in range(len(segments) + 5):
self.write(data[0+i:4+i])
sleep_ms(delay)
class TM1637Decimal(TM1637):
"""Library for quad 7-segment LED modules based on the TM1637 LED driver.
This class is meant to be used with decimal display modules (modules
that have a decimal point after each 7-segment LED).
"""
def encode_string(self, string):
"""Convert a string to LED segments.
Convert an up to 4 character length string containing 0-9, a-z,
space, dash, star and '.' to an array of segments, matching the length of
the source string."""
segments = bytearray(len(string.replace('.','')))
j = 0
for i in range(len(string)):
if string[i] == '.' and j > 0:
segments[j-1] |= TM1637_MSB
continue
segments[j] = self.encode_char(string[i])
j += 1
return segments
Afficher le code brut
Une fois le module chargé sur la carte, vous pouvez désormais utiliser les fonctionnalités de la bibliothèque dans votre code pour vous connecter à l’écran TM1637.
Test de l’écran TM1637 (fonctions de base)
L’exemple suivant montre la plupart des fonctions prises en charge par la bibliothèque. Il s’agit d’une version modifiée et simplifiée de l’exemple fourni par la bibliothèque.
# Rui Santos & Sara Santos - Raspberryme.com
# Complete project details at https://Raspberryme.com/micropython-esp32-esp8266-tm1637-display/
import tm1637
from machine import Pin
from time import sleep
# Initialize display (adjust pins if needed)
display = tm1637.TM1637(clk=Pin(19), dio=Pin(18))
# Example for ESP8266 boards:
#display = tm1637.TM1637(clk=Pin(14), dio=Pin(12))
# Set display brightness
display.brightness(7)
while True:
# all LEDS on "88:88"
display.write([127, 255, 127, 127])
sleep(1)
# all LEDS off
display.write([0, 0, 0, 0])
sleep(1)
# show "0123"
display.write([63, 6, 91, 79])
sleep(1)
# show "COOL"
display.write([0b00111001, 0b00111111, 0b00111111, 0b00111000])
sleep(1)
# show "HELP"
display.show('help')
sleep(1)
# display "dEAd", "bEEF"
display.hex(0xdead)
sleep(1)
display.hex(0xbeef)
sleep(1)
# show "12:59"
display.numbers(12, 59)
sleep(1)
# show "-123"
display.number(-123)
sleep(1)
# show temperature '24*C'
display.temperature(24)
sleep(1)
# show temperature '75*F'
display.temperature_f(75)
sleep(1)
# display scrolling text
display.scroll('Raspberryme.com', delay=500)
sleep(1)
Afficher le code brut
Voyons maintenant rapidement comment fonctionne le code pour comprendre comment utiliser les fonctions de la bibliothèque pour contrôler l’affichage.
Initialiser l’affichage
La ligne suivante initialise l’affichage. Vous pouvez le modifier pour utiliser différentes broches.
display = tm1637.TM1637(clk=Pin(19), dio=Pin(18))
Si vous utilisez une carte ESP8266, vous pouvez utiliser la combinaison de broches suivante :
display = tm1637.TM1637(clk=Pin(14), dio=Pin(12))
Régler la luminosité
Pour définir la luminosité de l’affichage, il vous suffit d’utiliser la méthode Bright() sur l’objet d’affichage. Passez un chiffre compris entre 0 (luminosité minimale) et 7 (luminosité maximale).
display.brightness(7)
Écriture de segments
Vous pouvez utiliser la méthode write() sur l’objet d’affichage pour contrôler les segments individuels de chaque caractère.
L’écran TM1637 est livré avec quatre chiffres d’affichage à 7 segments. Vous pouvez contrôler manuellement des segments individuels de chaque chiffre avec la méthode write() sur l’objet d’affichage.
Un octet (7 bits inférieurs) pour chaque segment. Le 8ème bit (MSB) est destiné aux deux points et uniquement au 2ème segment.

Par exemple:
Le bit 1 active un segment et le bit 0 désactive un segment.
Par exemple, pour activer les segments A, B et C, vous auriez un octet tel que 0b0000111.
L’octet commence par le G et se termine par le A. Par exemple :
- 0b0000110 active les segments C et B.
Vous pouvez utiliser 0b0000110 ou le nombre hexadécimal ou décimal correspondant. Voir le tableau fourni par la documentation de la bibliothèque.
La démo montre différents exemples :
# all LEDS on "88:88"
display.write([127, 255, 127, 127])
sleep(1)
# all LEDS off
display.write([0, 0, 0, 0])
sleep(1)
# show "0123"
display.write([63, 6, 91, 79])
sleep(1)
# show "COOL"
display.write([0b00111001, 0b00111111, 0b00111111, 0b00111000])
sleep(1)
Afficher les chaînes
Pour afficher des chaînes, utilisez la méthode show() et passez en argument la chaîne que vous souhaitez afficher.
# show "HELP"
display.show('help')
Afficher un numéro
Utilisez la méthode number() si vous souhaitez afficher deux nombres (avec deux chiffres) de chaque côté des deux points. Par exemple:
# show "12:59"
display.numbers(12, 59)
Pour afficher un nombre, utilisez la méthode number(). Il accepte les nombres négatifs. Le numéro ne doit pas comporter plus de quatre chiffres.
# show "-123"
display.number(-123)
Afficher les valeurs de température
Si vous souhaitez afficher les valeurs de température (avec deux chiffres) avec les symboles ºC et ºF, vous pouvez utiliser les fonctions temperature() et temperature_f() sur l’objet d’affichage. Par exemple, dans le code :
# show temperature '24*C'
display.temperature(24)
sleep(1)
# show temperature '75*F'
display.temperature_f(75)
sleep(1)
Afficher le texte défilant
Il existe une fonction très utile si vous souhaitez afficher du texte de plus de quatre caractères. La fonction scroll() vous permet de faire défiler une chaîne sur l’écran de droite à gauche avec une vitesse réglable.
Le premier argument est la chaîne que vous souhaitez afficher et le deuxième argument est le décalage en millisecondes. Par exemple:
# display scrolling text
display.scroll('Raspberryme.com', delay=500)
Démonstration
Exécutez ou téléchargez (Fichier > Enregistrer sous > Appareil Micropython > enregistrez le fichier sous le nom main.py) le code sur votre carte à l’aide de Thonny IDE.

N’oubliez pas que vous devez avoir préalablement téléchargé la bibliothèque tm1637.py.
L’écran exécutera le code de démonstration, montrant les différents cas d’utilisation.



Écran TM1637 – Prévisionniste de température et météo
Dans cette section, nous utiliserons l’écran TM1637 dans une application pratique. Nous afficherons la température actuelle, en degrés Celsius et Fahrenheit, ainsi que les conditions météorologiques actuelles.
MétéoAPI
Nous obtiendrons ces données de WeatherAPI en effectuant une requête HTTP à l’URL appropriée. Pour en savoir plus sur les requêtes HTPP avec Micropython, consultez ce tutoriel : MicroPython : requêtes HTTP GET avec ESP32/ESP8266.
Cette API est gratuite et fournit des informations utiles sur la météo dans presque tous les endroits du monde.

Nous obtiendrons des données sur la température et les conditions météorologiques et les afficherons sur l’écran TM1637. Vous pouvez facilement ajuster le code pour afficher plus d’informations.
Obtenir votre clé API
- Accédez au site Web de l’API Météo : Weatherapi.com
- Inscrivez-vous pour créer un compte ou connectez-vous si vous en avez déjà un.
- Après avoir vérifié votre compte, connectez-vous à votre compte.
- Sur votre tableau de bord sur Weatherapi.com/my/ , vous trouverez votre clé API.

Copiez la clé API dans un endroit sûr car vous en aurez besoin plus tard.
Pour obtenir des informations sur la météo dans l’emplacement choisi, saisissez l’URL suivante dans votre navigateur Web, mais insérez votre emplacement et votre clé API aux bons endroits :
https://api.weatherapi.com/v1/current.json?q=YOUR_LOCATION+&key=YOUR_API_KEY
Par exemple, dans mon cas :
https://api.weatherapi.com/v1/current.json?q=Oporto+&key=d1578a064b07xxxc917164350240106
Copiez votre URL et collez-la dans votre navigateur, et l’API renverra les informations correspondant à votre météo locale. Par exemple:
{
"location": {
"name": "Oporto",
"region": "Porto",
"country": "Portugal",
"lat": 41.15,
"lon": -8.6167,
"tz_id": "Europe/Lisbon",
"localtime_epoch": 1762168698,
"localtime": "2025-11-03 11:18"
},
"current": {
"last_updated_epoch": 1762168500,
"last_updated": "2025-11-03 11:15",
"temp_c": 16.1,
"temp_f": 61,
"is_day": 1,
"condition": {
"text": "Partly Cloudy",
"icon": "//cdn.weatherapi.com/weather/64x64/day/116.png",
"code": 1003
},
"wind_mph": 4,
"wind_kph": 6.5,
"wind_degree": 142,
"wind_dir": "SE",
"pressure_mb": 1023,
"pressure_in": 30.21,
"precip_mm": 0,
"precip_in": 0,
"humidity": 68,
"cloud": 0,
"feelslike_c": 16.1,
"feelslike_f": 61,
"windchill_c": 14.8,
"windchill_f": 58.6,
"heatindex_c": 14.7,
"heatindex_f": 58.4,
"dewpoint_c": 7.5,
"dewpoint_f": 45.5,
"vis_km": 10,
"vis_miles": 6,
"uv": 2.3,
"gust_mph": 5.1,
"gust_kph": 8.2
}
}
Pour plus d’informations sur l’API, consultez la documentation : Documentation de l’API Météo.
Nous n’obtiendrons les informations que sous temp_c, temp_f et text (description météo) sous le nœud actuel.
Code
Le code suivant récupère les données de l’API et affiche la température actuelle et la description météorologique sur l’écran.
# Rui Santos & Sara Santos - Raspberryme.com
# Complete project details at https://Raspberryme.com/micropython-esp32-esp8266-tm1637-display/
import network
import time
import requests
import tm1637
from machine import Pin, Timer
# Initialize display (adjust pins if needed)
display = tm1637.TM1637(clk=Pin(21), dio=Pin(20))
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
api_key = 'REPLACE_WITH_YOUR_weatherapi'
location ='Oporto' # Documentation https://www.weatherapi.com/docs/
# Request URL
url = f'https://api.weatherapi.com/v1/current.json?q={location}+&key={api_key}'
# Connect to network
def connect_wifi(ssid, password):
# Connect to your network
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
# Wait for connection
timeout = 10
while not station.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
if station.isconnected():
print('Connection successful')
print(station.ifconfig())
return True
else:
print('Connection failed - timeout reached')
return False
def getWeather(timer):
if connect_wifi(ssid, password):
try:
# Make the request
response = requests.get(url)
#Print the response code
print('Response code: ', response.status_code)
# Get response content
weather = response.json()
# Close the request
response.close()
# Print bulk weather data
print('Weather JSON: ', weather)
# Declare these variables as globals
global weather_description, temperature_c, temperature_f
# Get specific weather data
weather_description = weather['current']['condition']['text']
print('Current weather: ', weather_description)
# Temperature and humidity
temperature_c = weather['current']['temp_c']
temperature_f = weather['current']['temp_f']
print(f'Temperature in Celsius: {temperature_c:.2f}')
print(f'Temperature in Fahrenheit: {temperature_f:.2f}')
except Exception as e:
# Handle any exceptions during the request
print('Error during request:', e)
display.show('erro')
# Get Weather for the first time
getWeather(0)
# Create a periodic timer that gets new data from the API
api_timer = Timer()
api_timer.init(mode=Timer.PERIODIC, period=3600000, callback=getWeather)
while True:
display.scroll(weather_description)
time.sleep(1)
display.temperature(round(temperature_c))
time.sleep(5)
display.temperature_f(round(temperature_f))
time.sleep(5)
Afficher le code brut
Comment fonctionne le code ?
Importez les modules requis, y compris la bibliothèque de requêtes pour effectuer des requêtes HTTP afin d’obtenir les données météorologiques.
import network
import time
import requests
import tm1637
from machine import Pin, Timer
Initialisez l’affichage sur les GPIO appropriés.
# Initialize display (adjust pins if needed)
display = tm1637.TM1637(clk=Pin(19), dio=Pin(18))
Insérez vos identifiants réseau sur les lignes suivantes afin que l’ESP puisse se connecter à votre réseau pour obtenir des données météorologiques.
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
Insérez votre clé API WeatherAPI et l’emplacement pour lequel vous souhaitez récupérer les données.
api_key = 'REPLACE_WITH_YOUR_API_KEY'
location ='REPLACE_WITH_YOUR_LOCATION'
Nous enregistrons l’URL de la requête dans la variable url. Il s’agit d’une chaîne f avec des espaces réservés afin que l’URL soit mise à jour avec vos informations au moment de l’exécution.
# Request URL
url = f'https://api.weatherapi.com/v1/current.json?q={location}+&key={api_key}'
La fonction connect_wifi() connecte votre carte à votre réseau. Il renvoie vrai en cas de succès, ou faux dans le cas contraire.
# Connect to network
def connect_wifi(ssid, password):
# Connect to your network
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
# Wait for connection
timeout = 10
while not station.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
if station.isconnected():
print('Connection successful')
print(station.ifconfig())
return True
else:
print('Connection failed - timeout reached')
return False
Ensuite, nous créons une fonction appelée getWeather() qui sera appelée périodiquement par un timer (nous avons donc besoin d’un argument de type timer). Apprenez-en davantage sur les minuteries MicroPython ici.
def getWeather(timer):
if connect_wifi(ssid, password):
try:
# Make the request
response = requests.get(url)
#Print the response code
print('Response code: ', response.status_code)
# Get response content
weather = response.json()
# Close the request
response.close()
# Print bulk weather data
print('Weather JSON: ', weather)
# Declare these variables as globals
global weather_description, temperature_c, temperature_f
# Get specific weather data
weather_description = weather['current']['condition']['text']
print('Current weather: ', weather_description)
# Temperature and humidity
temperature_c = weather['current']['temp_c']
temperature_f = weather['current']['temp_f']
print(f'Temperature in Celsius: {temperature_c:.2f}')
print(f'Temperature in Fahrenheit: {temperature_f:.2f}')
except Exception as e:
# Handle any exceptions during the request
print('Error during request:', e)
display.show('erro')
Nous vérifions d’abord si nous sommes connectés avec succès à Internet.
if connect_wifi(ssid, password):
Ensuite, nous faisons la requête et lisons la réponse JSON.
try:
# Make the request
response = requests.get(url)
#Print the response code
print('Response code: ', response.status_code)
# Get response content
weather = response.json()
# Close the request
response.close()
Après cela, nous créons les variables globales Weather_description, Temperature_c et Temperature_f pour enregistrer les données que nous recherchons.
# Declare these variables as globals
global weather_description, temperature_c, temperature_f
Nous obtenons les données météorologiques souhaitées et les sauvegardons sur les variables correspondantes.
# Get specific weather data
weather_description = weather['current']['condition']['text']
print('Current weather: ', weather_description)
# Temperature and humidity
temperature_c = weather['current']['temp_c']
temperature_f = weather['current']['temp_f']
print(f'Temperature in Celsius: {temperature_c:.2f}')
print(f'Temperature in Fahrenheit: {temperature_f:.2f}')
Après cela, nous appelons la fonction getWeather() pour la première fois lorsque le code tourne pour la première fois.
# Get Weather for the first time
getWeather(0)
Ensuite, nous créons une minuterie qui appellera la fonction getWeather() toutes les 3 600 000 millisecondes (une heure) pour obtenir les dernières données météorologiques de l’API.
# Create a periodic timer that gets new data from the API
api_timer = Timer (1)
api_timer.init(mode=Timer.PERIODIC, period=3600000, callback=getWeather)
En savoir plus sur la création de minuteries : MicroPython : interruptions de minuterie avec l’ESP32/ESP8266.
Enfin, nous créons une boucle while True pour afficher en continu les données météorologiques. Nous affichons la description météo, la température en Celsius et la température en Fahrenheit.
while True:
Notez que pour la description météo, nous utilisons la fonction scroll().
display.scroll(weather_description)
time.sleep(1)
Pour afficher la température en Celsius, nous appelons la fonction temperature(). Nous devons arrondir la température car la fonction n’accepte que les nombres à deux chiffres.
display.temperature(round(temperature_c))
time.sleep(5)
Enfin, nous appelons la fonction temperature_f() pour afficher la température en Fahrenheit.
display.temperature_f(round(temperature_f))
time.sleep(5)
Démonstration
Assurez-vous d’avoir inséré vos informations d’identification réseau, votre clé API et votre emplacement sur le code.
Exécutez ou téléchargez (Fichier > Enregistrer sous > Appareil Micropython > enregistrez le fichier sous le nom main.py) le code sur votre carte à l’aide de Thonny IDE.

N’oubliez pas que vous devez avoir préalablement téléchargé la bibliothèque tm1637.py.
Vous obtiendrez la température actuelle de votre emplacement en degrés Celsius et Fahrenheit, ainsi que la météo actuelle.



Dans MicroPython Shell, il affichera la réponse JSON complète, la météo actuelle et la température.

Conclusion
Dans ce didacticiel, vous avez appris à interfacer l’afficheur 7 segments à 4 chiffres TM1637 avec les ESP32 et ESP8266 programmés avec MicroPython. Comme vous l’avez vu, il est simple d’afficher des données à l’écran grâce au module tm1637.py.
Vous pouvez afficher une grande variété de données sur l’écran, mais les utilisations les plus courantes sont l’affichage de la température et la création d’une horloge numérique ou d’un compte à rebours.
Nous espérons que vous avez trouvé ce guide utile. Nous avons des guides MicroPython pour d’autres affichages qui pourraient vous intéresser :
Si vous souhaitez en savoir plus sur la programmation des cartes ESP32 et ESP8266 à l’aide de MicroPython, consultez nos ressources :
Merci d’avoir lu.
Plongez dans l’histoire de Raspberry Pi avec cette vidéo :

-
LED 4 Chiffres 7 Segments 0.36in Module D'affichage de Tube Numérique TM1637 Affichage D'horloge de Tube de Puce D'entraînement 4 Ensembles de Module (Jaune MRA110C)
-
Module d'affichage LED à 7 segments d'anode commune de 1,4 cm à 4 chiffres pour TM1637, options de couleur RVB (rouge/vert/bleu/jaune/WHI)
