Étape 5: Envoi des données
Vous devez d’abord comprendre les rudiments de HTTP. Le protocole HTTP (Hypertext Transfer) est conçu pour permettre des communications entre clients et serveurs.
Œuvres HTTP comme protocole de demande / réponse entre un client et un serveur. Un navigateur web peut être le client, et une application sur un ordinateur qui héberge un site web peut être le serveur. Exemple : Un client (navigateur) envoie une requête HTTP au serveur ; Ensuite, le serveur retourne une réponse au client. La réponse contient des informations de statut sur la demande et peut également contenir le contenu demandé. Sur notre exemple, l’esp8266 est le client et le serveur qui héberge notre site Internet est le serveur.
Alors effectuer une demande HTTP Post doit être sous une certaine forme :
/Esppost.php POST HTTP/1.0
Hôte : serverconnect.site88.net
Accepter: * / *
Content-Length: « name1 = value1 & name2 = value2 ". Longueur
Content-Type : application/x-www-formulaires-urlencoded
name1 = value1 & name2 = valeur2
Vous pouvez trouver plus d’explication et d’informations dans l’Arduino croquis ci-dessous. Après avoir téléchargé l’esquisse, attendez quelques secondes puis vous actualisez la page Web.
#include « SoftwareSerial.h »
Chaîne de ssid = « yourSSID » ;
Mot de passe string = « yourPassword » ;
SoftwareSerial esp (6, 7); / / RX, TX
Données de type chaîne ;
Server String = « yourServer » ; // www.example.com
Chaîne uri = « yourURI » ; / / notre exemple est /esppost.php
int DHpin = 8 ; //Sensor goupille
dat octet [5] ;
String temp, hum ;
void setup() {}
pinMode (DHpin, sortie) ;
ESP.Begin(9600) ;
Serial.Begin(9600) ;
Reset() ;
connectWifi() ;
}
réinitialiser le module esp8266
void reset() {}
ESP.println("at+RST") ;
Delay(1000) ;
if(ESP.Find("OK")) Serial.println ("Module Reset") ;
}
se connecter à votre réseau wifi
void connectWifi() {}
String cmd = "AT + CWJAP = \" "+ ssid + « \ », \" "+ mot de passe +"\"" ;
ESP.println(cmd) ;
Delay(4000) ;
{if(ESP.Find("OK"))}
Serial.println("Connected!") ;
}
else {}
connectWifi() ;
Serial.println ("Impossible de se connecter au wifi") ; }
}
octet read_data () {}
données d’octets ;
pour (int i = 0; j’ai < 8; i ++) {}
Si (digitalRead (DHpin) == faible) {}
tandis que (digitalRead (DHpin) == faible) ; / / attente pour 50us
delayMicroseconds (30) ; / / déterminer la durée du haut niveau pour déterminer les données est ' 0 'ou 1'
Si (digitalRead (DHpin) == HIGH)
données | = (1 << (7-i)) ; / / haut devant et le bas dans le post
tandis que (digitalRead (DHpin) == haute) ;
données « 1 », attendre que le récepteur suivant un
}
} renvoient des données ; }
void start_test () {}
digitalWrite (DHpin, basse) ; / / bus vers le bas, commencer à envoyer signal
retard (30) ; / / retard supérieur à 18ms, donc DHT11 signal de démarrage peut être détecté
digitalWrite (DHpin, élevé) ;
delayMicroseconds (40) ; / / Attendre réponse DHT11
pinMode (entrée, DHpin) ;
tandis que (digitalRead (DHpin) == haute) ;
delayMicroseconds (80) ;
Réponse de DHT11, tiré les 80us bus
Si (digitalRead (DHpin) == faible) ;
delayMicroseconds (80) ;
80us DHT11 après le bus tiré de commencer à envoyer des données
pour (int i = 0; j’ai 4 <; i ++)
température de recevoir et de données d’humidité, le bit de parité ne sont pas considéré comme
DAT [i] = read_data () ;
pinMode (DHpin, sortie) ;
digitalWrite (DHpin, élevé) ;
Envoyer des données une fois après la sortie de l’autobus, attendent que l’hôte ouvrir le prochain signal de départ
}
void loop () {}
start_test () ;
convertir les bits de données sous forme de chaîne
Hum = String(dat[0]) ;
Temp = String(dat[2]) ;
données = "température =" + temp + "& humidité =" + hum ; / / données envoyées doivent être sous cette forme //name1=value1 & nom2 = valeur2.
HttpPost() ;
Delay(1000) ;
}
Sub httppost () {}
ESP.println ("AT + CIPSTART = \ « TCP\ », \" "+ serveur + « \",80 ») ; //start une connexion TCP.
Si (esp.find("OK")) {}
Serial.println ("connexion TCP prête ») ;
} delay(1000) ;
PostRequest chaîne =
« POST » + uri + « HTTP/1.0\r\n » +
"Hôte:" + serveur + « \r\n » +
"Accepter: *" + « / » + "* \r\n" +
"Content-Length:" + data.length() + « \r\n » +
"Content-Type : application/x-www-formulaires-urlencoded \r\n" +
« \r\n » + données ;
String sendCmd = "AT + CIPSEND =" ; //determine le nombre de caractères à envoyer.
ESP.Print(sendCmd) ;
ESP.println(postRequest.length()) ;
Delay(500) ;
Si (esp.find(">")) {Serial.println("Sending..") ; esp.print(postRequest) ;
Si (esp.find ("envoi OK")) {Serial.println ("paquet envoyé") ;
tandis que (esp.available()) {}
String tmpResp = esp.readString() ;
Serial.println(tmpResp) ;
}
fermer la connexion
ESP.println("at+CIPCLOSE") ;
}
}}
Si tout se passe bien vous devez voir un résultat similaire à l’image ci-dessus voire débranchez puis rebranchez votre Arduino et attendez quelques secondes.