Stap 2: Het verzenden van gegevens naar thingspeak
In deze stap die we proberen zullen om u uitleggen hoe werkt de code. De code is vrij complex vanwege de aanwezigheid van AT commando's, ESP8266 voorgeschreven. Dus, deze analyse geen aanspraak op het tijdstip van volledig, maar het leert alleen wat je moet wijzigen om gegevens verzenden Thingspeak. Kijk op Deze pagina voor meer info over AT commando's.
Alvorens in te gaan op, Bekijk de video toegevoegd in deze stap voor meer info over Thingspeak basisinstellingen en dan DHCP op uw router ingesteld.
In het eerste deel definiëren we de constanten die nodig zijn voor de rest van de schets.
#define esp8266 Serial1 // use esp8266 to talk to esp8266 #define SSID "SSID_NAME" // put here the name of your wifi network #define PASS "ROUTER_PASSWORD" // put here the password of your wifi network #define IP "184.106.153.149" // thingspeak.com's IP String GET = "GET /update?key=[THINGSPEAK_KEY]&"; // put here your thingspeak key String GET1 = "field1="; String valuetosend = "10"; // for this first test we send a simple value
We noemen de esp8266 de seriële poort #1 voor gemak, dan definiëren we onze SSID naam, het wachtwoord van de router als u een en de ThingSpeak IP. We hebben ook drie string variabelen: de eerste twee vertegenwoordigen de opdrachtregel verzonden naar ThingSpeak die is samengesteld uit GET en GET1. [THINGSPEAK_KEY] vervangen door uw sleutel, , automatisch gegenereerd door ThingSpeak eenmaal gedaan een nieuw kanaal. Bekijk de video toegevoegd in deze stap voor meer info over. GET1 winkel gegevens voor de grafiek 1. Voor elke sensor moet u verklaren een String.
De tekenreeks met de naam valuetosend is slechts een willekeurige waarde die we voor het testen gebruiken.
De eerste functie we gaan vinden op de analyse van de schets heet updateFunction:
void updateFunction(String valuetosend){ String cmd = "AT+CIPSTART=\"TCP\",\""; cmd += IP; cmd += "\",80"; esp8266.println(cmd); delay(2000); if(esp8266.find("Error")){ Serial.print("Error1"); return; } cmd = GET + GET1; cmd += valuetosend; cmd += "\r\n"; Serial.print(cmd); esp8266.print("AT+CIPSEND="); esp8266.println(cmd.length()); if(esp8266.find(">")){ esp8266.print(cmd); }else{ esp8266.println("AT+CIPCLOSE"); } }
Deze functie wordt een TCP-verbinding in de 80 haven richting ThingSpeak. Als alles goed gaat, stuurt dan de opdrachtregel voor het bijwerken van de grafiek.
De command line heeft de volgende structuur:
GET /update?key=[THINGSPEAK_KEY]&field1=10
Net na, is er de connectWiFi functie:
boolean connectWiFi(){ esp8266.println("AT+CWMODE=1"); delay(2000); String cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; esp8266.println(cmd); delay(5000); if(esp8266.find("OK")){ Serial.println("OK"); return true; }else{ Serial.println("KO"); return false; } }
Kortom, deze functie maakt uw ESP8266 lid te worden van uw wifi LAN met de opdracht AT + CWJAP. Als het een verbinding tot stand brengt, wordt waar geretourneerd anders false.
Zoals gebruikelijk, initialiseert de setup functie variabelen, pin modi, enzovoort.
void setup() { Serial.begin(9600); esp8266.begin(115200); // sensors.begin(); esp8266.println("AT"); delay(5000); if(esp8266.find("OK")){ connectWiFi(); } }
Het initialiseert de twee seriële communicatie, worden afgedrukt "AT" en vervolgens probeert de ESP8266 verbinden met uw wifi LAN afdrukken "OK" als deze poging goed gaat. Houd in gedachten dat je moet initialiseren hier de digitale en/of analogen pinnen gebruikt door deze sensors die u nodig hebt.
De lus functie gewoon teruggebeld door de updateFunction (hierboven gezien) en wacht 5 seconden voordat terugkomen en opnieuw beginnen. Wijzig de vertragingstijd volgens uw behoeften.
void loop(){ updateFunction(valuetosend); delay(5000); }