Skip to content

Instantly share code, notes, and snippets.

@Kaziuz
Last active June 19, 2019 07:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kaziuz/d00f4e2e29e292fd1009cc028dc4aecd to your computer and use it in GitHub Desktop.
Save Kaziuz/d00f4e2e29e292fd1009cc028dc4aecd to your computer and use it in GitHub Desktop.
code module sensor grow
/*
Se intenta manipular relays, mosttar datos en pantalla
y enviar datos a una base de datos influxdb
*/
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <WebSocketsServer.h>
#include <Hash.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//#include <ESP8266HTTPClient.h>
#include "DHT.h"
#define DHTPIN D6 // Pin que va conectado al sensor
#define DHTTYPE DHT11 // Tipo de sensor que estamos usando
#define HTTP_TIMEOUT 1000 * 60 // cada minuto
DHT dht(DHTPIN, DHTTYPE);
// If using software SPI (the default case):
#define OLED_MOSI D7 //D1
#define OLED_CLK D5 //D0
#define OLED_DC D4
#define OLED_CS D8
#define OLED_RESET D0
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
static const char ssid[] = "------";
static const char password[] = "-------";
MDNSResponder mdns;
static void writeLED(bool);
ESP8266WiFiMulti WiFiMulti;
ESP8266WebServer server(80);
WebSocketsServer webSocket = WebSocketsServer(81);
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0">
<title>ESP8266 WebSocket Demo</title>
<style>
"body { background-color: #808080; font-family: Arial, Helvetica, Sans-Serif; Color: #000000; }"
</style>
<script>
var websock;
var webSockInflux; // se tiene que mandar los datos por un websocket
function start() {
websock = new WebSocket('ws://' + window.location.hostname + ':81/');
websock.onopen = function(evt) { console.log('websock open'); };
websock.onclose = function(evt) { console.log('websock close'); };
websock.onerror = function(evt) { console.log(evt); };
websock.onmessage = function(evt) {
console.log(evt);
var e = document.getElementById('ledstatus');
var f = document.getElementById('ledstatus2');
if (evt.data === 'ledon') {
e.style.color = 'red';
}
else if (evt.data === 'ledoff') {
e.style.color = 'black';
}
else if (evt.data === 'ledon1') {
f.style.color = 'red';
}
else if (evt.data === 'ledoff1') {
f.style.color = 'black';
}
else {
console.log('unknown event');
}
};
}
function buttonclick(e) {
websock.send(e.id);
}
</script>
</head>
<body onload="javascript:start();">
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMTEhUSEBISFhUXFhcWFxcXFhAXGxoYFx0XFxUVGBgZHigiGRolGxUVIjEhJyktLi4uGB8zOTMtNyguLisBCgoKDg0NFQ8QFysdHR0rKy0tLS0tKy0tLS0tKy0tLSstLS0tLi0rLS0tLSstLTctLS0tNy03LS0tNzc3Ny0tLf/AABEIANAA8gMBIgACEQEDEQH/xAAcAAEAAgMBAQEAAAAAAAAAAAAABQYBAwQCBwj/xABKEAACAQIDAggLBQUGBgMBAAABAgMAEQQSIQUxEyIyQVFxcrEGBxczVGGBkZOh0hQjNUKzFVJigrJzkqKjwcIkNENkg/BTdNEW/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAGBEBAQEBAQAAAAAAAAAAAAAAABEBQTH/2gAMAwEAAhEDEQA/AL/t7bWInxJwGzSqOgBxGIYZhCG5KKNzSEa/+kjyni3wja4p8TiX53lmlv7ApFh6qeKlM2DbEHl4ieaZz6y7KB1DL8zVzqin+TLZno7fFxH108mWzPR2+LiPrq4Uoin+TLZno7fFxH108mWzPR2+LiPrq4UoKf5Mtmejt8XEfXTyZbM9Hb4uI+urhSgp/ky2Z6O3xcR9dPJlsz0dvi4j66uFKCn+TLZno7fFxH108mWzPR2+LiPrq4UoKf5Mtmejt8XEfXTyZbM9Hb4uI+urhSgp/ky2Z6O3xcR9dPJlsz0dvi4j66uFKCn+TLZno7fFxH108mWzPR2+LiPrq4UoKf5Mtmejt8XEfXTyZbM9Hb4uI+urhSgp/ky2Z6O3xcR9dPJlsz0dvi4j66uFKCn+TLZno7fFxH108mWzPR2+LiPrq4UoKf5Mtmejt8XEfXTyZbM9Hb4uI+urhSgp/ky2Z6O3xcR9dPJlsz0dvi4j66uFKCnHxZ7PHm45Y25mSacMPWCWNcT4vFbKdftMz4nAswThZNZYCdFMjfnT1n5aA36o/b+CWbDTROOK8bqfcbHrBsfZRXcGvqKV8T2R4wMRHBDGNQkaKCdTxVA119VKlWL74pPwuDrl/UerjVO8Un4XB1y/qPVxqslKUoFKVxzbRQEqt5HH5UGYj1MeSn8xFB2UqPMc78phEvQlmc9bMMq9BAB9TV6Gyk3h57/2+IPyLEfKorupXAcA/NiZwOi2GPzaMn516GHmG6YHtxqf6StB20rgWPEgayQMea0UifPhWrLSYkbo4G6SZZF+XBN31R3Uri+0TA6w37Min+oLWBj358NOPXfDH5CQmiO6lcJ2mByo5x/4pW/oBp+1Y+fOO1HMv9Sig7qVxftfD3sZ4gegugPuJrfBi435Do1t+VlPdQbqUpQKUpQKUpQKUpQKUpQK04zzb9hu41urTjPNv2G7jQfmbC8heyO6s1jC8heyO6s1lt9t8Un4XB1y/qPVxqneKT8Lg65f1Hq41phhmA1OlRB8IImYpC0bsN5MiIo9p4x61Uj11s8IQTEBdwDJGGyBC1iwAADgqbtlBvzE1ztM40Lzm43SYYye/glA9lRXWmDMmsspcH8qXRPkcze029VdsUSqAqgKBuAAAHUBVcaKP/qLhCQdS+Ekitb1uTWVkjN8pwwBtbg8ZNGT6rKot76EWalQKIwAyJiSf4MSsnzmevYaUXu+MHWmDYD4a3NCJulQZx0gt94QOfPg8Vc+0Mo+VejtcjQy4YnmDF4j1m+ahE1SomLajHcMOx5xHiA1vegreuPf0eW3SDhz3SXoR30ri/aS88cw/wDFK3zUEVj9rw2uzhe2GT+oCqjurFq0RY+JtFljJ9Tqe41y7R2kVIigAeZhcD8qKdOEkI3JvsN7EWHOQHnau0ihWKFc87jirrZRuMjkbkHvJ0HqoGKkk+0RyO8ipMqxFmsGcvNGBKE1GXKGsdR5v1CvouzNnCIEli8jWMkjWzMRu7Ki+ijQe8n51BeabBqkUgyPGQQ4a6iSQSS3uci3hPE9dhuqNYuCeCYBBXFYsW5hItj1jLb5UfwXYn/nMVb1MAflYfKrEKzSJVdPg7KORjJx2izH5MK9NsTEW0xbX6SJ/naYCrBSkKr0eyMWDf7UpHNdZzb/ADbH3Vhtn48HTFREdBQjvzVYqUhVWmxWMglgEzxSLLKIrKLWurNmPFH7lt+9hoatNV3bvHxmEjsLWkkOv5kaF0/wpL7qsQoFKUqoVpxnm37DdxrdWnGebfsN3Gg/M2F5C9kd1ZrGF5C9kd1ZrLb7b4pPwuDrl/UerjVO8Un4XB1y/qPVxrTDm2jAXidRvKnL6mGqn2ECveEnDorjcyhh7QDW6uHZRsHj/ckYDstaRAOpXA9lFd1q8sgO8A9deMQzAXRQx6C2X52NcWL2wseHbEMr5UuGWy5gQ2Rhvtob63tYXvaojofZsJNzDET0lEv77Vr/AGTDayplH8DOn9JFesNjizBHjdCVLLmyG4BAbkk2IzLoenrt2UVw/s0DkyTD/wAsp+TEin2J+bETe0QHvS9d1KCNkwMhvx4mv+/CG99mF65zsjQDgcG3TaMx+62apqlCoX7C9yeBA6ODxWIHyyqBXng3G6PGDqmgf9SQ91TlKQqAlW9+EOJItqGw8UgPw4yTWvwSMaQGViimaaUm4EdyrtFGoU7iI40FukHpqx2qo7P2L9ow6ESFLSYm+ga6vNIxGu7m/wDw2FBZ58bGhtJIi9plX1c56apGwEU4qDLbzMR0tbKftDA+0s59dWLaGxs7u3BQSZo1jBl5S2zbuI1wc1+aq94Esh4Nk/NJGxNt4+yHKerLb3Gir7SlKrJStGOxHBozhS2UXsN5rGAxPCIHKlb30PqJFx0g2uD0EbqDopSuXaszJDI8YLOqMVABN2ANhYanWgh4hn2k5vcRwovZcZm+aYj/AA1YqrPgdd3xMz2zNKEbX80QyE+0ZfYBVmqLpSlKqFacZ5t+w3ca3Vpxnm37DdxoPzNheQvZHdWaxheQvZHdWay2+2+KT8Lg65f1Hq41TvFJ+Fwdcv6j1ca0wVwcnEeqSP8AxRnvIl9yV31wbW0CSf8AxyK38rXjcn1BHZv5aK7zUJtPZQxEc8cc+VZbq9gr5XAC3HRuW6+rTKSTU1UFjNlrEDkZxw0kKNqNE4QsUFgDY53W5JPGGugtB24nSaAk80iX6WYKw+UbVI1DYXAL9/CoyIHR0C2GQlVN0FrCzqW3WuT010JtApxcQCpH51VijfxXF8nU3PoCd9BI0qKxm2BlPAK7tpYiOYqASAzXAs1hc2BubWGprs2fOzxhnUqTfQ3G4kBrHUXABsdRex1qo6aUpQKUJoDQKh/BM3wqdcl+vhHv871MGobwT8ww5hiMWo6lxM6j5AVFTBr5x4u2W8OQgjgMKpsb8b7PIcpPStmHXevoG0fNSW/cbuNfOvBxYjtGI4cqY7aGPiqxXDx3YrvtZltf+L13aY+m0pSqhSlKBWvEzBEZ23KCx6gLnurZUT4VOBhZQdzgRfFIj/30GjwMiK4VC98zEl7i3GHEY+0rf21O1x7IjywxgixyAnrOrfMmuyilKUohWnGebfsN3Gt1acZ5t+w3caD8zYXkL2R3VmsYXkL2R3Vmstvtvik/C4OuX9R6uNU7xSfhcHXL+o9XGtMFasVAHRkbkspU9TCx+RrbSg5dmTF4kZuVazdscVx/eBrXtqBnhYILspWRBe13iZZEW/MCyAe2vGCkCO8RIF2MiDddZOM1uk8IX946a68XiBGjO17KCTYXOnMBznoFRUJgdqgtK8SSS8I4KKmS5RUjBYl2VV4xYWJBuD0Gu9NrqdFSQvqGjC8ZSLXza2G8WN+MDcXrhh2TOjcLC8Kuy/eRujMmYku2RlYEcZnOt75j6raoMJiYXlndsOpdbyv96wtHfIVj4uXKhIPGN9DpzhM4PaUUvIcE8YEaggrYOCp1BBZQei9dEEyuodGVlYXDKQQR0gjfVW2CvBxxyzI5MySNIUjdzwkj53BCZiLiwHMMgF91+PYtwkGHbhUk4OPlcJEqyszviTfQPJfcgzCxB5JJoReCa4J9tYdR56MnmVWDsT+6qLcsfUBUUgEuNlhlu8SqGRGsVDjI0hK/mW0sWXNexVrc1Sc6rw8KAAWWWUWAGq5I+6ZqCIxkeJxiFMrQxNYnMCpsDfKwuHa9hcDg7XNnap7ZmC4GMRgkgXPPpc3sLkkAX0BJ6666UA1D+DK2SUf9ziCP5pGf/camDUNsVxHHO0jABZ8QzHcAudmHuW3uoPPhPjmVFgh1mnJjT+FbXklOhsFW+8EXK1WfBfDxS5mwuJKm5gRsraxQqkaBDe1yI84JzXVgeY21baxEkqzMFPCTQStrf7rCRgkjTc0jWQa87sDYVu8GMAJo5pMOVuJDwer5HjzM6LfcBdiyvHYKWuBqykqaOx8Z+XFn+a7e/QVmTA7RA4mJi9q7/ehtXZsba+f7uS6uCV41gcwFyjAaCQDWw0ZeMtxe0zRKrZh2koFpYGPQR/qFXT/29YM+0wB93hyeeyn/AFmFqstKQqtR4zaV+NhoLdoD/ea0bQjxuICxS4eNEzqXdZcxsDuyFRbmN8x3btdLZShWAKzSlVClKUCtOM82/YbuNbq04zzb9hu40H5mwvIXsjurNYwvIXsjurNZbfbfFJ+Fwdcv6j1cap3ik/C4OuX9R6uNaYKUpQQm341aSESFgn3hFkWTj8UAEMjADKZNbdOtQ+MwsX3UcMuHGeVBaMGFuITKSeCcbzGBydL3qybW0CSfuSK38pvG56grk+ytW341Ma5lVvvoBYgEWaWNTv8AUTUVz8BiF3GS2tgksUnVczRg/wCKuLa2PmAETg/eNaxhlBCKMz3aNnBBCldALZxoeebOyYfypk/sy0f9BFR32JjiHKzSgRRKq3KObyFmkUl1JItHCd/TQeNj7WCxRJZHIRF4k0JJsouSHKG9SMmOjZcskcljvDROy+0qCvzrRgYpjDHcwOvBpZSjrzC92zNf3V4ODtr9kUf2EuU2G7mj76DswuIw5YmNoc5ABylAxC6AHnsL7uahF8SP4IW/zGS36JqOmRLAOcUg51kjEy9JzOVcD+9UbsyJGkmMc2GJzhFCM8bEKBzxyafeNNpY6689BcqVB8FiE3cL6gkkMvVczKp/xVn9ozLyxf1GDELoN5MicIlCJuqPNic7TQsWWKOeWSZgDrxgyRrzkm67vzEAXysKsEG28xy5Y3bnWKeJyOgWfIb1Xtn4N5sTNA8bRxic4iQMUJYOF4JbozC1xIbX9YtYXDXNjYosLinxByT4mBnC5T93EUdMNDcaCy81+U7HnFTXgNEogJQAAlTpz5kR83rvmrZ4XbLWTC4k3YM0DiynRiqsUFjuOY6EWO7WtfgM18OSBYMY3UdAeCBwPZmt7KLx2bb2Rwn3kdhKABqWCyKDmEbldRY6q44yNqN7K3nY21c33clw4JXjBQ2YC5RwNBIBrpxWHGXQ2EzUPtrZOf72KwlAAIJIEiqbhGI1Ug6q41U66gkEiYpUZsLaHCoQ18ymxuADzjjAaBgyuhA0zI1tCKk6qFKUoFKUoFKUoFacZ5t+w3ca3Vpxnm37DdxoPzNheQvZHdWaxheQvZHdWay2+2+KT8Lg65f1Hq41TvFJ+Fwdcv6j1ca0wUpSg1YmEOjI25lKnqIse+onGSl8KjtoVkgaT1GKaMze7I/uqbqOw8QzzwsAVaz2I0yyghgem7pIT2qipEVBY+bIcWBymjRk5rs4aJVB6cyDqzjprZLszEBo+CxbhEYZldI2zJzqWsGJtcA3vrc3IqRnwSOys6gshupPNuPeqnrUHeBQbYI8qhRuAA92le6VrnmVFLuyqqi5ZiAABvJJ3CqhiJQis7blBY9Q1PdXHsvCf8PGsqgsVDOCLjO3Gc2P8TN7687ZcPCEUgiYrGLEG6uRnI6fu859lSQqK4f2RDuWMJ/Zlot+p1jIodnsORPMvqJRx73Un513UqiPlw0p0ZoZFvueNh88xF/5a4PBGIAYiyopGJkXKgAUZQoCjQaeznqfqG8G0scV/wDakPvWM/61B07e8w4F+NlTS1xwjKhYX0uM19eiovxfSZsDEbflRfUeDRIiR6iYzXb4UzhcOwJsZCI1IvcFjq4tqcihn05kNR3i9lAwkce5goLLpoWALAW0srEr7jqCpI4tFKV5drC55qqIHwY1edubPIP8/Etp7HWrBUB4GqeBzE3LcGx62iiZv8RY+2p+pi6UpSqhSlKBSlKBWnGebfsN3Gt1acZ5t+w3caD8zYXkL2R3VmsYXkL2R3Vmstvtvik/C4OuX9R6uNU7xSfhcHXL+o9XGtMFKUoFcGL4s0L/AL2eI/zDhAT1cEQO366760YzDiRSpJGoII3hlIZWHrBAOunTQb6VwB8Qu9In6SGZCepCGA/v14h2uCCWimUBmXkZ9UJVvNlrC6nfaoqSqN8Ih/w7jXUoNCQdXUXBG467668PjY35Do3SAwJHqI5qjfCua2HZVPHcqE0Jscy8Yj90aE+7eRQe8NAvCqkYtHh1ygan7xgABc63WM/5vqqWrRg8KI1Crc7ySd5JN2Y+skk+2t9VCo3C7XV8RLhwkgaIKWYrxTmCsLG/Q49zdBrdjcSRZIwDI26+5RuLt/COjnNhpvGzBYURrYEk72Y72Y72b19WgFgAAAKiuioXwfPHxQ/7hj71Qf7amqrEePEC46TS6zcUHndlTIOolhQxz7VJxWNWAebi5XrY2Ln2LZQRqGepDbeCMbDFQ6FR94oG9RoGsN5UbwNSumpVLePA/AZEZ2uWYkEneSCc7H1l736coNWKg5sBi1lQOvtFwbHouN/MQdxBBGhrxtibJh5nH5YpG9yk/wClQzIcJMMoYwyHQC5sdSYwOneydIzpzRipDb8gbCyZSCHTKpBBB4SyqQeg5hrQZ8HYwsNgNzuv9wmMfJBUpXFsfzQP7xdh1MzMPka7aoUpSiFKUoFKUoFacZ5t+w3ca3Vpxnm37DdxoPzNheQvZHdWaxheQvZHdWay2+2+KT8Lg65f1Hq41TvFJ+Fwdcv6j1ca0wUpSgUpSgVwvg3Us0UlsxvlZQy3tqRYhtTryumu6lBWv/5++IlxGIaMo/BsyBb6xAgMWO4WsSPVvtodeJ2aPs0k5MiNkaQKGNkQZXWMK11GiJew1N+awE1t0/csp3OUjO7dKyxn5Oa97XgzwSxj80bqObepAqLWDHONzxuOhlZT/eUkdP5a0YnajxgcJA+Y3ChGVwzWJCjc24E3y2FjXZHjFMQmuAhQPfmCkZr9Vq0YGFmbhpBZiLIp/Im+x/iawLdQGuW5Dn2fi4V5cqiVzds4aNieZVSSxyjmHt3kky9eXQEWIuDvBqAiwkURdWWWLjsytHwyplOoJ4Pi6XPKHTQWGvn+PjeTaEsK8hXjmJJOszIiRC3OqqruQd4VtNBUnitsypiI4cPMkyyWHHCMQSJSbGPLoODF7gm199Smz9lMuIlxEhW75bKpJAIUIXJIGtlt6rnpoeJXDQhFVF3KAo6hoK2UpVRoxuEWVGjkF1YdJBHOGBGoYEAgjUEAiqrippIrYeXX72JweKMyrKjtIo3WNuMo5LG9sri1xrnxeBiltwsaPlNxnVWsbFbi40NiR1E1FeNkx5YIlO8RoD12F666ClVClKUClKUClKUCtOM82/YbuNbq04zzb9hu40H5mwvIXsjurNYwvIXsjurNZbfbfFJ+Fwdcv6j1cap3ik/C4OuX9R6uNaYKUpQKUpQKUpQcG3R9yzXsEaOQ9mN1kb5Ka7qMtxY7qjo8JMgCRSJkGg4RGZlHMLhxmA5r69JO+orjgUiUYQ2yp98NRrHm+7QjeMr39ka77kCeFR/7KFtWbhL5uF0zZrWuNLWtplta3TXrC4tg3BTAB7cUi+VwN5W+49Knd0ka0CXEsZRFHbihWkY62UkhVUc7HK2vMBz3Fd1R2OGSWKUaZjwT+tWBKH1kOAB/aNUjVR4ES3zWF+mwv7690pQKUpQKUpQKUpQKUpQKUpQKUpQK04zzb9hu41urTjPNv2G7jQfmbC8heyO6s1jC8heyO6s1lt9t8Un4XB1y/qPVxqneKT8Lg65f1Hq41pgpSlApSlApSlApSlArg22LRF+eMiUb7/dkMbW6VDDqJrvrDC9BG41xJJHEuuVhK9vyqt8ntZsthzgN0VJ1pwuESMZY0VRe9lAAud50rdQKUrVib5Wy8qxtu320+dBtpVcmTHGOwNnMguRweiCC+l7/APWAHtPNXdAZuGXPwmXIt7cDkzWOfNfjXva1tPnUWJWlVxftn2Y5s/D3i5PAcm6cJlvpe2a9+fdzVvZcTwsJUuIwicJfgrlrtmzDqC3sdL3F6CcpUARiyMQAXBJHBMeBA1Zr5QL7ly6tv6L3r1iocWOCCSZrXMjWQZuOmVdf4C+otfLfTdQTtKg8T9p/4nJwmbJJwPmMmbKOCy342a9+Vp8q79k5+DHC581zfPkvvNuTputQdtKrhTHBb5rk4aewAiBE/wB0YbnnPnQLcWw11rGN+18AnBcNwl5M3/LX5L8HmubZM+S9taEWSlQ8fD/aXzcJwVhktwWTkre/5r5s/wAq8YfEYjg8MXjlzaCdfuL3yEFtGtlz2Ohv6qCbrTjPNv2G7jUPtT7ZlJg5Qlcgfd6x8G2Ua8+e1vXa+l6lsTfgmvvyHuNB+aMLyF7I7qzWMLyF7I7qzUafa/FS4XBthzy8PPNC46CHZr9RzfKrnVN27sbE4fEtj9nKrs4AxGHJyiULoroeaQD3+8HEXjJwY0xIxGGk545YZgw/ug3FaZXOlVDymbM9JPwsT9FPKZsz0k/CxP0URb6VUPKZsz0k/CxP0U8pmzPST8LE/RQW+lVDymbM9JPwsT9FPKZsz0k/CxP0UFvpVQ8pmzPST8LE/RTymbM9JPwsT9FBb6VUPKZsz0k/CxP0U8pmzPST8LE/RQW+lVDymbM9JPwsT9FPKZsz0k/CxP0UFvpVQ8pmzPST8LE/RTymbM9JPwsT9FBb6VUPKZsz0k/CxP0U8pmzPST8LE/RQW+lVDymbM9JPwsT9FPKZsz0k/CxP0UFvpVQ8pmzPST8LE/RTymbM9JPwsT9FBb6VUPKZsz0k/CxP0U8pmzPST8LE/RQW+lVDymbM9JPwsT9FPKZsz0k/CxP0UFvpVQ8pmzPST8LE/RTymbM9JPwsT9FBb64NvYxYcNNK5sqRux9gNh1k6e2q83jM2d+SZ3bmVYcQST0AFRrXDLBidrOonhfDYBWDmOTSXEFdVDL+SO/N37wVTdkeAOJkgikAFnjRxe+5lBHN66V9uVbCw3ClSLX/9k=" width="140px"/>
<h4>Automatic grow garden</h4>
<div id="ledstatus"><b>RELAY 1</b></div>
<button id="ledon" type="button" onclick="buttonclick(this);">On</button>
<button id="ledoff" type="button" onclick="buttonclick(this);">Off</button>
<br />
<br />
<div id="ledstatus2"><b>Relay 2</b></div>
<button id="ledon1" type="button" onclick="buttonclick(this);">On</button>
<button id="ledoff1" type="button" onclick="buttonclick(this);">Off</button>
</body>
</html>
)rawliteral";
// GPIO#0 is for Adafruit ESP8266 HUZZAH board. Your board LED might be on 13.
const int LEDPIN = D1;
const int LEDPIN1 = D3;
// Current LED status
bool LEDStatus;
bool LEDStatus1;
// Commands sent through Web Socket
const char LEDON[] = "ledon";
const char LEDOFF[] = "ledoff";
// Commands sent through Web Socket
const char LEDON1[] = "ledon1";
const char LEDOFF1[] = "ledoff1";
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
Serial.printf("webSocketEvent(%d, %d, ...)\r\n", num, type);
switch(type) {
case WStype_DISCONNECTED:
Serial.printf("[%u] Disconnected!\r\n", num);
break;
case WStype_CONNECTED:
{
IPAddress ip = webSocket.remoteIP(num);
Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\r\n", num, ip[0], ip[1], ip[2], ip[3], payload);
// Send the current LED status
if (LEDStatus) {
webSocket.sendTXT(num, LEDON, strlen(LEDON));
}
else {
webSocket.sendTXT(num, LEDOFF, strlen(LEDOFF));
}
// Send the current LED status
if (LEDStatus1) {
webSocket.sendTXT(num, LEDON1, strlen(LEDON1));
}
else {
webSocket.sendTXT(num, LEDOFF1, strlen(LEDOFF1));
}
}
break;
case WStype_TEXT:
Serial.printf("[%u] get Text: %s\r\n", num, payload);
if (strcmp(LEDON, (const char *)payload) == 0) {
writeLED(true);
}
else if (strcmp(LEDOFF, (const char *)payload) == 0) {
writeLED(false);
}
else if (strcmp(LEDON1, (const char *)payload) == 0) {
writeLED1(true);
}
else if (strcmp(LEDOFF1, (const char *)payload) == 0) {
writeLED1(false);
}
else {
Serial.println("Unknown command");
}
// send data to all connected clients
webSocket.broadcastTXT(payload, length);
break;
case WStype_BIN:
Serial.printf("[%u] get binary length: %u\r\n", num, length);
hexdump(payload, length);
// echo data back to browser
webSocket.sendBIN(num, payload, length);
break;
default:
Serial.printf("Invalid WStype [%d]\r\n", type);
break;
}
}
void handleRoot()
{
server.send_P(200, "text/html", INDEX_HTML);
}
void handleNotFound()
{
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
static void writeLED(bool LEDon)
{
LEDStatus = LEDon;
// Note inverted logic for Adafruit HUZZAH board
if (LEDon) {
digitalWrite(LEDPIN, 1);
}
else {
digitalWrite(LEDPIN, 0);
}
}
static void writeLED1(bool LEDon)
{
LEDStatus1 = LEDon;
// Note inverted logic for Adafruit HUZZAH board
if (LEDon) {
digitalWrite(LEDPIN1, 1);
}
else {
digitalWrite(LEDPIN1, 0);
}
}
// función que prepara la trama de datos para hacer un POST a endpoint del influx
String influxFrame( String dht11_humidity, String dht11_temperature ) {
// este es el nombre del sensor
// Siempre que se quema la primera vez, se debe de cambiar el nombre del sensor
const String SENSOR_ID = "DHT11_llanadas"; // Nombre del sensor en la plataforma
const String STR_COMMA = ",";
const String STR_SLASH = "/";
const String STR_DOT = ".";
const String STR_COLON = ":";
const String STR_NULL = "NULL";
const String STR_ZERO = "0";
const String STR_SPACE = " ";
// El primer dato en el squema de la DB es el id del sensor
String frame = SENSOR_ID + STR_COMMA + "id=" + SENSOR_ID + STR_SPACE;
// Add GPS data
frame += "lat=";
frame += "6.2563143" + STR_COMMA; // coordenada GSP lat
frame += "lng=";
frame += "-75.5386472" + STR_COMMA; // coordenada lng lat
frame += "altitude=";
frame += STR_ZERO + STR_COMMA;
frame += "course=";
frame += STR_ZERO + STR_COMMA;
frame += "speed=";
frame += STR_ZERO + STR_COMMA;
//Add DHT11 data
//if
frame += "humidity=";
frame += dht11_humidity + STR_COMMA;
frame += "temperature=";
frame += dht11_temperature + STR_COMMA;
// } else {
// frame += "humidity=" + STR_NULL + STR_COMMA + "temperature=" + STR_NULL + STR_COMMA;
// }
// Add Plantower data
// if
frame += "pm1=";
frame += STR_ZERO + STR_COMMA;
frame += "pm25=";
frame += STR_ZERO + STR_COMMA;
frame += "pm10=";
frame += STR_ZERO;
// } else {
// frame += "pm1=" + STR_NULL + STR_COMMA + "pm25=" + STR_NULL + STR_COMMA + "pm10=" + STR_NULL;
// }
return frame;
}
// función que envía la trama de datos
void sendDataInflux ( String humidity, String temperature ) {
/*
El post a la base de datos tiene una trama siguiente:
// volker0001,id=volker0001 lat=6.268115,lng=-75.543407,altitude=1801.1,course=105.55,speed=0.00,humidity=37.00,temperature=25.00,pm1=22,pm25=31,pm10=32
Para nuestro caso que SOLO es el envío de datos del dht_11 que es humedad y temperatura la trama es la siguiente
// DHT11_llanadas, id=DHT11_llanadas, lat=6.2563143, lng=-75.5386472, altitude=0, course=0, speed=0, humidity=37.00, temperature=25.00, pm1=0, pm25=0, pm10=0 1434055562000000000
*/
HTTPClient http;
// _testsensorhumedad es el nombre de la DB donde se almacenan estos datos
http.begin("http://aqa.unloquer.org:8086/write?db=_testsensorhumedad"); // endPoint final, '_testsensorhumedad' es el nombre de la base de datos
http.setTimeout(HTTP_TIMEOUT);
http.addHeader("Content-Type", "--data-binary");
String frame = influxFrame(humidity, temperature); // Construimos el request POST
int httpCode = http.POST(frame); // Envíamos los datos haciendo un POST
if(httpCode > 0) {
String payload = http.getString();
Serial.println(payload);
Serial.println("Envío de datos con exito!");
} else {
Serial.print("[HTTP] failed, error;");
Serial.println(http.errorToString(httpCode).c_str());
}
http.end();
delay(60000); // cada minuto se envía un POST al influx
}
void setup()
{
pinMode(LEDPIN, OUTPUT);
pinMode(LEDPIN1, OUTPUT);
writeLED(false);
writeLED1(false);
Serial.begin(115200);
// init pantalla
display.begin(SSD1306_SWITCHCAPVCC);
display.display();
delay(1000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
Serial.println(F("DHTxx test!"));
dht.begin();
//Serial.setDebugOutput(true);
Serial.println();
Serial.println();
Serial.println();
for(uint8_t t = 4; t > 0; t--) {
Serial.printf("[SETUP] BOOT WAIT %d...\r\n", t);
Serial.flush();
delay(1000);
}
WiFiMulti.addAP(ssid, password);
while(WiFiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (mdns.begin("espWebSock", WiFi.localIP())) {
Serial.println("MDNS responder started");
mdns.addService("http", "tcp", 80);
mdns.addService("ws", "tcp", 81);
}
else {
Serial.println("MDNS.begin failed");
}
Serial.print("Connect to http://espWebSock.local or http://");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.onNotFound(handleNotFound);
server.begin();
webSocket.begin();
webSocket.onEvent(webSocketEvent);
}
void loop()
{
webSocket.loop();
server.handleClient();
// dht11 y pantall
static unsigned int h = 0;
static unsigned int t = 0;
h = dht.readHumidity();
t = dht.readTemperature();
/*
// Si las lecturas fallan, salimos, no mandamos nada y volvemos a intentarlo
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
*/
display.clearDisplay();
display.setCursor(0,0);
display.print("UN/LOQUER \n");
display.print("HUM: ");
display.print(h);
display.print(" % \n");
display.print("TEM: ");
display.print(t);
display.print(" C \n");
display.print("IP: ");
display.print(WiFi.localIP());
display.display();
// sendDataInflux(String(h), String(t)); // se tiene que mandar los datos por websokect + no por protocolo http
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment