MakePython ESP32, un thermomètre connecté

 

bouton violet Le module MakePython ESP32

Ce module est disponible sur le site Makerfabs et un Kit avec un livre de projets sur le site d'elektor.

Il comprend un ESP32 avec un écran OLED et un grand nombre de GPIO disponibles, voir le brochage ci-contre.

 

 

 

 

bouton violet Le projet

Un module capteur de température DS18B20 (une résistance de 4,7 Kohms est reliée entre la broche DO et VCC) est connecté à la broche IO2. Si l'on utilise un DS18B20 à 3 broches, cette résistance est nécessaire.


La température est affichée sur l'écran OLED et enregistrée toutes les 30 s sur la plateforme Thingspeak.
Après lancement du programme un tableau de bord comme celui ci-dessous est exécuté sur Thingspeak.

bouton violet Le compte sur Thingspeak

bouton violet Le programme

Le programme utilise micropython avec l'environnement Thonny

On renplace MyKEY par la Clé API( Write API Key) générée, My SSID par Le nom du réseau Wifi et My Password par la clé de sécurité.

Les fonctions :

Connect_Wifi(): permet de se connecter au réseau wifi
Display_text(); place le texte au centre de l'écran

La boucle While True:
Acquisition de la température et affichage avec 4 chiffres sur l'écran
Connexion au réseau et envoi des données de température toutes les 30 s sur la plateforme ThingspeaK.

La bibliothèque SSD1306.py doit être chargée dans la mémoire de l'ESP32.

On la trouve sur Github.

 

 


 
#
# Digital thermometer
# Jmd 27/08/2026

from machine import Pin, I2C
import ssd1306
import machine
import utime
import onewire, ds18x20
import network
import socket

APIKEY ="MyKEY" # Write your API Write Key

#function to connect WIFI
def Connect_Wifi():
    import network
    net = network.WLAN(network.STA_IF)
    if not net.isconnected():
        net.active(True)
        net.connect("My SSID", "My Password")   # Write your BOX SSID and Password
        utime.sleep(5)
        print (net.ifconfig())
        


def display_text(text, line, column):
    oled.text(text, 8*column, 9*line)

i2c = machine.SoftI2C(scl=Pin(5),sda=Pin(4),freq =100000)
oled=ssd1306.SSD1306_I2C(128,64,i2c)

Temp = machine.Pin(2)
ds = ds18x20.DS18X20(onewire.OneWire(Temp))

while True:
    #
    # Display the temperature on the screen
    #
    roms=ds.scan()            # Scan DS18B20
    ds.convert_temp()         # Convert temperature
    utime.sleep_ms(750)       # Delay to convert
    
    for rom in roms:
        temperature = ds.read_temp(rom)    # Read temperature
        oled.fill(0)
        display_text("Temp(C)= ", 3, 1)
        display_text(str(temperature)[:4], 3, 9) # Display on the screen
        oled.show()
    #
    # Send temperature on the Thingspeak server every 30 s
    #
    
    Connect_Wifi()
    sock = socket.socket()
    addr = socket.getaddrinfo("api.thingspeak.com",80)[0][-1]
    sock.connect(addr)
    host = "api.thingspeak.com"
    path = "api_key="+APIKEY+"&field1="+ str(temperature)
    sock.send(bytes("GET /update?%s HTTP/1.0\r\nHost: %s\r\n\r\n" %(path,host), "utf8"))
    sock.close()
    utime.sleep(30)
  

Il faut tout d'abord créer un compte sur Thingspeak. D'autres plateformes peuvent être utilisées comme Sparkfun.
Après la création du compte, on clique sur New Channel, on valide le formulaire complété.

Une API est créée. La clé sera copiée et remplacée dans le programme à la ligne 13 : # Write your API Write Key

On peut adapter le tableau de bord et ajouter des widgets comme une jauge.

Le paramétrage de thingspeak est terminé.