Ota para reprogramar en red

Sonido SonidoBuzzer partiendo de lcd
master
Gerardo 2022-01-27 15:37:07 +01:00
parent 78d3cb851a
commit 7ea3debd00
11 changed files with 190 additions and 40 deletions

View File

@ -55,9 +55,9 @@ class DomoConfig
char ssidWifi[24]; char ssidWifi[32];
char keyWifi[32]; char keyWifi[32];
char ideEsp[16];//identificador unico por esp char ideEsp[32];//identificador unico por esp
char hostMQTT[16]; char hostMQTT[16];
int portMQTT; int portMQTT;

View File

@ -98,7 +98,7 @@ class DespachoDomoConfig: public DomoConfig
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_011");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_despacho");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
@ -142,7 +142,7 @@ class CocinaDomoConfig: public DomoConfig
velocidadPortSerie=115200; velocidadPortSerie=115200;
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_010");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_cocina");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
refresTimeVars=30;//tiempo de refresco en segundos de las variables refresTimeVars=30;//tiempo de refresco en segundos de las variables

View File

@ -16,7 +16,7 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("Inicia Wifi"); Serial.println("Inicia Wifi");
#endif #endif
wifi.inicia(espClient, conf->ssidWifi, conf->keyWifi); wifi.inicia(espClient, conf->ssidWifi, conf->keyWifi, conf->ideEsp);
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("Inicia Mqtt"); Serial.println("Inicia Mqtt");
#endif #endif
@ -43,10 +43,40 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC
Serial.println("Iniciado Desencadenadores"); Serial.println("Iniciado Desencadenadores");
#endif #endif
des.inicia(&vars); des.inicia(&vars);
#if CON_LCD #if CON_LCD
#ifdef DEBUG_PS
lcdm.inicia(&vars, lcd, conf->lcd.colum, conf->lcd.lines); Serial.println("Iniciado LCD");
#endif
//busca buzzer
int ibuzzer=-1;
for(int i=0; i<sens.sens.n; i++)
{
#ifdef DEBUG_PS
Serial.println("busca BUzz");
#endif
MqttSensor* s= sens.Get(i);
#ifdef DEBUG_PS
Serial.println("busca BUzz 2");
#endif
if(s->tipo == MqttSensor::SENS_BUZZ_OUT)
{
ibuzzer=s->ivar;
#ifdef DEBUG_PS
Serial.println("encuentrado buz");
#endif
break;
}
}
#ifdef DEBUG_PS
Serial.println("inicia LCD");
#endif
lcdm.inicia(&vars, lcd, conf->lcd.colum, conf->lcd.lines, ibuzzer);
#ifdef DEBUG_PS
Serial.println("iniciado LCD");
#endif
#endif #endif
} }

View File

@ -57,7 +57,7 @@ class DomoConfig
char ssidWifi[24]; char ssidWifi[24];
char keyWifi[32]; char keyWifi[32];
char ideEsp[16];//identificador unico por esp char ideEsp[32];//identificador unico por esp
char hostMQTT[16]; char hostMQTT[16];
int portMQTT; int portMQTT;

View File

@ -29,6 +29,9 @@ Y PROBAR RF*/
#include <SPI.h> #include <SPI.h>
#include <ESP8266WiFi.h>//este para esp8266 #include <ESP8266WiFi.h>//este para esp8266
//#include <WiFi.h>//este para esp32 //#include <WiFi.h>//este para esp32
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <SimpleDHT.h> #include <SimpleDHT.h>
#include <Wire.h> #include <Wire.h>

View File

