Stap 5: Verzenden van de gegevens
Eerst moet u de basisbeginselen van een HTTP. Het Hypertext Transfer Protocol (HTTP) is bedoeld om de communicatie tussen clients en servers.
HTTP werkt als een verzoek-antwoordprotocol tussen een client en de server. Een webbrowser kan worden op de client kan, en een toepassing op een computer die als host optreedt van een website de server. Voorbeeld: Een client (browser) verzendt een HTTP-aanvraag naar de server; de server stuurt een antwoord naar de client. De reactie bevat statusinformatie over het verzoek en kan ook de aangevraagde inhoud bevatten. Op ons voorbeeld de esp8266 is de client en de server die als host onze website fungeert is de server.
Dus het uitvoeren van een HTTP Post-aanvraag moet onder een bepaalde vorm:
POST /esppost.php HTTP/1.0
Gastheer: serverconnect.site88.net
Accepteren: * / *
Content-Length: "naam1 = waarde1 & naam2 = waarde2". Lengte
Content-Type: application/x-1-800-www-Dell-vorm-urlencoded
naam1 = waarde1 & naam2 = waarde2
U vindt meer uitleg en informatie in de Arduino schets hieronder. Na het uploaden van de schets, wacht een paar seconden dan u webpagina te vernieuwen.
#include "SoftwareSerial.h"
String ssid = "yourSSID";
String password = "jewachtwoord";
SoftwareSerial esp (L6, L7); / / RX, TX
Tekenreeksgegevens;
Server string = "uw server"; // www.example.com
String van de uri = "yourURI"; / / ons voorbeeld is /esppost.php
int DHpin = 8; //sensor pin
byte dat [5];
String temp, hum;
VOID Setup {}
pinMode (DHpin, uitvoer);
ESP.begin(9600);
Serial.begin(9600);
Reset();
connectWifi();
}
Reset de esp8266 module
VOID reset() {}
ESP.println("at+RST");
delay(1000);
if(ESP.Find("OK")) Serial.println ("Module Reset");
}
verbinden met uw wifi-netwerk
ongeldig connectWifi() {}
String van cmd = "AT + CWJAP = \" "+ ssid + '\', \" "wachtwoord +"\"";
ESP.println(cmd);
delay(4000);
if(ESP.Find("OK")) {}
Serial.println("Connected!");
}
else {}
connectWifi();
Serial.println Cannot ("connect to wifi"); }
}
byte read_data () {}
bytegegevens;
for (int i = 0; ik < 8; ik ++) {}
Als (digitalRead (DHpin) == LOW) {}
terwijl (digitalRead (DHpin) == laag); / / wachten op 50us
delayMicroseconds (30); / / bepalen de duur van het hoge niveau te bepalen van de gegevens is ingesteld op ' 0 'of ' 1'
Als (digitalRead (DHpin) == HIGH)
gegevens | = (1 << (7-i)); / / hoge voorzijde en laag in de post
terwijl (digitalRead (DHpin) == HIGH);
gegevens '1', wachten voor de volgende ontvanger
}
} gegevens; }
VOID start_test () {}
digitalWrite (DHpin, laag); / / bus naar beneden, verzenden start signaal
vertraging (30); / / vertraging groter is dan 18ms, zodat DHT11 startschot kan worden opgespoord
digitalWrite (DHpin, hoge);
delayMicroseconds (40); / / Wacht DHT11 reactie
pinMode (DHpin, INPUT);
terwijl (digitalRead (DHpin) == HIGH);
delayMicroseconds (80);
DHT11 reactie, trok de bus 80us
Als (digitalRead (DHpin) == laag);
delayMicroseconds (80);
DHT11 80us na de bus getrokken om te beginnen met het verzenden van gegevens
for (int i = 0; ik < 4; ik ++)
Ontvangen van temperatuur en vochtigheid gegevens, het pariteitsbit wordt niet beschouwd als
dat [i] = read_data ();
pinMode (DHpin, uitvoer);
digitalWrite (DHpin, hoge);
gegevens verzenden eenmaal na het loslaten van de bus, wachten op de host te openen het volgende startschot
}
void loop () {}
start_test ();
de bits-gegevens naar de vorm van een tekenreeks converteren
Hum = String(dat[0]);
Temp = String(dat[2]);
gegevens = "temperatuur =" + temp + "& vochtigheid =" + hum; / / gegevens die worden verzonden moet onder deze vorm //name1=value1 & naam2 = waarde2.
httppost();
delay(1000);
}
VOID httppost () {}
ESP.println ("AT + CIPSTART = \"TCP\", \" "server +"\",80"); //start een TCP connectie.
Als (esp.find("OK")) {}
Serial.println ("TCP connectie klaar");
} delay(1000);
String postRequest =
"HTTP/1.0\r\n", "POST" + uri +
"Host:" server + "\r\n" +
"Accepteren: *" + "/" + "* \r\n" +
"Content-Length:" + data.length() + "\r\n" +
"Content-Type: application/x-1-800-www-Dell-vorm-urlencoded \r\n" +
"\r\n" + gegevens;
SendCmd koord = "AT + CIPSEND ="; //determine het aantal tekens moet worden verzonden.
ESP.Print(sendCmd);
ESP.println(postRequest.length());
delay(500);
Als (esp.find(">")) {Serial.println("Sending.."); esp.print(postRequest);
Als (esp.find ("verzenden OK")) {Serial.println ("Packet verzonden");
terwijl (esp.available()) {}
TmpResp koord = esp.readString();
Serial.println(tmpResp);
}
de verbinding sluiten
ESP.println("at+CIPCLOSE");
}
}}
Als alles goed is gegaan je moet een resultaat vergelijkbaar met de bovenstaande afbeelding ziet zo niet haal replug je Arduino en wacht een paar seconden.