Brewduino (1 / 3 steg)

Steg 1: DHT22 + ESP8266 + ThingSpeak = grejer!



Jag har anslutit modulen DHT22 använder tre stiften. En tråd till + 5V, en till marken, och den andra till stift 6 på Arduino MEGA som jag använder.

Än den seriella bildskärmen finns det inget sätt att se temperaturen. Jag föredrar visuella, så jag kommer att koppla upp ESP8266 (WiFi) modul och skicka mina resultat till ThingSpeak. ESP8266 använder fem av de åtta stift som den har. En för + 3.3V (inte + 5V eller du kommer att steka det) visas som en gul tråd i diagrammet, en för marken (svart kabel), en vardera för RX och TX (grön och blå) och en Återställ PIN-kod (vit kabel) som också går till + 3.3V.

Koden för DHT22 är ganska enkelt, så ska vi titta på det nästa. ESP8266 är mer besvärlig, och ganska ofta är benägna att inte svara. Om du tror att din kod är rätt, och ESP8266 svarar inte, prova att koppla ur/ansluta de två 3.3V kablarna från bakbord. Jag tycker som ger en bra återställning till modulen. När koden körs visas RX/TX lampor blinkar på Arduino och vid samma tidpunkt bör du se ett blått ljus på ESP8266 blixten.

Koden är fäst här.

För DHT22 jag använder de två biblioteken från här: http://playground.arduino.cc/Main/DHTLib
Måste du kopiera/klistra in texten för filerna till nya filer och namnge dem därför. Alla instruktioner för detta finns på länken.

Jag börjar även DHT biblioteket och definiera PIN-koden för DHT22. Jag definierar sedan min wifi SSID och lösenord.

Nu är vi på den huvudsakliga setup. Jag använder två följetong börjar kommandon:

Serial.BEGIN(115200);
Serial2.BEGIN(9600);

Serial.begin är för DHT22, så att jag kunde få resultat till seriell bildskärmen innan jag lagt wifi modul. Serial2.begin är för wifi-modulen. Om du använder en Arduino än Mega kan du bara har en följetong RX/TX och behöver ändra koden därefter. Nu ställa jag upp i ESP8266.

WiFi setup
Serial2.println("at");
Serial.println ("AT skickade - kontroll...");

Delay(5000);

char okcheck [] = "OK";

IF(Serial2.find(okcheck)) {
Serial.println ("OK, hittade. Ansluta");
connectWiFi();
Serial.println ("Yay! Bör vara ansluten nu.");}
annat {
Serial.println ("inte ansluten till WIFI");
}

När du använder Serial2 talar jag till ESP8266. När du använder bara följetong jag prata (eller skriver ut på) seriell bildskärmen. Jag skickar kommandot till ESP8266 och skriva ut texten till seriell bildskärmen Visa mig vad som händer i bakgrunden. Jag kör en Serial2.find för att se om jag fick ett svar av OK sedan vänta i fem sekunder. Om jag gjorde då kommer jag att försöka ansluta (genom att hoppa till connectWiFi()). Om inte sedan jag visa texten att säga inte är ansluten.

Ansluta till en wifi router behöver SSID, lösenord och flera kommandon.

booleska connectWiFi() {
Serial2.println("at+CWMODE=1");
Delay(2000);
Sträng cmd = "AT + CWJAP = \" ";
lägga till SSID och lösenord
CMD + = SSID;
CMD + = "\", \ "";
CMD + = PASS;
CMD + = "\" ";
Skicka sträng
Serial2.println(CMD);
Delay(5000);

accepterades inloggning?
char okcheck [] = "OK";
IF(Serial2.find(okcheck)) {
Serial.println ("Login accepterat");
return true;
} annat {
Serial.println ("inloggning inte accepteras.");
returnera false;
}

}

Så jag skicka kommandot AT + CWMODE = 1 till ESP8266. Vänta två sekunder, skapa en sträng kallas cmd och börja med AT + CWJAP = \ "sedan lägga till strängen med SSID, lösenord, sedan skicka ifyllda strängen till ESP8266. Igen, jag kolla på ett svar av OK (eller inte) med ett lämpligt meddelande till seriell bildskärmen.

För de viktigaste loopen hoppa jag först till TempHum() att få min temperatur info från DHT22.

Serial.Print (DHT22, \t");
int chk = DHT.read22(DHT22_PIN);
Switch (chk)
{
fall DHTLIB_OK:
Serial.Print("OK,\t");
bryta;
fall DHTLIB_ERROR_CHECKSUM:
Serial.Print (Checksum error, \t");
bryta;
fall DHTLIB_ERROR_TIMEOUT:
Serial.Print ("Time out fel, \t");
bryta;
standard:
Serial.Print ("okänt fel, \t");
bryta;
}
VISA DATA
Serial.Print (DHT.humidity, 1);
Serial.Print(",\t\t");
Serial.println (DHT.temperature, 1);

Detta är helt enkelt att skapa ett heltal kallas chk och läsa DHT22 PIN-koden. Jag kontrollera status för DHT22 (växeln, som jag har klippt det kod här för att spara utrymme), och skriva ut temperaturen och luftfuktigheten till seriell bildskärmen.

String SendTempLevel = sträng ((float) DHT.temperature, 0);
String SendHumLevel = sträng ((float) DHT.humidity, 0);

De två strängarna är innehavare för temperatur och fuktighet och är vad jag ska skicka till ThingSpeak.

Jag hoppa till updateTemp() ta dessa två strängar med mig. Nu är det dags att skicka till ThingSpeak. Du behöver uppenbarligen att skapa en fri redovisa med ThingSpeak, skapa en kanal, har två fält (för temperatur och luftfuktighet) och få din API-nyckel.

Sträng cmd = "AT + CIPSTART = \"TCP\", \" ";
CMD + = "184.106.153.149"; API.thingspeak.com
CMD + = "\",80";
Serial2.println(CMD);

Precis som förra gången jag skapa en sträng heter cmd och skicka den på koder, Lägg till ThingSpeak IP och port och sedan skicka det till ESP8266.

Igen, jag gör en kontroll för att se om jag skicka ett fel eller inte.

Sträng getStr = "GET /update? api_key =";
getStr += "8KS0CVMQ12A7D817";
getStr += "& Fält1 =";
getStr += String(SendTempLevel);
getStr += "& Fält2 =";
getStr += String(SendHumLevel);
getStr += "\r\n\r\n";

En ny sträng, getStr, skapas med en GET kommandot (med min ThingSpeak API-nyckel) och temperatur och luftfuktighet.

Sträng cmd skapas igen med en AT-kommandot och getStr.length berättar nu länge getStr är. Detta krävs för att skicka till ThingSpeak och skicka till ESP8266.

Som tidigare skickar vi kolla på ett svar. Ju större än tecken (>) betyder bra. Något annat är dåligt och vi skickar AT + CIPCLOSE att stänga anslutningen. Igen, skickas information till seriell bildskärmen att berätta vad som händer.

Ladda upp gist koden till MEGA bör vara felfri och, när du kör, seriell bildskärmen kommer att berätta vad som händer.

Se Steg
Relaterade Ämnen