@ -21,6 +21,7 @@ void LcdMQTTViewer::envia(char* txt, int pos, int line)
} }
LcdMQTTViewer::LcdMQTTViewer() LcdMQTTViewer::LcdMQTTViewer()
{ {
ivarBuzzer=-1;
topic[0]=0; topic[0]=0;
maxpan = 0; maxpan = 0;
tiempo = 0; tiempo = 0;
@ -66,12 +67,14 @@ void LcdMQTTViewer::envia(int pan)
} }
} }
void LcdMQTTViewer::inicia(MqttVarManager *v, LiquidCrystal* lcdEx, int digi, int lines) void LcdMQTTViewer::inicia(MqttVarManager *v, LiquidCrystal* lcdEx, int digi, int lines,int ibuz)
{ {
ivarBuzzer=(byte)ibuz;
vars=v; vars=v;
lcd =lcdEx; lcd =lcdEx;
nchar = digi; nchar = digi;
lcd->begin(nchar, lines); lcd->begin(nchar, lines);
nlineslcd=lines;
for(int i=0; i<lines; i++) for(int i=0; i<lines; i++)
{ {
envia("Iniciando",0,i); envia("Iniciando",0,i);
@ -112,6 +115,9 @@ int LcdMQTTViewer::OnMqtt(char* top, char* payload)
int lin=0; int lin=0;
int n=0; int n=0;
char buf[64]; char buf[64];
char imelod[12];
int nmelod;
bool melodia=false;
while(payload[i]) while(payload[i])
{ {
if(payload[i]=='\n') if(payload[i]=='\n')
@ -122,13 +128,41 @@ int LcdMQTTViewer::OnMqtt(char* top, char* payload)
lin++; lin++;
n=0; n=0;
} }
else if(payload[i]=='$')
{
if(melodia)
{
imelod[nmelod]=0;
melodia=false;
MQTTvalor v;
v.i=atoi(imelod);
if(ivarBuzzer>=0)
vars->SetVal(ivarBuzzer,v);
}
else else
{ {
nmelod=0;
melodia=true;
}
i++;
}
else
{
if(melodia)
imelod[nmelod++]=payload[i++];
else
buf[n++]=payload[i++]; buf[n++]=payload[i++];
} }
} }
buf[n]=0; buf[n]=0;
envia(buf,0,lin); envia(buf,0,lin);
lin++;
for(; lin<nlineslcd; lin++)
{
envia("",0,lin);
}
tiempo=millis(); tiempo=millis();
} }
void LcdMQTTViewer::suscribe(PubSubClient *client_qqtt) void LcdMQTTViewer::suscribe(PubSubClient *client_qqtt)

View File

@ -28,6 +28,8 @@ public:
int maxtInfo; int maxtInfo;
int maxpan; int maxpan;
int panActual = 0; int panActual = 0;
byte nlineslcd;
byte ivarBuzzer;
unsigned long tiempo; unsigned long tiempo;
unsigned long incre_t; unsigned long incre_t;
char topic[MAXSTR];//topic de mqtt Alarma char topic[MAXSTR];//topic de mqtt Alarma
@ -38,7 +40,7 @@ public:
LcdMQTTViewer(); LcdMQTTViewer();
void inicia(MqttVarManager *vars, LiquidCrystal* lcdEx, int digi, int lines); void inicia(MqttVarManager *vars, LiquidCrystal* lcdEx, int digi, int lines,int ibuz);
void loop();//publica datos variables void loop();//publica datos variables
int OnMqtt(char* topic, char* payload); int OnMqtt(char* topic, char* payload);
void suscribe(PubSubClient *client_qqtt); void suscribe(PubSubClient *client_qqtt);

View File

@ -75,7 +75,7 @@ void MqttSensManager::Config(MqttVarManager* var)
MqttSensor* MqttSensManager::Get(int i) MqttSensor* MqttSensManager::Get(int i)
{ {
return sens.Get(i);
} }
void MqttSensManager::inicia() void MqttSensManager::inicia()

View File

