Projet 2
Projet 3
visiteurs
visiteur en ligne
Le Programme doit lire la température et faire une requête PATCH sur le fichier foc.php sur le serveur.
Contrairement a la requête GET de la commande d'une LED, la requête PATCH ne peut pas simplement lire une donnée dans le fichier light.json mais doit modifier le fichier data.json (le fichier light.json n'est plus utilisé et est remplacé par le fichier data.json)
Le fichier foc.php effectuera la modification des données dans le fichier data.json sur le serveur.
REMARQUE :
Le programme utilise la sortie série pour visualiser les échanges avec le serveur mais ces échanges série peuvent ne pas être utilisés si la carte ESP8266 n'est plus connecté à l'ordinateur mais est alimentée en autonome (2 piles de 1,5V)
/*
Nom du programme patch_sur_serveur.php
Materiel :
-Carte ESP8266 Lolin
-capteur de température LM35 sur A0
Les étapes du code :
dans le setup
connexion Wifi
dans la boucle loop
lecture en local de la valeur du capteur
connexion au serveur
si la température a changée
PATCH sur le serveur de la valeur lue
attente de 5 secondes
créé le 20 Fevrier 2017
Ce code est en CC0 1.0 Universal
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
ESP8266WiFiMulti WiFiMulti;
// déclaration d'une variable payload dont on va se servir pour
// l'envoie et la réception de nos messages
String payload;
// initialisation des constantes spécifiques à votre installation
const String nelsonName = "gerard13007";
const char* ssid = ".......";
const char* password = ".......";
const char* domaine =".......";
const char* ressource ="/..../foc.php/";
float Vout=0;
float T=0;
float oldT=0;
float pot=0;
void setup() {
pinMode(D4,OUTPUT);
// on souhaite communiquer avec l'ordinateur
Serial.begin(9600);
Serial.setDebugOutput(true);
Serial.println("Nelson v0.3 PATCH starting...");
for(uint8_t t = 4; t > 0; t--) {
Serial.printf("[SETUP] WAIT %d...\n", t);
Serial.flush();
delay(1000);
}
// on se connecte au Wifi
WiFiMulti.addAP(ssid, password);
}
void loop() {
// on regarde si on est bien connecté au point d'accès wifi
if((WiFiMulti.run() == WL_CONNECTED)) {
// création d'un objet appelé http réutilisable et sorti du moule HTTPClient
HTTPClient http;
// lecture de la température
analogRead(A0);
delay(10);
Vout=analogRead(A0);
Vout=Vout * 3.3 /1023.0;
T = (Vout -0.5)*87.0;// normalement * 100
Serial.print("Temp");
char myChar = 233;//caractère "é" pour la liaison série
Serial.print(myChar);
Serial.print("rature = ");
Serial.println(T);
if(T!=oldT){
// si la température a changée, connexion serveur PATCH pour ecrire la valeur
digitalWrite(D4, LOW);// pour signaler le PUCH
Serial.println("[HTTP] begin...");
String uri = ressource;//-----------modif
http.begin(domaine, 80, uri);//----------------modif
Serial.println("[HTTP] PATCH...");
String payload = "{\"température\":";
payload = payload + T;
payload = payload + "}";
Serial.print("[HTTP] PATCH... payload:");
Serial.println(payload);
// démarrer la connexion et envoyer les entêtes HTTP
http.addHeader("Content-type", "application/json");
int httpCode = http.sendRequest("PATCH", (uint8_t *) payload.c_str(), payload.length());
// httpCode sera négatif si on rencontre une erreur
if(httpCode > 0) {
// les entêtes HTTP ont été envoyés et
Serial.printf("[HTTP] PATCH... code: %d\n", httpCode);
// si le serveur répond par OK
if(httpCode == HTTP_CODE_OK)
Serial.println("[HTTP] PATCH... OK!");
}// Fin du if(httpCode > 0)
else
Serial.printf("[HTTP] PATCH... failed, error: %s\n", http.errorToString(httpCode).c_str());
http.end();
digitalWrite(D4, HIGH);// D4 off
}//fin du if T!=oldT
}// Fin du if((WiFiMulti.run()
else Serial.println("problème WiFi");
oldT=T;
delay(5000); // attente de 5 secondes pour une nouvelle requete
}// Fin du Loop