Aller au contenu

Envoyer des données avec une requête HTTP POST

Permet d'envoyer des données avec une requête HTTP POST en tant que client et de récupérer la réponse du serveur.

Branchement

Carte Galaxia

Exemple

Dans l'exemple ci-dessous, nous allons connecter le module ESP de la Galaxia à un réseau wifi grâce au module network (voir l'exemple se connecter à un réseau wifi) puis nous enverrons une requête HTTP POST à l'adresse http://emoncms.fr/input/post grâce au module additionnel requests. Le contenu de cette requête sera un dictionnaire contenant la luminosité ambiante perçue par la carte Galaxia.

# On importe les modules dont on a besoin
from thingz import *
from machine import *
from time import *
from network import *
from requests import *
from json import *

# On spécifie les informations du réseau wifi
# (remplacez "mon_reseau" et "mon_mot_de_passe" 
# par les informations de votre réseau)
ssid = "mon_reseau"
password = "mon_mot_de_passe"

# On spécifie la clé d'API Écriture de emoncms:
apikey = "votre_clé_d_api"

# On vient créer une instance de l'interface wifi en mode station
sta_if = WLAN(STA_IF)

# On active l'interface wifi
sta_if.active(True)

# Et on se connecte au réseau wifi
print(f"Connexion au réseau {ssid}...", end="")
if not sta_if.isconnected():
  sta_if.connect(ssid, password)
  while not sta_if.isconnected():
    print(".", end="")
    sleep(1)

# On affiche que la connexion a bien été établie
print(f"\nConnecté au réseau {ssid} !")

# URL du serveur où l'on va envoyer les données
url = "http://emoncms.fr/input/post"

# On vérifie que la connexion est toujours active
if sta_if.isconnected():
    # On lit la luminosité ambiante perçue par la Galaxia
    # et on la convertit en chaîne de caractères
    light_level = str(led.read_light_level())

    # On crée un dictionnaire contenant les données à envoyer
    data = {
      "node": "galaxia",
      "data": '{"light_level":' + light_level + '}',
      "apikey": apikey
    }

    # On envoie la requête HTTP POST au serveur emoncms.fr
    r = post(url, data)

    # Si la réponse du serveur est "ok", on allume la LED en vert
    if r.text == 'ok':
      led.set_colors(0, 255, 0)
    else:
      # Sinon, on allume la LED en rouge
      led.set_colors(255, 0, 0)
      # Et on affiche l'erreur renvoyée par le serveur
      print(r.text)

Aller plus loin

Dans l'exemple ci-dessus, nous utilisons les dictionnaires et la fonction str(), le module network qui est décrit en anglais ici et le module additionnel requests qui est décrit en anglais .