Last active
June 19, 2019 07:44
-
-
Save Kaziuz/d00f4e2e29e292fd1009cc028dc4aecd to your computer and use it in GitHub Desktop.
code module sensor grow
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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,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" 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