MicroPython : Serveur Web ESP32/ESP8266 DS18B20 (Station météo)

MicroPython : Serveur Web ESP32/ESP8266 DS18B20 (Station météo)

Ce didacticiel est un guide étape par étape qui explique comment créer un serveur Web autonome ESP32 ou ESP8266 NodeMCU qui affiche les lectures du capteur DS18B20 à l’aide du micrologiciel MicroPython. Nous allons créer un serveur Web ESP32/ESP8266 adapté aux mobiles et accessible avec n’importe quel appareil doté d’un navigateur sur votre réseau local.

ESP32 ESP8266 Guide du serveur Web de température MicroPython DS18B20

Si vous voulez savoir comment fonctionne un module de relais, lisez notre Guide MicroPython : DS18B20 avec ESP32 et ESP8266 (relevés de température).

Nous avons des guides similaires utilisant Arduino IDE :

Conditions préalables

Pour suivre ce tutoriel, vous avez besoin du firmware MicroPython installé dans vos cartes ESP32 ou ESP8266. Vous avez également besoin d’un IDE pour écrire et télécharger le code sur votre carte. Nous vous suggérons d’utiliser Thonny IDE ou uPyCraft IDE :

En savoir plus sur MicroPython : eBook de programmation MicroPython avec ESP32 et ESP8266.

Présentation du capteur de température DS18B20

le Capteur de température DS18B20 est un capteur de température numérique à un fil. Cela signifie qu’il ne nécessite qu’une seule ligne de données (et GND) pour communiquer avec votre ESP32 ou ESP8266.

Il peut être alimenté par une alimentation externe ou il peut être alimenté par la ligne de données (appelé « mode parasite »), ce qui élimine le besoin d’une alimentation externe.

Broches de brochage du capteur de température DS18B20

Pièces requises

Pour suivre ce tutoriel, vous avez besoin des pièces suivantes :

Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

MicroPython Serveur Web ESP32ESP8266 DS18B20 Station meteo

Schéma – ESP32

Si vous utilisez un ESP32, suivez le schéma suivant.

Capteur de température DS18B20 avec schéma de câblage en mode normal ESP32

Schéma – ESP8266

Si vous utilisez un ESP8266, suivez le schéma suivant.

Capteur de température DS18B20 avec schéma de câblage en mode normal ESP8266

Noter: dans ce didacticiel, nous connectons la ligne de données DS18B20 au GPIO 4, mais vous pouvez utiliser n’importe quel autre GPIO approprié.

Code Web Server – Lectures de température DS18B20

Afficher les relevés de température DS18B20 sur le serveur Web MicroPython

Pour cet exemple, vous avez besoin de deux fichiers :

  • boot.py: s’exécute au démarrage de l’appareil et configure plusieurs options de configuration telles que vos informations d’identification réseau, l’importation de bibliothèques, la définition des broches, etc.
  • main.py: c’est le script principal où nous allons gérer le serveur Web. Il s’exécute immédiatement après la boot.py.

Noter: c’est une bonne pratique d’inclure le boot.py et main.py des dossiers. Cependant, si vous préférez, vous pouvez inclure tout le code dans le main.py déposer.

boot.py (serveur Web DS18B20)

Créez un nouveau fichier dans votre IDE appelé boot.py et copiez le code suivant.

# Complete project details at https://Raspberryme.com

try:
  import usocket as socket
except:
  import socket
  
from time import sleep
from machine import Pin
import onewire, ds18x20

import network

import esp
esp.osdebug(None)

import gc
gc.collect()

ds_pin = Pin(4)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))

ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'

station = network.WLAN(network.STA_IF)

station.active(True)
station.connect(ssid, password)

while station.isconnected() == False:
  pass

print('Connection successful')
print(station.ifconfig())

Afficher le code brut

Ce fichier importe les bibliothèques requises, configure le capteur DS18B20 et se connecte à votre réseau.

Ici, nous définissons la broche de données DS18B20 sur GPIO 4 mais vous pouvez utiliser n’importe quelle autre broche appropriée :

ds_pin = Pin(4)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))

Vous devez insérer vos informations d’identification réseau dans les variables suivantes afin que l’ESP puisse se connecter à votre réseau.

ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'

main.py (serveur Web DS18B20)

Dans le main.py fichier est l’endroit où nous allons créer le serveur Web et gérer les demandes. Copiez le code suivant dans votre main.py déposer.

# Complete project details at https://Raspberryme.com

def read_ds_sensor():
  roms = ds_sensor.scan()
  print('Found DS devices: ', roms)
  print('Temperatures: ')
  ds_sensor.convert_temp()
  for rom in roms:
    temp = ds_sensor.read_temp(rom)
    if isinstance(temp, float):
      msg = round(temp, 2)
      print(temp, end=' ')
      print('Valid temperature')
      return msg
  return b'0.0'
  