@ -6,6 +6,11 @@
#include <Wire.h> #include <Wire.h>
#include <EEPROM.h> #include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include "MqttUtiles.h" #include "MqttUtiles.h"
//************************************************************************************************************************************************** //**************************************************************************************************************************************************
@ -42,12 +47,18 @@ WifiManager::WifiManager()
} }
void WifiManager::inicia( WiFiClient *espclient,char *ssid, char* key) void WifiManager::inicia( WiFiClient *espclient,char *ssid, char* key, char *idArdu)
{ {
espClient= espclient; espClient= espclient;
strcpy(nred, ssid); strcpy(nred, ssid);
strcpy(pass, key); strcpy(pass, key);
strcpy(idArduino,idArdu);
conecta();
//return WiFi.status() == WL_CONNECTED;
}
bool WifiManager::conecta()
{
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("Conectando wifi"); Serial.println("Conectando wifi");
Serial.println(nred); Serial.println(nred);
@ -69,25 +80,84 @@ void WifiManager::inicia( WiFiClient *espclient,char *ssid, char* key)
if(WiFi.status() == WL_CONNECTED) if(WiFi.status() == WL_CONNECTED)
Serial.println("Wifi Conectado"); Serial.println("Wifi Conectado");
else else
{
Serial.println("No se pudo conectar"); Serial.println("No se pudo conectar");
#endif
//return WiFi.status() == WL_CONNECTED;
}
}
#endif
if(WiFi.status() != WL_CONNECTED)
return false;
//ota----------------------------------
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
ArduinoOTA.setHostname(idArduino);
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_FS
type = "filesystem";
}
#ifdef DEBUG_PS
// NOTE: if updating FS this would be the place to unmount FS using FS.end()
Serial.println("Start updating " + type);
#endif
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
#ifdef DEBUG_PS
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
#endif
});
ArduinoOTA.onError([](ota_error_t error) {
#ifdef DEBUG_PS
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
#endif
});
ArduinoOTA.begin();
#ifdef DEBUG_PS
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
#endif
return true;
}
bool WifiManager::loop() bool WifiManager::loop()
{ {
if((WiFi.status() == WL_CONNECTED)) if((WiFi.status() == WL_CONNECTED))
{ {
ArduinoOTA.handle();
return true; return true;
} }
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("Reset esp"); Serial.println("Fallo de conexion, se reinicia arduino");
#endif #endif
ESP.reset(); ESP.reset();
return false; return false;
} }
//************************************************************************************************************************************************** //**************************************************************************************************************************************************
MqttManager::MqttManager() MqttManager::MqttManager()
@ -122,6 +192,11 @@ bool MqttManager::loop()
return true; return true;
} }
#ifdef DEBUG_PS
Serial.println("Fallo de conexion, se reinicia arduino");
#endif
ESP.reset();
return false;
} }
void MqttManager::subscribe_mqtt() void MqttManager::subscribe_mqtt()
{ {

View File

@ -55,11 +55,12 @@ class WifiManager
char nred[32]; char nred[32];
char pass[32]; char pass[32];
char idArduino[32];
WiFiClient *espClient; WiFiClient *espClient;
WifiManager(); WifiManager();
bool conecta();
void inicia( WiFiClient *espClient, char *ssid, char* key); void inicia( WiFiClient *espClient, char *ssid, char* key, char *idArduino);
bool loop(); bool loop();
}; };
@ -76,7 +77,7 @@ class MqttManager
private: private:
char idEsp[16]; char idEsp[32];
public: public:
PubSubClient *client_mqtt; PubSubClient *client_mqtt;

View File

@ -11,7 +11,7 @@ class ActDomoConfig: public DomoConfig
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_016");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_pruebas");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
@ -109,7 +109,7 @@ class AutomatismosDomoConfig: public DomoConfig
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_013");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_autom");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
@ -203,7 +203,7 @@ class PulCocinaConfig: public DomoConfig
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_014");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_Pulcocina");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
@ -263,7 +263,7 @@ class PulSalonConfig: public DomoConfig
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_012");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_pulSalon");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
@ -316,7 +316,7 @@ class DespachoDomoConfig: public DomoConfig
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_011");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_Despacho");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
@ -341,6 +341,11 @@ class DespachoDomoConfig: public DomoConfig
//sensores-------------------------------------------------------- //sensores--------------------------------------------------------
sens->AddHDT22(D4, "casa/desp"); sens->AddHDT22(D4, "casa/desp");
sens->AddAnalogIn(0, "casa/desp/luz",true); sens->AddAnalogIn(0, "casa/desp/luz",true);
sens->AddBuzz(D7, "casa/des/buz");
sens->AddMelodia("m200#100d200#0");//titu
sens->AddMelodia("d200#100d200#100d200#100f200#100l300#0");
//variables---------------------------------------------------- //variables----------------------------------------------------
int temCoci= vars->AddInternalVarFloat( "casa/cocina/t");//variable privada int temCoci= vars->AddInternalVarFloat( "casa/cocina/t");//variable privada
int hcocina= vars->AddInternalVarFloat( "casa/cocina/h");//variable privada int hcocina= vars->AddInternalVarFloat( "casa/cocina/h");//variable privada
@ -364,7 +369,7 @@ class CocinaDomoConfig: public DomoConfig
velocidadPortSerie=115200; velocidadPortSerie=115200;
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_010");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_cocina");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
refresTimeVars=30;//tiempo de refresco en segundos de las variables refresTimeVars=30;//tiempo de refresco en segundos de las variables
@ -387,7 +392,7 @@ class ExteriorDomoConfig: public DomoConfig
velocidadPortSerie=115200; velocidadPortSerie=115200;
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_015");//idenitificador del esp (sera único) strcpy(ideEsp,"Esp8266_Ext");//idenitificador del esp (sera único)
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
portMQTT=1883;//puerto del servidor mqtt Broker portMQTT=1883;//puerto del servidor mqtt Broker
refresTimeVars=30;//tiempo de refresco en segundos de las variables refresTimeVars=30;//tiempo de refresco en segundos de las variables
@ -405,4 +410,4 @@ class ExteriorDomoConfig: public DomoConfig
//configuracion que se usara-------------------------- //configuracion que se usara--------------------------
ActDomoConfig ConfiguracionActual; DespachoDomoConfig ConfiguracionActual;