M09 D2 FINAL
//emed-nodeMCU-9
//10.01.2020
//nodeMCU
//@rPrimTech Jaume Nogués
#include <JustWifi.h>
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT11.h>
DHT11 sensor(10);
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
ClosedCube_HDC1080 hdc1080;
#include "Seeed_BME280.h" //https://github.com/Seeed-Studio/Grove_BME280
#include <Wire.h>
BME280 bme280;
#define FASTLED_ESP8266_RAW_PIN_ORDER //per utilitzar numeracio GPIO a nodemcu
#include <FastLED.h>
#define NUM_LEDS 1
#define DATA_PIN 15
CRGB leds[NUM_LEDS];
int dimmer=0;
int red=0;
int green=0;
int blue=0;
boolean ramdomColorsFlag=0;
int blynkIsDownCount=0;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Your WiFi credentials.
// Set password to "" for open networks.
#define ssid1 "kk"
#define pass1 "kkp2"
#define ssid2 "emed"
#define pass2 "pitufito*"
#define ssid3 "kkk"
#define pass3 "dembele1"
BlynkTimer timer;
boolean stateGPIO16=0;
boolean stateGPIO0=0;
boolean prevstateGPIO0=0;
boolean stateGPIO2=0;
boolean prevstateGPIO2=0;
boolean stateGPIO13=0;
boolean prevstateGPIO13=0;
boolean stateGPIO12=0;
boolean prevstateGPIO12=0;
boolean stateGPIO14=0;
boolean prevstateGPIO14=0;
void setup()
{
// Debug console
pinMode(16, OUTPUT);
Serial.begin(115200);
Serial.println(" ");
pinMode(12, INPUT);
pinMode(14, INPUT);
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
leds[0] = CRGB::Red;
FastLED.show();
delay(1000);
leds[0] = CRGB::Green;
FastLED.show();
delay(1000);
leds[0] = CRGB::Blue;
FastLED.show();
delay(1000);
leds[0] = CRGB::Red;
FastLED.setBrightness(20);
FastLED.show();
/*
hdc1080.begin(0x40);
Serial.print("Manufacturer ID=0x");
Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments
Serial.print("Device ID=0x");
Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device
printSerialNumber();
if(!bme280.init()){
Serial.println("BME280 Device error!");
}
*/
jw.setHostname("nodeMCU");
jw.subscribe(infoCallback);
jw.enableAP(false);
jw.enableAPFallback(true);
jw.enableSTA(true);
jw.enableScan(true);
jw.cleanNetworks();
jw.addNetwork(ssid1, pass1);
jw.addNetwork(ssid2, pass2);
jw.addNetwork(ssid3, pass3);
Serial.println("[WIFI] Connecting Wifi...");
Blynk.config(auth, IPAddress(167,86,87,117), 8080);
timer.setInterval(200L, multiColors);
timer.setInterval(300L, checkInputsOutputs);
timer.setInterval(10002L, uptime);
// timer.setInterval(20000L, mesuraDHT);
// timer.setInterval(22000L, mesuraHDC1080);
// timer.setInterval(23000L, mesuraBMP);
timer.setInterval(30000L, reconnecting);
}
void loop()
{
jw.loop();
if (jw.connected() && Blynk.connected())
{
Blynk.run();
}
timer.run();
}
void reconnecting()
{
if (!Blynk.connected() && jw.connected())
{
blynkIsDownCount++;
BLYNK_LOG("blynk server is down! %d times", blynkIsDownCount);
Blynk.connect(10000);
}
}
void uptime()
{
Blynk.virtualWrite(V0, millis() / 1000);
}
void mesuraDHT()
{
uint32_t res = sensor.leer();
float t=sensor.temperatura_C();
float h=sensor.humedad();
Serial.print("[TDHT] ");
Serial.println(t); // temperatura en graus Celsius
Serial.print("[HDHT] ");
Serial.println(h); // humitat en %
Serial.println(" ");
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
}
void checkInputsOutputs()
{
digitalWrite(16,stateGPIO16);
stateGPIO16=!stateGPIO16;
stateGPIO0=digitalRead(0);
if (stateGPIO0!=prevstateGPIO0)
{
if (stateGPIO0==0) Blynk.virtualWrite(V3,255);
if (stateGPIO0==1) Blynk.virtualWrite(V3,0);
}
prevstateGPIO0=stateGPIO0;
stateGPIO2=digitalRead(2);
if (stateGPIO2!=prevstateGPIO2)
{
if (stateGPIO2==0) Blynk.virtualWrite(V4,255);
if (stateGPIO2==1) Blynk.virtualWrite(V4,0);
}
prevstateGPIO2=stateGPIO2;
//********************Polsador GPIO12 (S1) a sortida GPIO13 (H3)***************************
stateGPIO12=digitalRead(12);
if (prevstateGPIO12==0 && stateGPIO12==1)
{
bool temp=digitalRead(13);
if (temp){ digitalWrite(13,LOW); Blynk.virtualWrite(V5,0);}
if (!temp){ digitalWrite(13,HIGH); Blynk.virtualWrite(V5,255);}
prevstateGPIO12=1;
}
if (prevstateGPIO12==1 && stateGPIO12==0)
{
prevstateGPIO12=0;
}
stateGPIO13=digitalRead(13);
if (stateGPIO13!=prevstateGPIO13)
{
if (stateGPIO13==0) Blynk.virtualWrite(V5,0);
if (stateGPIO13==1) Blynk.virtualWrite(V5,255);
}
prevstateGPIO13=stateGPIO13;
//*************************************************************************************
//***************************Sensor finestra oberta/tancada*****************************
stateGPIO14=digitalRead(14);
if (stateGPIO14!=prevstateGPIO14)
{
if (stateGPIO14==0) Blynk.virtualWrite(V6,"TANCADA");
if (stateGPIO14==1)
{
Blynk.notify("Finestra OBERTA!!");//Max. 1 notificació cada 5 segons
Blynk.virtualWrite(V6,"OBERTA");
//Blynk.email("jnogues@gmail.com", "ALERTA!!", "Finestra OBERTA!!");//Max. 1 mail cada 5 segons
}
}
prevstateGPIO14=stateGPIO14;
//*************************************************************************************
}
BLYNK_CONNECTED() {
Blynk.syncAll();
Serial.print("[WIFI] Connected to SSID: ");
Serial.println(WiFi.SSID());
}
void mesuraHDC1080()
{
float T_HDC=hdc1080.readTemperature();
float H_HDC=hdc1080.readHumidity();
Serial.print("[THDC] ");
Serial.println(T_HDC);
Serial.print("[HHDC] ");
Serial.println(H_HDC);
Serial.println(" ");
Blynk.virtualWrite(V7,T_HDC);
Blynk.virtualWrite(V8,H_HDC);
}
void printSerialNumber() {
Serial.print("Device Serial Number=");
HDC1080_SerialNumber sernum = hdc1080.readSerialNumber();
char format[12];
sprintf(format, "%02X-%04X-%04X", sernum.serialFirst, sernum.serialMid, sernum.serialLast);
Serial.println(format);
}
void mesuraBMP()
{
float T_BMP=bme280.getTemperature();
float H_BMP=bme280.getHumidity();
float P_BMP=bme280.getPressure()/100;//Pa-->hPa
//get and print temperature
Serial.print("[TBMP] ");
Serial.println(T_BMP);
//get and print humidity data
Serial.print("[HBMP] ");
Serial.println(H_BMP);
//get and print atmospheric pressure data
Serial.print("[PBMP] ");
Serial.println(P_BMP);
Serial.println(" ");
Blynk.virtualWrite(V9,T_BMP);
Blynk.virtualWrite(V10,H_BMP);
Blynk.virtualWrite(V11,P_BMP);
}
//dimmer
BLYNK_WRITE(16)
{
dimmer = param[0].asInt();
for(int i=0;i<NUM_LEDS;i++)
{
FastLED.setBrightness( dimmer );
FastLED.show();
}
}
//zergba
BLYNK_WRITE(17)
{
red = param[0].asInt();
green = param[1].asInt();
blue = param[2].asInt();
for(int i=0;i<NUM_LEDS;i++)
{
leds[i].setRGB( red,green,blue);
FastLED.show();
ramdomColorsFlag=0;
}
}
//llistat de colors
//http://fastled.io/docs/3.1/struct_c_r_g_b.html
BLYNK_WRITE (14)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB:: Black;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (18)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB:: DeepSkyBlue;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (19)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::DarkOliveGreen;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (20)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::Red;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (21)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::Green;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (22)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::Blue;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (23)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::White;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (24)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::MistyRose;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (25)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::Salmon;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (26)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB::Orange;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (27)
{
leds[0] = CRGB::Orange;
leds[1] = CRGB::Salmon;
leds[2] = CRGB::MistyRose;
leds[3] = CRGB::Blue;
leds[4] = CRGB::DarkOliveGreen;
leds[5] = CRGB::Orange;
leds[6] = CRGB::Salmon;
leds[7] = CRGB::MistyRose;
FastLED.show();
ramdomColorsFlag=0;
}
BLYNK_WRITE (28)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB:: Black;
FastLED.show();
ramdomColorsFlag=0;
}
}
BLYNK_WRITE (29)
{
int kk=param.asInt();
if (kk==1) ramdomColorsFlag=!ramdomColorsFlag;
if (ramdomColorsFlag==0)
{
for(int i=0;i<NUM_LEDS;i++)
{
leds[i] = CRGB:: Black;
FastLED.show();
}
}
}
void multiColors()
{
if (ramdomColorsFlag==1)
{
FastLED.setBrightness(100 );
red = random(50,100);
green = random(10,50);
blue = random(50,100);
//FastLED.setBrightness(random(0,255));
for(int i=0;i<NUM_LEDS;i++)
{
leds[i].setRGB( red,green,blue);
FastLED.show();
}
}
}
//**************************funcions de justwifi***********************
void infoWifi() {
if (WiFi.isConnected()) {
uint8_t * bssid = WiFi.BSSID();
Serial.printf("[WIFI] MODE STA -------------------------------------\n");
Serial.printf("[WIFI] SSID %s\n", WiFi.SSID().c_str());
Serial.printf("[WIFI] BSSID %02X:%02X:%02X:%02X:%02X:%02X\n",
bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5]
);
Serial.printf("[WIFI] CH %d\n", WiFi.channel());
Serial.printf("[WIFI] RSSI %d\n", WiFi.RSSI());
Serial.printf("[WIFI] IP %s\n", WiFi.localIP().toString().c_str());
Serial.printf("[WIFI] MAC %s\n", WiFi.macAddress().c_str());
Serial.printf("[WIFI] GW %s\n", WiFi.gatewayIP().toString().c_str());
Serial.printf("[WIFI] MASK %s\n", WiFi.subnetMask().toString().c_str());
Serial.printf("[WIFI] DNS %s\n", WiFi.dnsIP().toString().c_str());
#if defined(ARDUINO_ARCH_ESP32)
Serial.printf("[WIFI] HOST %s\n", WiFi.getHostname());
#else
Serial.printf("[WIFI] HOST %s\n", WiFi.hostname().c_str());
#endif
Serial.printf("[WIFI] ----------------------------------------------\n");
}
if (WiFi.getMode() & WIFI_AP) {
Serial.printf("[WIFI] MODE AP --------------------------------------\n");
Serial.printf("[WIFI] SSID %s\n", jw.getAPSSID().c_str());
Serial.printf("[WIFI] IP %s\n", WiFi.softAPIP().toString().c_str());
Serial.printf("[WIFI] MAC %s\n", WiFi.softAPmacAddress().c_str());
Serial.printf("[WIFI] ----------------------------------------------\n");
}
}
void infoCallback(justwifi_messages_t code, char * parameter) {
// -------------------------------------------------------------------------
if (code == MESSAGE_TURNING_OFF) {
Serial.printf("[WIFI] Turning OFF\n");
}
if (code == MESSAGE_TURNING_ON) {
Serial.printf("[WIFI] Turning ON\n");
}
// -------------------------------------------------------------------------
if (code == MESSAGE_SCANNING) {
Serial.printf("[WIFI] Scanning\n");
}
if (code == MESSAGE_SCAN_FAILED) {
Serial.printf("[WIFI] Scan failed\n");
}
if (code == MESSAGE_NO_NETWORKS) {
Serial.printf("[WIFI] No networks found\n");
}
if (code == MESSAGE_NO_KNOWN_NETWORKS) {
Serial.printf("[WIFI] No known networks found\n");
}
if (code == MESSAGE_FOUND_NETWORK) {
Serial.printf("[WIFI] %s\n", parameter);
}
// -------------------------------------------------------------------------
if (code == MESSAGE_CONNECTING) {
Serial.printf("[WIFI] Connecting to %s\n", parameter);
}
if (code == MESSAGE_CONNECT_WAITING) {
// too much noise
}
if (code == MESSAGE_CONNECT_FAILED) {
Serial.printf("[WIFI] Could not connect to %s\n", parameter);
}
if (code == MESSAGE_CONNECTED) {
infoWifi();
}
if (code == MESSAGE_DISCONNECTED) {
Serial.printf("[WIFI] Disconnected\n");
}
// -------------------------------------------------------------------------
if (code == MESSAGE_ACCESSPOINT_CREATED) {
infoWifi();
}
if (code == MESSAGE_ACCESSPOINT_DESTROYED) {
Serial.printf("[WIFI] Disconnecting access point\n");
}
if (code == MESSAGE_ACCESSPOINT_CREATING) {
Serial.printf("[WIFI] Creating access point\n");
}
if (code == MESSAGE_ACCESSPOINT_FAILED) {
Serial.printf("[WIFI] Could not create access point\n");
}
// ------------------------------------------------------------------------
if (code == MESSAGE_WPS_START) {
Serial.printf("[WIFI] WPS started\n");
}
if (code == MESSAGE_WPS_SUCCESS) {
Serial.printf("[WIFI] WPS succeded!\n");
}
if (code == MESSAGE_WPS_ERROR) {
Serial.printf("[WIFI] WPS failed\n");
}
// ------------------------------------------------------------------------
if (code == MESSAGE_SMARTCONFIG_START) {
Serial.printf("[WIFI] Smart Config started\n");
}
if (code == MESSAGE_SMARTCONFIG_SUCCESS) {
Serial.printf("[WIFI] Smart Config succeded!\n");
}
if (code == MESSAGE_SMARTCONFIG_ERROR) {
Serial.printf("[WIFI] Smart Config failed\n");
}
};