Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
esp8266_einstieg [17.05.2018] |
esp8266_einstieg [30.11.2020] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== NodeMCU ESP8266 ===== | ||
+ | \\ | ||
+ | \\ | ||
+ | ==== Pinbelegung ==== | ||
+ | |||
+ | Die einzelnen Pins werden über ihre GPIO-Nummer angesprochen.\\ | ||
+ | Hier die Zuordnung: | ||
+ | < | ||
+ | // Pinzuordnung am esp8266 | ||
+ | // D0 = 16; | ||
+ | // D1 = 5; | ||
+ | // D2 = 4; | ||
+ | // D3 = 0; | ||
+ | // D4 = 2; | ||
+ | // D5 = 14; | ||
+ | // D6 = 12; | ||
+ | // D7 = 13; | ||
+ | // D8 = 15; | ||
+ | // D9 = 3; | ||
+ | // D10 = 1; | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | ==== Programmierung ==== | ||
+ | |||
+ | |||
+ | Der NodeMCU ESP8266 wird wie ein Arduino mit der gleichen Software programmiert.\\ | ||
+ | Wichtig ist die Installation der benötigten Treiber, die die Software aber mitbringt.\\ | ||
+ | \\ | ||
+ | [[doku.php? | ||
+ | \\ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | ==== Tastendruck ==== | ||
+ | |||
+ | |||
+ | Der NodeMCU ESP8266 kann auf ein Ereignis wie einen Tastendruck reagieren.\\ | ||
+ | \\ | ||
+ | Als einfaches Beispiel wird der Taster zwischen Digitaleingang D1 und +3,3V Ausgang des NodeMCU angeschlossen. Zwischen Taster und 3V-Versorgung wird ein 10K-Widerstand angeschlossen, | ||
+ | Schaltungsbeispiel: | ||
+ | {{:: | ||
+ | |||
+ | \\ | ||
+ | Programmcode: | ||
+ | < | ||
+ | // | ||
+ | // Pinzuordnung am esp8266 | ||
+ | // static const uint8_t D0 = 16; | ||
+ | // static const uint8_t D1 = 5; | ||
+ | // static const uint8_t D2 = 4; | ||
+ | // static const uint8_t D3 = 0; | ||
+ | // static const uint8_t D4 = 2; | ||
+ | // static const uint8_t D5 = 14; | ||
+ | // static const uint8_t D6 = 12; | ||
+ | // static const uint8_t D7 = 13; | ||
+ | // static const uint8_t D8 = 15; | ||
+ | // static const uint8_t D9 = 3; | ||
+ | // static const uint8_t D10 = 1; | ||
+ | |||
+ | // Filename: esp8266_digi1_abfragen | ||
+ | |||
+ | int ledPin = 16; //interne led | ||
+ | int tasterPin = 5; // digitaleingang d1 | ||
+ | |||
+ | int zaehler = 0; | ||
+ | |||
+ | void setup(){ | ||
+ | pinMode(ledPin, | ||
+ | pinMode(tasterPin, | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | |||
+ | |||
+ | // IF Schleifen Beginn | ||
+ | if (digitalRead(tasterPin)==LOW){ | ||
+ | digitalWrite(ledPin, | ||
+ | Serial.println(" | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | digitalWrite(ledPin, | ||
+ | Serial.println(" | ||
+ | zaehler++; | ||
+ | } | ||
+ | Serial.print(" | ||
+ | Serial.println(zaehler); | ||
+ | // | ||
+ | |||
+ | // reset des zaehlers und ausgabe fue den benutzer | ||
+ | //zaehler = 0; | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | // IF Schleifen Ende | ||
+ | | ||
+ | delay(1000); | ||
+ | |||
+ | |||
+ | } // void loop ende | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | Der SerialMonitor zeigt:\\ | ||
+ | < | ||
+ | Eingang LOW | ||
+ | Anzahl: 0 | ||
+ | Eingang LOW | ||
+ | Anzahl: 0 | ||
+ | Eingang LOW | ||
+ | Anzahl: 0 | ||
+ | Eingang LOW | ||
+ | Anzahl: 0 | ||
+ | Eingang LOW | ||
+ | Anzahl: 0 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 1 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 2 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 3 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 4 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 5 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 6 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 7 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 8 | ||
+ | Eingang HIGH | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | Anzahl: 9 | ||
+ | Eingang LOW | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | ==== Kontakt zur Außenwelt ==== | ||
+ | |||
+ | ==== Daten auf einen Webserver übertragen ==== | ||
+ | |||
+ | // | ||
+ | < | ||
+ | //////////////////////////////// | ||
+ | // ESP8266 - Firmware 0.1 | ||
+ | // Post Values to Webserver | ||
+ | //////////////////////////////// | ||
+ | // Code by: | ||
+ | // https:// | ||
+ | //////////////////////////////// | ||
+ | |||
+ | #include < | ||
+ | |||
+ | const char* ssid = " | ||
+ | const char* password = " | ||
+ | const char* host = " | ||
+ | |||
+ | // SensorID | ||
+ | const char* SensorID = " | ||
+ | //Get One Wire Data | ||
+ | const char* TmpWert = " | ||
+ | |||
+ | |||
+ | |||
+ | void setup() { | ||
+ | | ||
+ | | ||
+ | | ||
+ | //Serial Start | ||
+ | Serial.begin(9600); | ||
+ | delay(10); | ||
+ | |||
+ | // We start by connecting to a WiFi network | ||
+ | |||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | Serial.print(" | ||
+ | Serial.println(ssid); | ||
+ | | ||
+ | WiFi.begin(ssid, | ||
+ | | ||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | |||
+ | Serial.println("" | ||
+ | Serial.println(" | ||
+ | Serial.println(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void loop() { | ||
+ | delay(15000); | ||
+ | |||
+ | |||
+ | | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.println(host); | ||
+ | | ||
+ | // Use WiFiClient class to create TCP connections | ||
+ | WiFiClient client; | ||
+ | const int httpPort = 80; | ||
+ | if (!client.connect(host, | ||
+ | Serial.println(" | ||
+ | return; | ||
+ | } | ||
+ | | ||
+ | // We now create a URI for the request | ||
+ | // esp8266.php? | ||
+ | String url = "/ | ||
+ | url += " | ||
+ | url += SensorID; | ||
+ | url += "& | ||
+ | url += TmpWert; | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.println(url); | ||
+ | | ||
+ | // This will send the request to the server | ||
+ | client.print(String(" | ||
+ | " | ||
+ | " | ||
+ | Serial.println(" | ||
+ | delay(10); | ||
+ | | ||
+ | // Read all the lines of the reply from server and print them to Serial | ||
+ | while(client.available()){ | ||
+ | String line = client.readStringUntil(' | ||
+ | // | ||
+ | } | ||
+ | | ||
+ | Serial.println(); | ||
+ | Serial.println(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | ==== Feinstaubsensor ==== | ||
+ | |||
+ | Infos folgen noch...\\ | ||
+ | \\ | ||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | ==== Abstand messen ==== | ||
+ | |||
+ | Am NodeMCU ESP8266 wird ein Ultraschallsensor HC-SR04 angeschlossen.\\ | ||
+ | Trigger geht an D1 (GPIO5)\\ | ||
+ | Echo geht an D2 (GPIO4)\\ | ||
+ | VCC geht an VIN\\ | ||
+ | GND geht an GND\\ | ||
+ | \\ | ||
+ | Der Programmcode esp8266_ultraschall_4.ino: | ||
+ | < | ||
+ | // | ||
+ | // http:// | ||
+ | // http:// | ||
+ | |||
+ | // esp8266_ultraschall_4.ino | ||
+ | |||
+ | // defines pins numbers | ||
+ | #define TRIGGER_PIN | ||
+ | #define ECHO_PIN | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin (9600); | ||
+ | pinMode(TRIGGER_PIN, | ||
+ | pinMode(ECHO_PIN, | ||
+ | pinMode(BUILTIN_LED, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | //long duration, distance; | ||
+ | float duration, distance; | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | duration = pulseIn(ECHO_PIN, | ||
+ | distance = (duration/ | ||
+ | Serial.print(distance); | ||
+ | Serial.println(" | ||
+ | delay(1000); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | \\ | ||
+ | Für eine Mittelwertbildung einer bestimmten Anzahl Messwerte kommt folgender Code zum Einsatz:\\ | ||
+ | |||
+ | < | ||
+ | // | ||
+ | // http:// | ||
+ | // http:// | ||
+ | |||
+ | // esp8266_ultraschall_5.ino | ||
+ | |||
+ | // defines pins numbers | ||
+ | #define TRIGGER_PIN | ||
+ | #define ECHO_PIN | ||
+ | |||
+ | float duration, distance; | ||
+ | float summeallermesswerte = 0; | ||
+ | int zaehler = 0; | ||
+ | float mittelwert = 0; | ||
+ | int durchlaeufe = 9; // hier die gewünschte Anzahl eintragen | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | Serial.begin (9600); | ||
+ | pinMode(TRIGGER_PIN, | ||
+ | pinMode(ECHO_PIN, | ||
+ | pinMode(BUILTIN_LED, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | for (int i=0; i< | ||
+ | | ||
+ | // Ausgabe des aktuellen Durchlauf | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | //long duration, distance; | ||
+ | //float duration, distance; | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | duration = pulseIn(ECHO_PIN, | ||
+ | distance = (duration/ | ||
+ | Serial.print(distance); | ||
+ | Serial.println(" | ||
+ | |||
+ | summeallermesswerte = summeallermesswerte + distance; | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | |||
+ | zaehler = zaehler + 1; | ||
+ | // | ||
+ | // | ||
+ | |||
+ | mittelwert = summeallermesswerte / zaehler; | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | delay(1000); | ||
+ | |||
+ | } // for-schleifen-ende | ||
+ | |||
+ | | ||
+ | // endausgabe | ||
+ | // Ausgabe des Mittelwertes | ||
+ | Serial.print(" | ||
+ | Serial.print(mittelwert); | ||
+ | Serial.println(" | ||
+ | |||
+ | |||
+ | |||
+ | // Reset aller Ausgangswerte | ||
+ | summeallermesswerte = 0; | ||
+ | zaehler = 0; | ||
+ | mittelwert = 0; | ||
+ | } // void-loop-ende | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | \\ | ||
+ | Möchte man die Messwerte per WLAN auf einen Server übertragen, | ||
+ | \\ | ||
+ | esp8266_ultraschall_6.ino\\ | ||
+ | < | ||
+ | // | ||
+ | // http:// | ||
+ | // http:// | ||
+ | // https:// | ||
+ | // | ||
+ | // esp8266_ultraschall_6.ino | ||
+ | |||
+ | #include < | ||
+ | const char* ssid = " | ||
+ | const char* password = " | ||
+ | const char* host = " | ||
+ | |||
+ | // defines pins numbers | ||
+ | #define TRIGGER_PIN | ||
+ | #define ECHO_PIN | ||
+ | |||
+ | const char* SensorID = " | ||
+ | float duration, distance; | ||
+ | float summeallermesswerte = 0; | ||
+ | int zaehler = 0; | ||
+ | float mittelwert = 0; | ||
+ | int durchlaeufe = 30; // hier die gewünschte Anzahl eintragen | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | Serial.begin (9600); | ||
+ | pinMode(TRIGGER_PIN, | ||
+ | pinMode(ECHO_PIN, | ||
+ | pinMode(BUILTIN_LED, | ||
+ | |||
+ | |||
+ | | ||
+ | // Kontakt zum wlan aufnehmen | ||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | Serial.print(" | ||
+ | Serial.println(ssid); | ||
+ | | ||
+ | WiFi.begin(ssid, | ||
+ | | ||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | |||
+ | Serial.println("" | ||
+ | Serial.println(" | ||
+ | Serial.println(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | |||
+ | } // void setup - ende | ||
+ | |||
+ | |||
+ | |||
+ | void loop() { | ||
+ | |||
+ | for (int i=0; i< | ||
+ | | ||
+ | // Ausgabe des aktuellen Durchlauf | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | //long duration, distance; | ||
+ | //float duration, distance; | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | duration = pulseIn(ECHO_PIN, | ||
+ | distance = (duration/ | ||
+ | Serial.print(distance); | ||
+ | Serial.println(" | ||
+ | |||
+ | summeallermesswerte = summeallermesswerte + distance; | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | |||
+ | zaehler = zaehler + 1; | ||
+ | // | ||
+ | // | ||
+ | |||
+ | mittelwert = summeallermesswerte / zaehler; | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | delay(1000); | ||
+ | |||
+ | } // for-schleifen-ende | ||
+ | |||
+ | | ||
+ | // endausgabe | ||
+ | // Ausgabe des Mittelwertes | ||
+ | Serial.print(" | ||
+ | Serial.print(mittelwert); | ||
+ | Serial.println(" | ||
+ | |||
+ | |||
+ | // wlan datenübergabe - beginn | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.println(host); | ||
+ | | ||
+ | // Use WiFiClient class to create TCP connections | ||
+ | WiFiClient client; | ||
+ | const int httpPort = 80; | ||
+ | if (!client.connect(host, | ||
+ | Serial.println(" | ||
+ | return; | ||
+ | } | ||
+ | | ||
+ | // uri erstellent | ||
+ | // esp8266.php? | ||
+ | String url = "/ | ||
+ | url += " | ||
+ | url += SensorID; | ||
+ | url += "& | ||
+ | url += mittelwert; | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.println(url); | ||
+ | | ||
+ | // senden | ||
+ | client.print(String(" | ||
+ | " | ||
+ | " | ||
+ | Serial.println(" | ||
+ | delay(10); | ||
+ | | ||
+ | // Read all the lines of the reply from server and print them to Serial | ||
+ | while(client.available()){ | ||
+ | String line = client.readStringUntil(' | ||
+ | // | ||
+ | } | ||
+ | | ||
+ | Serial.println(); | ||
+ | Serial.println(" | ||
+ | |||
+ | // wlan datenübergabe - ende | ||
+ | |||
+ | |||
+ | |||
+ | // Reset aller Ausgangswerte | ||
+ | summeallermesswerte = 0; | ||
+ | zaehler = 0; | ||
+ | mittelwert = 0; | ||
+ | | ||
+ | } // void-loop-ende | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | ==== Temperatur messen ==== | ||
+ | |||
+ | Mit einem DS18B20-Temperatursensor kann ganz einfach die Temperatur gemessen werden.\\ | ||
+ | Dazu wird am Sensor der Eingang Vin (3,3Volt) und der Datenpin (Mitte) mit einem 1K-Widerstand verbunden.\\ | ||
+ | \\ | ||
+ | Vin des Sensors wird an 3,3Volt-Pin des NodeMCU Boards angeschlossen.\\ | ||
+ | Data des Sensors wird an D4 (Digitaleingang) des NodeMCU-Boards angeschlossen.\\ | ||
+ | Ground des Sensors wird mit Ground des NodeMCU-Board verbunden.\\ | ||
+ | |||
+ | {{:: | ||
+ | {{:: | ||
+ | |||
+ | |||
+ | \\ | ||
+ | Folgender Code liest die Temperatur aus und zeigt am SerialMonitor an: | ||
+ | |||
+ | < | ||
+ | // Quelle: | ||
+ | // ESP8266 DS18B20 ArduinoIDE Thingspeak IoT Example code | ||
+ | // http:// | ||
+ | // https:// | ||
+ | // https:// | ||
+ | // https:// | ||
+ | |||
+ | |||
+ | // esp8288_ds18b20_1.ino | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #define ONE_WIRE_BUS D4 // Digitaleingang D4 | ||
+ | |||
+ | OneWire oneWire(ONE_WIRE_BUS); | ||
+ | DallasTemperature DS18B20(& | ||
+ | |||
+ | char temperatureString[6]; | ||
+ | |||
+ | void setup(void){ | ||
+ | Serial.begin(9600); | ||
+ | Serial.println("" | ||
+ | DS18B20.begin(); | ||
+ | } | ||
+ | |||
+ | float getTemperature() { | ||
+ | float temp; | ||
+ | do { | ||
+ | DS18B20.requestTemperatures(); | ||
+ | temp = DS18B20.getTempCByIndex(0); | ||
+ | delay(100); | ||
+ | } while (temp == 85.0 || temp == (-127.0)); | ||
+ | return temp; | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop() { | ||
+ | float temperature = getTemperature(); | ||
+ | |||
+ | dtostrf(temperature, | ||
+ | Serial.println(temperatureString); | ||
+ | delay(1000); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | Möchte man nun Abstand und Temperatur erfassen, wird dieses Script benötigt: | ||
+ | < | ||
+ | // | ||
+ | // http:// | ||
+ | // http:// | ||
+ | // https:// | ||
+ | // | ||
+ | // esp8266_abstand_temperatur.ino | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | const char* ssid = " | ||
+ | const char* password = " | ||
+ | const char* host = " | ||
+ | |||
+ | // defines pins numbers | ||
+ | #define TRIGGER_PIN | ||
+ | #define ECHO_PIN | ||
+ | #define ONE_WIRE_BUS D4 // Digitaleingang D4 | ||
+ | |||
+ | OneWire oneWire(ONE_WIRE_BUS); | ||
+ | DallasTemperature DS18B20(& | ||
+ | char temperatureString[6]; | ||
+ | |||
+ | const char* SensorID = " | ||
+ | float duration, distance; | ||
+ | float summeallermesswerte = 0; | ||
+ | int zaehler = 0; | ||
+ | float mittelwert = 0; | ||
+ | int durchlaeufe = 30; // hier die gewünschte Anzahl eintragen | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | Serial.begin (9600); | ||
+ | pinMode(TRIGGER_PIN, | ||
+ | pinMode(ECHO_PIN, | ||
+ | pinMode(BUILTIN_LED, | ||
+ | |||
+ | DS18B20.begin(); | ||
+ | | ||
+ | // Kontakt zum wlan aufnehmen | ||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | Serial.print(" | ||
+ | Serial.println(ssid); | ||
+ | | ||
+ | WiFi.begin(ssid, | ||
+ | | ||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | |||
+ | Serial.println("" | ||
+ | Serial.println(" | ||
+ | Serial.println(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | |||
+ | } // void setup - ende | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | float getTemperature() { | ||
+ | float temp; | ||
+ | do { | ||
+ | DS18B20.requestTemperatures(); | ||
+ | temp = DS18B20.getTempCByIndex(0); | ||
+ | delay(100); | ||
+ | } while (temp == 85.0 || temp == (-127.0)); | ||
+ | return temp; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | void loop() { | ||
+ | |||
+ | for (int i=0; i< | ||
+ | | ||
+ | // Ausgabe des aktuellen Durchlauf | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | //long duration, distance; | ||
+ | //float duration, distance; | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(TRIGGER_PIN, | ||
+ | duration = pulseIn(ECHO_PIN, | ||
+ | distance = (duration/ | ||
+ | Serial.print(distance); | ||
+ | Serial.println(" | ||
+ | |||
+ | summeallermesswerte = summeallermesswerte + distance; | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | |||
+ | zaehler = zaehler + 1; | ||
+ | // | ||
+ | // | ||
+ | |||
+ | mittelwert = summeallermesswerte / zaehler; | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | delay(1000); | ||
+ | |||
+ | } // for-schleifen-ende | ||
+ | |||
+ | |||
+ | |||
+ | // Temperaturmessung | ||
+ | float temperature = getTemperature(); | ||
+ | dtostrf(temperature, | ||
+ | Serial.println(temperatureString); | ||
+ | |||
+ | |||
+ | | ||
+ | | ||
+ | // endausgabe | ||
+ | // Ausgabe des Mittelwertes | ||
+ | Serial.print(" | ||
+ | Serial.print(mittelwert); | ||
+ | Serial.println(" | ||
+ | |||
+ | |||
+ | // wlan datenübergabe - beginn | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.println(host); | ||
+ | | ||
+ | // Use WiFiClient class to create TCP connections | ||
+ | WiFiClient client; | ||
+ | const int httpPort = 80; | ||
+ | if (!client.connect(host, | ||
+ | Serial.println(" | ||
+ | return; | ||
+ | } | ||
+ | | ||
+ | // uri erstellen | ||
+ | // esp8266.php? | ||
+ | String url = "/ | ||
+ | url += " | ||
+ | url += mittelwert; | ||
+ | url += "& | ||
+ | url += temperatureString; | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.println(url); | ||
+ | | ||
+ | // senden | ||
+ | client.print(String(" | ||
+ | " | ||
+ | " | ||
+ | Serial.println(" | ||
+ | delay(10); | ||
+ | | ||
+ | // Read all the lines of the reply from server and print them to Serial | ||
+ | while(client.available()){ | ||
+ | String line = client.readStringUntil(' | ||
+ | // | ||
+ | } | ||
+ | | ||
+ | Serial.println(); | ||
+ | Serial.println(" | ||
+ | |||
+ | // wlan datenübergabe - ende | ||
+ | |||
+ | |||
+ | |||
+ | // Reset aller Ausgangswerte | ||
+ | summeallermesswerte = 0; | ||
+ | zaehler = 0; | ||
+ | mittelwert = 0; | ||
+ | | ||
+ | } // void-loop-ende | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== UV-Senosr ML8511 ==== | ||
+ | |||
+ | |||
+ | NodeESP8266 PIN - Modul Pin\\ | ||
+ | \\ | ||
+ | 3,3 Volt - 3,3 Volt\\ | ||
+ | GND - GND\\ | ||
+ | A0 - OUT\\ | ||
+ | \\ | ||
+ | \\ | ||
+ | Code mit wlan:\\ | ||
+ | < | ||
+ | // | ||
+ | // UV-Sensor ML8511 | ||
+ | // | ||
+ | // mit wlan-anbindung | ||
+ | // | ||
+ | // esp8266: | ||
+ | // http:// | ||
+ | // Arduino: | ||
+ | // https:// | ||
+ | // http:// | ||
+ | // | ||
+ | // UV-Index-Infos: | ||
+ | // http:// | ||
+ | // | ||
+ | // UV Index - Belastung - Maßnahme | ||
+ | // 1 - 2 niedrig | ||
+ | // | ||
+ | // 3 - 5 mittel | ||
+ | // | ||
+ | // | ||
+ | // für unbedeckte Haut Sonnenschutzmittel mit ausreichendem Lichtschutzfaktor verwenden. | ||
+ | // | ||
+ | // 6 - 7 hoch | ||
+ | // während der Mittagsstunden Schatten aufsuchen | ||
+ | // entsprechende Kleidung, Hut und Sonnenbrille tragen | ||
+ | // für unbedeckte Haut Sonnenschutzmittel mit ausreichendem Lichtschutzfaktor verwenden. | ||
+ | // | ||
+ | // 8 - 10 sehr hoch Schutz absolut notwendig: | ||
+ | // In der Mittagszeit möglichst nicht draußen aufhalten! | ||
+ | // Unbedingt Schatten aufsuchen! | ||
+ | // Entsprechende Kleidung, Hut, Sonnenbrille und Sonnencreme mit ausreichendem Lichtschutzfaktor sind dringend nötig. | ||
+ | // | ||
+ | // 11 und höher | ||
+ | // | ||
+ | // | ||
+ | |||
+ | |||
+ | #include < | ||
+ | const char* ssid = "ssd deines wlans"; | ||
+ | const char* password = " | ||
+ | const char* host = " | ||
+ | const char* melder = " | ||
+ | const char* SensorID = " | ||
+ | float duration, distance; | ||
+ | float summeallermesswerte = 0; | ||
+ | int zaehler = 0; | ||
+ | float mittelwert = 0; | ||
+ | int durchlaeufe = 30; // hier die gewünschte Anzahl eintragen | ||
+ | |||
+ | |||
+ | int UVsensorIn = A0; //Output from the sensor | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(UVsensorIn, | ||
+ | Serial.begin(9600); | ||
+ | |||
+ | // Kontakt zum wlan aufnehmen | ||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | Serial.print(" | ||
+ | Serial.println(ssid); | ||
+ | | ||
+ | WiFi.begin(ssid, | ||
+ | | ||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | |||
+ | Serial.println("" | ||
+ | Serial.println(" | ||
+ | Serial.println(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | String UVIndex = " | ||
+ | int voltage = averageAnalogRead(UVsensorIn); | ||
+ | //int uvLevel = averageAnalogRead(UVsensorIn); | ||
+ | |||
+ | //float outputVoltage = 3.3 * uvLevel/ | ||
+ | float outputVoltage = 3.3 * voltage/ | ||
+ | float uvIntensity = mapfloat(outputVoltage, | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.print(voltage); | ||
+ | Serial.print(" | ||
+ | Serial.println(); | ||
+ | | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.print(uvIntensity); | ||
+ | Serial.print(" | ||
+ | Serial.println(); | ||
+ | |||
+ | |||
+ | |||
+ | if(voltage< | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //UVIndex = " | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | } | ||
+ | |||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | delay(10000); | ||
+ | |||
+ | |||
+ | |||
+ | // wlan datenübergabe - beginn | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.println(host); | ||
+ | | ||
+ | // Use WiFiClient class to create TCP connections | ||
+ | WiFiClient client; | ||
+ | const int httpPort = 80; | ||
+ | if (!client.connect(host, | ||
+ | Serial.println(" | ||
+ | return; | ||
+ | } | ||
+ | | ||
+ | // uri erstellen | ||
+ | // esp8266.php? | ||
+ | String url = "/ | ||
+ | //url += " | ||
+ | //url += melder; | ||
+ | url += " | ||
+ | url += voltage; | ||
+ | url += "& | ||
+ | url += uvIntensity; | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.println(url); | ||
+ | | ||
+ | // senden | ||
+ | client.print(String(" | ||
+ | " | ||
+ | " | ||
+ | Serial.println(" | ||
+ | delay(10); | ||
+ | | ||
+ | // Read all the lines of the reply from server and print them to Serial | ||
+ | while(client.available()){ | ||
+ | String line = client.readStringUntil(' | ||
+ | // | ||
+ | } | ||
+ | | ||
+ | Serial.println(); | ||
+ | Serial.println(" | ||
+ | |||
+ | // wlan datenübergabe - ende | ||
+ | |||
+ | |||
+ | |||
+ | } // void-loop ende | ||
+ | |||
+ | //Takes an average of readings on a given pin | ||
+ | //Returns the average | ||
+ | int averageAnalogRead(int pinToRead) | ||
+ | { | ||
+ | byte numberOfReadings = 8; | ||
+ | unsigned int runningValue = 0; | ||
+ | |||
+ | for(int x = 0 ; x < numberOfReadings ; x++) | ||
+ | runningValue += analogRead(pinToRead); | ||
+ | runningValue /= numberOfReadings; | ||
+ | |||
+ | return(runningValue); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) | ||
+ | { | ||
+ | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | \\ | ||
+ | |||
+ | Code mit mqtt:\\ | ||
+ | < | ||
+ | // | ||
+ | // UV-Sensor ML8511 | ||
+ | // | ||
+ | // mit wlan-anbindung | ||
+ | // | ||
+ | // esp8266: | ||
+ | // http:// | ||
+ | // Arduino: | ||
+ | // https:// | ||
+ | // http:// | ||
+ | // | ||
+ | // UV-Index-Infos: | ||
+ | // http:// | ||
+ | // | ||
+ | // UV Index - Belastung - Maßnahme | ||
+ | // 1 - 2 niedrig | ||
+ | // | ||
+ | // 3 - 5 mittel | ||
+ | // | ||
+ | // | ||
+ | // für unbedeckte Haut Sonnenschutzmittel mit ausreichendem Lichtschutzfaktor verwenden. | ||
+ | // | ||
+ | // 6 - 7 hoch | ||
+ | // während der Mittagsstunden Schatten aufsuchen | ||
+ | // entsprechende Kleidung, Hut und Sonnenbrille tragen | ||
+ | // für unbedeckte Haut Sonnenschutzmittel mit ausreichendem Lichtschutzfaktor verwenden. | ||
+ | // | ||
+ | // 8 - 10 sehr hoch Schutz absolut notwendig: | ||
+ | // In der Mittagszeit möglichst nicht draußen aufhalten! | ||
+ | // Unbedingt Schatten aufsuchen! | ||
+ | // Entsprechende Kleidung, Hut, Sonnenbrille und Sonnencreme mit ausreichendem Lichtschutzfaktor sind dringend nötig. | ||
+ | // | ||
+ | // 11 und höher | ||
+ | // | ||
+ | // | ||
+ | |||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | const char* ssid = "ssd deines wlans"; | ||
+ | const char* password = " | ||
+ | const char* host = " | ||
+ | const char* melder = " | ||
+ | const char* SensorID = " | ||
+ | float duration, distance; | ||
+ | float summeallermesswerte = 0; | ||
+ | int zaehler = 0; | ||
+ | float mittelwert = 0; | ||
+ | int durchlaeufe = 30; // hier die gewünschte Anzahl eintragen | ||
+ | |||
+ | //mqtt | ||
+ | const char* mqttServer = " | ||
+ | const int mqttPort = 1883; | ||
+ | const char* mqttUser = " | ||
+ | const char* mqttPassword = " | ||
+ | WiFiClient espClient; | ||
+ | PubSubClient client(espClient); | ||
+ | |||
+ | |||
+ | |||
+ | int UVsensorIn = A0; //Output from the sensor | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(UVsensorIn, | ||
+ | Serial.begin(9600); | ||
+ | |||
+ | // Kontakt zum wlan aufnehmen | ||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | Serial.print(" | ||
+ | Serial.println(ssid); | ||
+ | Serial.println("" | ||
+ | Serial.println(" | ||
+ | Serial.println(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | | ||
+ | |||
+ | //mqtt | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | WiFi.begin(ssid, | ||
+ | | ||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | Serial.println("" | ||
+ | Serial.println(" | ||
+ | Serial.println(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | */ | ||
+ | |||
+ | | ||
+ | // | ||
+ | |||
+ | while (!client.connected()) { | ||
+ | Serial.println(" | ||
+ | |||
+ | //if (client.connect(" | ||
+ | if (client.connect(" | ||
+ | |||
+ | Serial.println(" | ||
+ | |||
+ | } else { | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.print(client.state()); | ||
+ | delay(2000); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | | ||
+ | } | ||
+ | |||
+ | void callback(char* topic, byte* payload, unsigned int length) { | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.println(topic); | ||
+ | |||
+ | Serial.print(" | ||
+ | for (int i = 0; i < length; i++) { | ||
+ | Serial.print((char)payload[i]); | ||
+ | } | ||
+ | |||
+ | Serial.println(); | ||
+ | Serial.println(" | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | String UVIndex = " | ||
+ | int voltage = averageAnalogRead(UVsensorIn); | ||
+ | //int uvLevel = averageAnalogRead(UVsensorIn); | ||
+ | |||
+ | //float outputVoltage = 3.3 * uvLevel/ | ||
+ | float outputVoltage = 3.3 * voltage/ | ||
+ | float uvIntensity = mapfloat(outputVoltage, | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.print(voltage); | ||
+ | Serial.print(" | ||
+ | Serial.println(); | ||
+ | | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.print(uvIntensity); | ||
+ | Serial.print(" | ||
+ | Serial.println(); | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | if(voltage< | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | //UVIndex = " | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | }else if (voltage> | ||
+ | { | ||
+ | Serial.print(" | ||
+ | //mqtt | ||
+ | client.publish(" | ||
+ | client.subscribe(" | ||
+ | } | ||
+ | |||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | delay(10000); | ||
+ | |||
+ | |||
+ | |||
+ | // wlan datenübergabe - beginn | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.println(host); | ||
+ | | ||
+ | // Use WiFiClient class to create TCP connections | ||
+ | WiFiClient client; | ||
+ | const int httpPort = 80; | ||
+ | if (!client.connect(host, | ||
+ | Serial.println(" | ||
+ | return; | ||
+ | } | ||
+ | | ||
+ | // uri erstellen | ||
+ | // esp8266.php? | ||
+ | String url = "/ | ||
+ | //url += " | ||
+ | //url += melder; | ||
+ | url += " | ||
+ | url += voltage; | ||
+ | url += "& | ||
+ | url += uvIntensity; | ||
+ | | ||
+ | Serial.print(" | ||
+ | Serial.println(url); | ||
+ | | ||
+ | // senden | ||
+ | client.print(String(" | ||
+ | " | ||
+ | " | ||
+ | Serial.println(" | ||
+ | delay(10); | ||
+ | | ||
+ | // Read all the lines of the reply from server and print them to Serial | ||
+ | while(client.available()){ | ||
+ | String line = client.readStringUntil(' | ||
+ | // | ||
+ | } | ||
+ | | ||
+ | Serial.println(); | ||
+ | Serial.println(" | ||
+ | |||
+ | // wlan datenübergabe - ende | ||
+ | |||
+ | |||
+ | |||
+ | } // void-loop ende | ||
+ | |||
+ | //Takes an average of readings on a given pin | ||
+ | //Returns the average | ||
+ | int averageAnalogRead(int pinToRead) | ||
+ | { | ||
+ | byte numberOfReadings = 8; | ||
+ | unsigned int runningValue = 0; | ||
+ | |||
+ | for(int x = 0 ; x < numberOfReadings ; x++) | ||
+ | runningValue += analogRead(pinToRead); | ||
+ | runningValue /= numberOfReadings; | ||
+ | |||
+ | return(runningValue); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) | ||
+ | { | ||
+ | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | === Quellen === | ||
+ | |||
+ | \\ | ||
+ | 1) [[https:// | ||
+ | |||
+ | 2) [[https:// | ||
+ | |||
+ | 3) [[https:// | ||
+ | \\ |