===== 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?id=arduino_einstieg#treiberinstallation| weitere Infos]]\\ \\ \\ \\ \\ \\ ==== 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, der dann auf Ground angeschlossen wird.\\ Schaltungsbeispiel:\\ {{::esp8266_taster.jpg?400|}} \\ 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,OUTPUT); pinMode(tasterPin,INPUT); Serial.begin(9600); } void loop(){ // IF Schleifen Beginn if (digitalRead(tasterPin)==LOW){ digitalWrite(ledPin, HIGH); Serial.println("Eingang LOW"); } else { digitalWrite(ledPin, LOW); Serial.println("Eingang HIGH"); zaehler++; } Serial.print("Anzahl: "); Serial.println(zaehler); //delay(10000); // wartezeit // reset des zaehlers und ausgabe fue den benutzer //zaehler = 0; //Serial.print("Reset: "); //Serial.println(zaehler); // IF Schleifen Ende delay(1000); // wartezeit } // 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_daten_per_wlan_an_raspi2_senden.ino//\\ //////////////////////////////// // ESP8266 - Firmware 0.1 // Post Values to Webserver //////////////////////////////// // Code by: // https://blog.silvertech.at //////////////////////////////// #include const char* ssid = "hallonetz"; const char* password = "xyz"; const char* host = "192.168.178.28"; //Web Server // SensorID const char* SensorID = "ESPabcde"; //Get One Wire Data const char* TmpWert = "123"; void setup() { //Serial Start Serial.begin(9600); delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); 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("IP address: "); Serial.println(WiFi.localIP()); } void loop() { delay(15000); Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // We now create a URI for the request // esp8266.php?wert1=xa&wert2=yb String url = "/esp8266.php?"; url += "wert1="; url += SensorID; url += "&wert2="; url += TmpWert; Serial.print("Requesting URL: "); Serial.println(url); // This will send the request to the server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); Serial.println("Werte an WebServer uebergeben"); delay(10); // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line = client.readStringUntil('\r'); //Serial.print(line); } Serial.println(); Serial.println("closing connection"); } \\ \\ ==== 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://www.instructables.com/id/Distance-Measurement-Using-HC-SR04-Via-NodeMCU/ // http://thaiopensource.org/%E0%B8%A1%E0%B8%B2%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99-ultrasonic-sensor-%E0%B8%81%E0%B8%B1%E0%B8%9A-nodemcu-dev-kit-%E0%B8%81%E0%B8%B1%E0%B8%99/ // esp8266_ultraschall_4.ino // defines pins numbers #define TRIGGER_PIN 5 #define ECHO_PIN 4 void setup() { Serial.begin (9600); pinMode(TRIGGER_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUILTIN_LED, OUTPUT); } void loop() { //long duration, distance; float duration, distance; digitalWrite(TRIGGER_PIN, LOW); // Added this line delayMicroseconds(2); // Added this line digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(10); // Added this line digitalWrite(TRIGGER_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); distance = (duration/2) / 29.1; Serial.print(distance); Serial.println(" cm"); delay(1000); } \\ \\ Für eine Mittelwertbildung einer bestimmten Anzahl Messwerte kommt folgender Code zum Einsatz:\\ // // http://www.instructables.com/id/Distance-Measurement-Using-HC-SR04-Via-NodeMCU/ // http://thaiopensource.org/%E0%B8%A1%E0%B8%B2%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99-ultrasonic-sensor-%E0%B8%81%E0%B8%B1%E0%B8%9A-nodemcu-dev-kit-%E0%B8%81%E0%B8%B1%E0%B8%99/ // esp8266_ultraschall_5.ino // defines pins numbers #define TRIGGER_PIN 5 #define ECHO_PIN 4 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, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUILTIN_LED, OUTPUT); } void loop() { for (int i=0; i \\ \\ Möchte man die Messwerte per WLAN auf einen Server übertragen, kommt folgendes Script zum Einsatz:\\ \\ esp8266_ultraschall_6.ino\\ // // http://www.instructables.com/id/Distance-Measurement-Using-HC-SR04-Via-NodeMCU/ // http://thaiopensource.org/%E0%B8%A1%E0%B8%B2%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99-ultrasonic-sensor-%E0%B8%81%E0%B8%B1%E0%B8%9A-nodemcu-dev-kit-%E0%B8%81%E0%B8%B1%E0%B8%99/ // https://blog.silvertech.at // // esp8266_ultraschall_6.ino #include // wlan einbinden const char* ssid = "hallonetz"; // wlan ssid eintragen const char* password = "xyz"; // wlan zugangspasswort eintragen const char* host = "192.168.178.28"; //Web Server auf die Daten gespeichert werden // defines pins numbers #define TRIGGER_PIN 5 #define ECHO_PIN 4 const char* SensorID = "ESP8266_abstand"; 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, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUILTIN_LED, OUTPUT); // Kontakt zum wlan aufnehmen Serial.println(); Serial.println(); 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("IP address: "); Serial.println(WiFi.localIP()); } // void setup - ende void loop() { for (int i=0; i \\ \\ ==== 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.\\ {{::ds18b20_widerstand.jpg?200|}} {{::ds18b22_1k_verloetet.jpg?400|}} \\ Folgender Code liest die Temperatur aus und zeigt am SerialMonitor an: // Quelle: // ESP8266 DS18B20 ArduinoIDE Thingspeak IoT Example code // http://vaasa.hacklab.fi // https://vaasa.hacklab.fi/2016/02/06/esp8266-on-nodemcu-board-ds18b20-arduinoide-thingspeak/ // https://github.com/milesburton/Arduino-Temperature-Control-Library // https://gist.github.com/jeje/57091acf138a92c4176a // esp8288_ds18b20_1.ino #include #include #define ONE_WIRE_BUS D4 // Digitaleingang D4 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); 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, 2, 2, temperatureString); Serial.println(temperatureString); delay(1000); } \\ \\ Möchte man nun Abstand und Temperatur erfassen, wird dieses Script benötigt: // // http://www.instructables.com/id/Distance-Measurement-Using-HC-SR04-Via-NodeMCU/ // http://thaiopensource.org/%E0%B8%A1%E0%B8%B2%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99-ultrasonic-sensor-%E0%B8%81%E0%B8%B1%E0%B8%9A-nodemcu-dev-kit-%E0%B8%81%E0%B8%B1%E0%B8%99/ // https://blog.silvertech.at // // esp8266_abstand_temperatur.ino #include // wlan einbinden #include #include #include // wlan einbinden const char* ssid = "xyz"; // wlan ssid eintragen const char* password = "123"; // wlan zugangspasswort eintragen const char* host = "192.168.178.28"; //Web Server auf die Daten gespeichert werden // defines pins numbers #define TRIGGER_PIN 5 #define ECHO_PIN 4 #define ONE_WIRE_BUS D4 // Digitaleingang D4 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); char temperatureString[6]; const char* SensorID = "ESP8266_abstand"; 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, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUILTIN_LED, OUTPUT); DS18B20.begin(); // Kontakt zum wlan aufnehmen Serial.println(); Serial.println(); 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("IP address: "); 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 ==== 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://www.esp8266learning.com/wemos-ml8511-example.php // Arduino: // https://www.14core.com/wiring-the-ml8511-ultra-violet-light-sensor-on-microcontroller/ // http://www.electronics-lab.com/project/arduino-uv-meter-using-uv30a-ultraviolet-sensor/ // // UV-Index-Infos: // http://www.bfs.de/DE/themen/opt/uv/uv-index/einfuehrung/einfuehrung.html;jsessionid=A48D2406906E70E8BE26B42256A2E375.1_cid382 // // UV Index - Belastung - Maßnahme // 1 - 2 niedrig keine Schutzmaßnahmen erforderlich. // // 3 - 5 mittel Schutz erforderlich: // während der Mittagsstunden Schatten aufsuchen // entsprechende Kleidung, Hut und Sonnenbrille tragen // für unbedeckte Haut Sonnenschutzmittel mit ausreichendem Lichtschutzfaktor verwenden. // // 6 - 7 hoch Schutz erforderlich: // 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 extrem // // #include // wlan einbinden const char* ssid = "ssd deines wlans"; // wlan ssid eintragen const char* password = "StrengGeheimPw"; // wlan zugangspasswort eintragen const char* host = "192.168.178.28"; //Web Server auf die Daten gespeichert werden const char* melder = "ESP8266_uvindex"; const char* SensorID = "ESP8266_uvindex"; 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, INPUT); Serial.begin(9600); //open serial port, set the baud rate to 9600 bps // Kontakt zum wlan aufnehmen Serial.println(); Serial.println(); 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("IP address: "); Serial.println(WiFi.localIP()); } void loop() { String UVIndex = "0"; int voltage = averageAnalogRead(UVsensorIn); //int uvLevel = averageAnalogRead(UVsensorIn); //float outputVoltage = 3.3 * uvLevel/1024; float outputVoltage = 3.3 * voltage/1024; float uvIntensity = mapfloat(outputVoltage, 0.99, 2.9, 0.0, 15.0); Serial.print(" Analoger Wert: "); Serial.print(voltage); Serial.print(" mV"); Serial.println(); //Zeilenumbruch //Serial.print(" Analogsignal: "); //Serial.print(uvLevel); //Serial.println(); //Zeilenumbruch Serial.print(" UV Intensity: "); Serial.print(uvIntensity); Serial.print(" mW/cm^2"); Serial.println(); //Zeilenumbruch if(voltage<50) { Serial.print(" UVIndex: 0"); //UVIndex = "0"; }else if (voltage>50 && voltage<=227) { Serial.print(" UVIndex: 0");//UVIndex = "0"; }else if (voltage>227 && voltage<=318) { Serial.print(" UVIndex: 1");//UVIndex = "1"; } else if (voltage>318 && voltage<=408) { Serial.print(" UVIndex: 2");//UVIndex = "2"; }else if (voltage>408 && voltage<=503) { Serial.print(" UVIndex: 3");//UVIndex = "3"; } else if (voltage>503 && voltage<=606) { Serial.print(" UVIndex: 4");//UVIndex = "4"; }else if (voltage>606 && voltage<=696) { Serial.print(" UVIndex: 5");//UVIndex = "5"; }else if (voltage>696 && voltage<=795) { Serial.print(" UVIndex: 6");//UVIndex = "6"; }else if (voltage>795 && voltage<=881) { Serial.print(" UVIndex: 7");//UVIndex = "7"; } else if (voltage>881 && voltage<=976) { Serial.print(" UVIndex: 8");//UVIndex = "8"; } else if (voltage>976 && voltage<=1079) { Serial.print("UVIndex: 9");//UVIndex = "9"; } else if (voltage>1079 && voltage<=1170) { Serial.print(" UVIndex: 10");//UVIndex = "10"; }else if (voltage>1170) { Serial.print("UVIndex: 11");//UVIndex = "11"; } Serial.println(); //Zeilenumbruch Serial.println(); //Zeilenumbruch delay(10000); // wlan datenübergabe - beginn Serial.print("Verbindungsaufbau ... "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // uri erstellen // esp8266.php?wert1=xa&wert2=yb String url = "/uvindexwerteintragen.php?"; //url += "melder="; //url += melder; url += "wert1="; url += voltage; url += "&wert2="; url += uvIntensity; Serial.print("Requesting URL: "); Serial.println(url); // senden client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); Serial.println("Werte an WebServer uebergeben"); delay(10); // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line = client.readStringUntil('\r'); //Serial.print(line); } Serial.println(); Serial.println("Verbindung wird beendet ..."); // 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://www.esp8266learning.com/wemos-ml8511-example.php // Arduino: // https://www.14core.com/wiring-the-ml8511-ultra-violet-light-sensor-on-microcontroller/ // http://www.electronics-lab.com/project/arduino-uv-meter-using-uv30a-ultraviolet-sensor/ // // UV-Index-Infos: // http://www.bfs.de/DE/themen/opt/uv/uv-index/einfuehrung/einfuehrung.html;jsessionid=A48D2406906E70E8BE26B42256A2E375.1_cid382 // // UV Index - Belastung - Maßnahme // 1 - 2 niedrig keine Schutzmaßnahmen erforderlich. // // 3 - 5 mittel Schutz erforderlich: // während der Mittagsstunden Schatten aufsuchen // entsprechende Kleidung, Hut und Sonnenbrille tragen // für unbedeckte Haut Sonnenschutzmittel mit ausreichendem Lichtschutzfaktor verwenden. // // 6 - 7 hoch Schutz erforderlich: // 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 extrem // // #include // wlan einbinden #include // mqtt const char* ssid = "ssd deines wlans"; // wlan ssid eintragen const char* password = "strengGeheimPW"; // wlan zugangspasswort eintragen const char* host = "192.168.178.28"; //Web Server auf die Daten gespeichert werden const char* melder = "ESP8266_uvindex"; const char* SensorID = "ESP8266_uvindex"; 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 = "192.168.178.30"; const int mqttPort = 1883; const char* mqttUser = "bnnane"; const char* mqttPassword = "passwortgeheim"; WiFiClient espClient; PubSubClient client(espClient); int UVsensorIn = A0; //Output from the sensor void setup() { pinMode(UVsensorIn, INPUT); Serial.begin(9600); //open serial port, set the baud rate to 9600 bps // Kontakt zum wlan aufnehmen Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); //mqtt //client.setServer(mqttServer, mqttPort); //client.setCallback(callback); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } /* Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); */ client.setServer(mqttServer, mqttPort); //client.setCallback(callback); while (!client.connected()) { Serial.println("Connecting to MQTT..."); //if (client.connect("ESP8266Client", mqttUser, mqttPassword )) { if (client.connect("ESP8266Client" )) { Serial.println("connected"); } else { Serial.print("failed with state "); Serial.print(client.state()); delay(2000); } } client.publish("datenempfang", " - MQTT-Verbindung hergestellt - "); //Topic name client.subscribe("datenempfang"); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); Serial.print("Message:"); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); Serial.println("-----------------------"); } void loop() { String UVIndex = "0"; int voltage = averageAnalogRead(UVsensorIn); //int uvLevel = averageAnalogRead(UVsensorIn); //float outputVoltage = 3.3 * uvLevel/1024; float outputVoltage = 3.3 * voltage/1024; float uvIntensity = mapfloat(outputVoltage, 0.99, 2.9, 0.0, 15.0); Serial.print(" Analoger Wert: "); Serial.print(voltage); Serial.print(" mV"); Serial.println(); //Zeilenumbruch //Serial.print(" Analogsignal: "); //Serial.print(uvLevel); //Serial.println(); //Zeilenumbruch Serial.print(" UV Intensity: "); Serial.print(uvIntensity); Serial.print(" mW/cm^2"); Serial.println(); //Zeilenumbruch if(voltage<50) { Serial.print(" UVIndex: 0"); //mqtt client.publish("datenempfang", "0"); //Topic name client.subscribe("datenempfang"); //UVIndex = "0"; } else if (voltage>50 && voltage<=227) { Serial.print(" UVIndex: 0");//UVIndex = "0"; //mqtt client.publish("datenempfang", "0"); //Topic name client.subscribe("datenempfang"); } else if (voltage>227 && voltage<=318) { Serial.print(" UVIndex: 1");//UVIndex = "1"; //mqtt client.publish("datenempfang", "1"); //Topic name client.subscribe("datenempfang"); } else if (voltage>318 && voltage<=408) { Serial.print(" UVIndex: 2");//UVIndex = "2"; //mqtt client.publish("datenempfang", "2"); //Topic name client.subscribe("datenempfang"); } else if (voltage>408 && voltage<=503) { Serial.print(" UVIndex: 3");//UVIndex = "3"; //mqtt client.publish("datenempfang", "3"); //Topic name client.subscribe("datenempfang"); } else if (voltage>503 && voltage<=606) { Serial.print(" UVIndex: 4");//UVIndex = "4"; //mqtt client.publish("datenempfang", "4"); //Topic name client.subscribe("datenempfang"); }else if (voltage>606 && voltage<=696) { Serial.print(" UVIndex: 5");//UVIndex = "5"; //mqtt client.publish("datenempfang", "5"); //Topic name client.subscribe("datenempfang"); }else if (voltage>696 && voltage<=795) { Serial.print(" UVIndex: 6");//UVIndex = "6"; //mqtt client.publish("datenempfang", "6"); //Topic name client.subscribe("datenempfang"); }else if (voltage>795 && voltage<=881) { Serial.print(" UVIndex: 7");//UVIndex = "7"; //mqtt client.publish("datenempfang", "7"); //Topic name client.subscribe("datenempfang"); } else if (voltage>881 && voltage<=976) { Serial.print(" UVIndex: 8");//UVIndex = "8"; //mqtt client.publish("datenempfang", "8"); //Topic name client.subscribe("datenempfang"); } else if (voltage>976 && voltage<=1079) { Serial.print("UVIndex: 9");//UVIndex = "9"; //mqtt client.publish("datenempfang", "9"); //Topic name client.subscribe("datenempfang"); } else if (voltage>1079 && voltage<=1170) { Serial.print(" UVIndex: 10");//UVIndex = "10"; //mqtt client.publish("datenempfang", "10"); //Topic name client.subscribe("datenempfang"); }else if (voltage>1170) { Serial.print("UVIndex: 11");//UVIndex = "11"; //mqtt client.publish("datenempfang", "11"); //Topic name client.subscribe("datenempfang"); } Serial.println(); //Zeilenumbruch Serial.println(); //Zeilenumbruch delay(10000); // wlan datenübergabe - beginn Serial.print("Verbindungsaufbau ... "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // uri erstellen // esp8266.php?wert1=xa&wert2=yb String url = "/uvindexwerteintragen.php?"; //url += "melder="; //url += melder; url += "wert1="; url += voltage; url += "&wert2="; url += uvIntensity; Serial.print("Requesting URL: "); Serial.println(url); // senden client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); Serial.println("Werte an WebServer uebergeben"); delay(10); // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line = client.readStringUntil('\r'); //Serial.print(line); } Serial.println(); Serial.println("Verbindung wird beendet ..."); // 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://www.google.de/search?client=firefox-b&dcr=0&biw=1892&bih=935&tbm=isch&sa=1&ei=dTzQWpPZG6TgkgXU0JWQBw&q=pinbelegung+nodemcu+esp8266&oq=pinbelegung+nodemcu+esp8266&gs_l=psy-ab.3...911218.923274.0.923906.29.28.1.0.0.0.160.2154.26j1.27.0....0...1c.1.64.psy-ab..1.5.404...0i8i13i30k1j0i13k1j0i8i30k1j0i24k1.0.fKew21N189E#imgrc=8EwK33hzjrkNWM:|NodeMCU Pinbelegung]] 2) [[https://www.google.de/imgres?imgurl=https%3A%2F%2Flh3.googleusercontent.com%2F-MmsotOmO16A%2FVh0LJzB7EuI%2FAAAAAAAAVvg%2FQNYXqqDuqL8%2Fs640-Ic42%2Fesp-sr04.png&imgrefurl=http%3A%2F%2Fthaiopensource.org%2F%25E0%25B8%25A1%25E0%25B8%25B2%25E0%25B9%2580%25E0%25B8%25A5%25E0%25B9%2588%25E0%25B8%2599-ultrasonic-sensor-%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%259A-nodemcu-dev-kit-%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2599%2F&docid=BbLc1eXzKT4UqM&tbnid=fkyq_peuw0SBWM%3A&vet=10ahUKEwjT55z0vrbaAhUksKQKHVRoBXIQMwhHKA0wDQ..i&w=640&h=501&client=firefox-b&bih=935&biw=1892&q=hc-sr04%20nodemcu&ved=0ahUKEwjT55z0vrbaAhUksKQKHVRoBXIQMwhHKA0wDQ&iact=mrc&uact=8|Verdrahtung]] 3) [[https://vaasa.hacklab.fi/2016/02/06/esp8266-on-nodemcu-board-ds18b20-arduinoide-thingspeak/|Temperaturmessung]] \\