Als ersten Schritt werde ich einen Prototypen bauen. Normalerweise baut man einen Prototyp ja auf einem Steckbrett . Ich möchte den Prototypen aber ein paar Wochen ausprobieren damit ich sehe wie viel Energie er braucht und wie sich die Messungen verhalten. Deswegen mache ich meinen Prototypen auf einer Lochraster Platine. Außerdem werde ich auf meinem Arduino eine Datenaufzeichnung in einer Datenbank einrichten und eine kleine Webvisualisierung dazu erstellen.
Meine Einkaufsliste dazu:
- ESP8266 Esp-12 Remote Serial Port WIFI Module with IO adapter plate Expansion
- XCSOURCE FT232RL 3.3V 5.5V FTDI USB zu TTL Serielles Adaptermodul Arduino Mini Anschluss TE203
- MTS1EU Greenhouse Sensor Kit Soil Hygrometer Module and DHT11 Temperature/Humidity Module for Arduino. Gewächshaus Pflazen
Zusätzlich noch:
- eine Lochraster Platine
- 3 Stk. 10k Widerstände (oder höherohmig, es müssen nur drei gleiche sein)
- 1 Stk Elektrolytkondesator (> 500 uF)
- 1 Stk. Transistor (z.B. BC547C)
- 1 Stk 3,3K Widerstand
- eine Steckerleiste (2 pins)
- einen Jumper
- und einen Lötkolben.
Ich weiß, über Lötkolben wird viel fachgesimpelt aber mir persönlich reicht eine 22€ Lötstation. Außerdem ist dabei eine recht gute Entlötpumpe dabei und so ein Gerät empfehle ich auch dringend jedem Anfänger. Überschüssiges Geld ist am besten in vernünftigem Lötzinn angelegt. Für die Stromversorgung verwende ich eine USB Powerbank die ich als Werbegeschenk erhalten habe. Man bekommt die zur Zeit eh überall geschenkt, ansonsten erhält man sie auch für unter 10 € im Netz (z.B. hier).
Ich vermeide bei Prototypen stets die Bauteile direkt einzulöten. Deswegen verwende ich gerne Steckerleisten. Diese haben zwar den Nachteil dass man etwas vorsichtig mit dem Aufbau umgehen muß aber dafür kann ich einfach Bauteile für Versuche einfach raus nehmen ohne gleich zum Lötkolben greifen zu müssen.
Das der ESP8266 nur 3,3V verträgt verwende ich den USB zu TTL Konverter auch gleich als Spannungswandler. Dazu muß nur der Jumper auf dem Board auf 3,3 V gesteckt werden. Zum Energiesparen werde ich den ESP in den Deep-Sleep-Modus versetzen. Damit die beiden Sensoren derweilen keinen Strom verbrauchen schalte ich sie über einen Ausgang und einen Transistor weg. Der ESP benötigt bei Verbindungsaufbau zum WLAN relativ viel Strom, deshalb muß parallel zur Versorgung ein Elektrolytkondensator geschaltet werden. Es ist keine Raketenwissenschaft diesen auszulegen, er sollte irgendwas zwischen 400uF und 2200uF bei 6-10V haben. Für das Programmieren muß der CH_PD Pin auf GND gezogen werden. Manche empfehlen dafür einen Taster, ich bevorzuge eine kleine Steckerleiste und einen Jumper.
In der ESP8266 Dokumentation ist beschrieben, dass zum Aufwachen aus dem Deep-Sleep der PIN16 mit CH_PD verbunden sein muß. Leider hat das bei meinem ESP nicht funktioniert. Deshalb verwende ich den RESET für den Wakeup. Ich kann dadurch zwar ein paar Optionen des Deep-Sleep nicht verwenden aber für den Prototypen ist mir das egal.
Es bedarf etwas an Tüftelei die Bauelemente auf der Platine sinnvoll zu platzieren, ich habe versucht Platz zu sparen, vor allem weil ich einen relativ kleines Platinenstück übrig hatte.
Zum Programmieren des ESP verwende ich meine Arduino IDE. Dazu muß man in der Arduino Software, in den Einstellungen http://arduino.esp8266.com/stable/package_esp8266com_index.json
eintragen. Dann unter Tools > Board „…“ > Board Manager… auswählen, esp8266 anklicken und Install drücken. Danach kann der ESP wie jeder andere Arduino programmiert werden. Zum Programmieren muß der Jumper beim Initialisieren gesetzt sein. Bei mir zickt das Hochladen des Programmes ab und zu. In dem Fall nehme ich einfach kurz die Spannung weg (aber lange genug dass ich der ELKO entlädt) und versuche es nochmal. ACHTUNG, wenn beim Aufwachen aus dem Deep Sleep der Jumper noch immer gesetzt ist dann startet der ESP nicht richtig.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
#include // WLAN Name und Passwort (PSK) const char* ssid = "SSID"; const char* password = "PSK"; WiFiClient client; // Server Adresse des Raspberry char server[] = "10.0.0.3"; int port = 80; //Sollte am Apache ein anderer Port verwendet werden hier anpassen // Update Intervall const unsigned long postingInterval = 1800L * 1000000L; //DHT initiallisieren #include #define DHTPIN 4 #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE,16); // needed to avoid link error on ram check extern "C" { #include "user_interface.h" } void setup() { // Pin 12 schaltet in meinem Fall die Sensoren ein/aus pinMode(12, OUTPUT); digitalWrite(12, HIGH); // Serielle Schnittstelle für Debug Zwecke Serial.begin(115200); Serial.println("WLAN Temperatur und Feuchtigkeitslogger - Stromspielplatz"); // WIFI starten WiFi.mode(WIFI_STA); WiFiStart(); // Angstwarten delay(3000); //DHT init dht.begin(); // ADC (Bodenfeuchtigkeit) init pinMode(A0, INPUT); } void loop() { // Sollte beim POST ein Return kommen gebe ich den am Serial aus while (client.available()) { char c = client.read(); Serial.write(c); } // Sensorwerte einlesen float hum = dht.readHumidity(); float temp = dht.readTemperature(); float soil = analogRead(A0); //Debug Serial.println("Humidity:"+String(hum,2)+"\tTemperature:"+String(temp,2)+"\tSoil:"+String(soil,2)); //Werte senden httpRequest(hum,temp,soil); //Sensoren abschalten und Deep Sleep aktivieren delay(500); digitalWrite(12, LOW); ESP.deepSleep(postingInterval, WAKE_NO_RFCAL); delay(1000); } //Daten an Webserver übertragen void httpRequest(float h, float t, float s) { client.stop(); delay(100); //URL mit Vaiablen bauen String url = "/newrecord.php?"; url += "temp="; url += String(t,2); url += "&humidity="; url += String(h,2); url += "&soil="; url += String(s,2); // aufrufen if (client.connect(server, port)) { Serial.println("connecting..."); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "Connection: close\r\n\r\n"); Serial.println("data submitted."); delay(10); } else { Serial.println("connection failed"); } } // WIFI Verbindung aufbauen void WiFiStart() { Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println(WiFi.localIP()); } |
Ein Gedanke zu „Bewässerung – Teil 1: Ein Prototyp“