def web_page():
  temp = read_ds_sensor()
  html = """<!DOCTYPE HTML><html><head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
  <style> html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center; }
    h2 { font-size: 3.0rem; } p { font-size: 3.0rem; } .units { font-size: 1.2rem; } 
    .ds-labels{ font-size: 1.5rem; vertical-align:middle; padding-bottom: 15px; }
  </style></head><body><h2>ESP with DS18B20</h2>
  <p><i class="fas fa-thermometer-half" style="color:#059e8a;"></i> 
    <span class="ds-labels">Temperature</span>
    <span id="temperature">""" + str(temp) + """</span>
    <sup class="units">&deg;C</sup>
  </p>
    <p><i class="fas fa-thermometer-half" style="color:#059e8a;"></i> 
    <span class="ds-labels">Temperature</span>
    <span id="temperature">""" + str(round(temp * (9/5) + 32.0, 2)) + """</span>
    <sup class="units">&deg;F</sup>
  </p></body></html>"""
  return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  try:
    if gc.mem_free() < 102000:
      gc.collect()
    conn, addr = s.accept()
    conn.settimeout(3.0)
    print('Got a connection from %s' % str(addr))
    request = conn.recv(1024)
    conn.settimeout(None)
    request = str(request)
    print('Content = %s' % request)
    response = web_page()
    conn.send('HTTP/1.1 200 OKn')
    conn.send('Content-Type: text/htmln')
    conn.send('Connection: closenn')
    conn.sendall(response)
    conn.close()
  except OSError as e:
    conn.close()
    print('Connection closed')

Afficher le code brut

Lecture du capteur DS18B20

Le code commence par créer une fonction appelée read_ds_sensor() qui obtient la température du capteur de température DS18B20. Si vous avez suivi la section précédente, vous devriez être familiarisé avec les méthodes utilisées ici.

def read_ds_sensor():
  roms = ds_sensor.scan()
  print('Found DS devices: ', roms)
  ds_sensor.convert_temp()
  for rom in roms:
    temp = ds_sensor.read_temp(rom)
    if isinstance(temp, float):
      temp = round(temp, 2)
      print('Valid temperature')
      return temp
  return '0'

Page Web

le page Web() La fonction renvoie la page HTML avec les dernières lectures de température.

Nous avons construit une page Web similaire sur un didacticiel précédent. Donc, si vous voulez savoir comment fonctionne le HTML, vous pouvez lire cet article : MicroPython : ESP32/ESP8266 avec DHT11/DHT22 Web Server.

Création du serveur web

Après cela, effectuez les procédures habituelles pour créer un serveur de socket.

while True:
  try:
    if gc.mem_free() < 102000:
      gc.collect()
    conn, addr = s.accept()
    conn.settimeout(3.0)
    print('Got a connection from %s' % str(addr))
    request = conn.recv(1024)
    conn.settimeout(None)
    request = str(request)
    print('Content = %s' % request)
    response = web_page()
    conn.send('HTTP/1.1 200 OKn')
    conn.send('Content-Type: text/htmln')
    conn.send('Connection: closenn')
    conn.sendall(response)
    conn.close()
  except OSError as e:
    conn.close()
    print('Connection closed')

Pour une explication détaillée de cette procédure, reportez-vous à ce didacticiel.

Fondamentalement, lorsque l’ESP reçoit une demande, nous envoyons la page Web avec les dernières lectures en réponse :

response = web_page()
conn.send('HTTP/1.1 200 OKn')
conn.send('Content-Type: text/htmln')
conn.send('Connection: closenn')
conn.sendall(response)

Démonstration du serveur Web

Après avoir téléchargé le boot.py et main.py fichiers sur votre tableau. Cliquez sur le bouton ESP RST pour exécuter le code.

Ensuite, ouvrez votre navigateur et tapez l’adresse IP ESP. Vous pouvez accéder à la page Web avec les dernières lectures des capteurs en degrés Celsius et Fahrenheit :

Lectures de température DS18B20 sur le serveur Web ESP32 ESP8266

Emballer

Nous espérons que vous avez trouvé ce guide MicroPython sur le capteur de température DS18B20 avec les ESP32 et ESP8266 utile. Nous avons d’autres projets avec l’ESP et MicroPython qui pourraient vous plaire :

En savoir plus sur MicroPython avec ESP32 et ESP8266 avec notre eBook : Programmation MicroPython avec ESP32 et ESP8266

Merci d’avoir lu.