WIFI växt övervakningssystem baserade på Arduino MEGA och ESP8266 (2 / 4 steg)
Steg 2: Skicka data till thingspeak
I detta steg ska vi försöka förklara du hur fungerar koden. Koden är ganska komplicerat på grund av förekomsten av AT-kommandon, krävs enligt ESP8266. Så denna analys anspråk inte på att vara uttömmande men det lär bara vad du har att ändra för att skicka data till Thingspeak. Titta på denna sida för mer information AT-kommandon.
Innan vi går, titta på video i detta steg för mer info om Thingspeak grundläggande inställningar och sedan ställa in DHCP på routern.
I den första delen definierar vi de konstanter som behövs för resten av skissen.
#define esp8266 Serial1 / / Använd esp8266 för att prata med esp8266
#define SSID "SSID_NAME" / / lägga här namnet på ditt wifi-nätverk
#define PASS "ROUTER_PASSWORD" / / här sätta lösenord för ditt wifi-nätverk
#define IP "184.106.153.149" / / thingspeak.com's IP
Sträng få = "GET /update? nyckel = [THINGSPEAK_KEY] &"; Lägg här din thingspeak nyckel
String GET1 = "Fält1 =";
String valuetosend = "10". för detta första test skickar vi ett enkelt värde
Vi kallar esp8266 den seriella porten #1 för bekvämlighet, då vi definierar våra SSID-namnet, router lösenord om du använder en och ThingSpeak IP. Vi har också tre strängvariabler: två första utgör kommandoraden skickas till ThingSpeak som består av få och GET1. Ersätt [THINGSPEAK_KEY] med din nyckel, genereras automatiskt av ThingSpeak en gång gjort en ny kanal. Titta på videon i det här steget för mer info om. GET1 lagra data för diagrammet 1. För varje sensor måste du deklarera en sträng.
Strängen kallas valuetosend är bara ett slumpmässigt värde vi använder för att testa.
Första funktionen hittar vi går på analysera skiss kallas updateFunction:
void updateFunction(String valuetosend) {
Sträng cmd = "AT + CIPSTART = \"TCP\", \" ";
CMD + = IP;
CMD + = "\",80";
esp8266.println(CMD);
Delay(2000);
IF(esp8266.find("Error")) {
Serial.Print("Error1");
hemkomst.
}
CMD = GET + GET1;
CMD += valuetosend;
CMD + = "\r\n";
Serial.Print(CMD);
esp8266.Print("at+CIPSEND=");
esp8266.println(cmd.length());
om (esp8266.find(">")) {
esp8266.Print(CMD);
} annat {
esp8266.println("at+CIPCLOSE");
}
}
Denna funktion börjar en TCP-anslutning i 80 port mot ThingSpeak. Om allt går bra, skickar kommandoraden för att uppdatera diagrammet.
Kommandoraden har följande struktur:
GET /update? nyckel = [THINGSPEAK_KEY] & Fält1 = 10
Strax efter, det är funktionen connectWiFi :
booleska connectWiFi() {
esp8266.println("at+CWMODE=1");
Delay(2000);
Sträng cmd = "AT + CWJAP = \" ";
CMD + = SSID;
CMD + = "\", \ "";
CMD + = PASS;
CMD + = "\" ";
esp8266.println(CMD);
Delay(5000);
IF(esp8266.find("OK")) {
Serial.println("OK");
return true;
} annat {
Serial.println("ko");
returnera false;
}
}
I grund och botten gör den här funktionen din ESP8266 gå med din wifi LAN med hjälp av kommandot AT + CWJAP. Om det upprättar en anslutning, returneras Sant annars falskt.
Som vanligt, initierar setup -funktionen variabler, pin lägen och så vidare.
void setup()
{
Serial.BEGIN(9600);
esp8266.BEGIN(115200);
sensors.BEGIN();
esp8266.println("at");
Delay(5000);
IF(esp8266.find("OK")) {
connectWiFi();
}
}
Det initierar de två seriell kommunikationerna, skriver ut "AT" och sedan försöker ansluta till ESP8266 till dina wifi LAN utskrift "OK" om detta försök går bra. Tänk på att du måste initiera här alla digitala och/eller analoger stiften används av dessa sensorer som du behöver.
Loop funktion bara ringer tillbaka updateFunction (se ovan) och väntar 5 sekunder innan du kommer tillbaka och börjar igen. Ändra fördröjningstiden efter dina behov.
void loop() {
updateFunction(valuetosend);
Delay(5000);
}