Ye Vesta Home Brewing  0.1
Controle de temperatura de um kegerator
Estruturas de Dados | Definições e Macros | Funções | Variáveis
Referência do Arquivo application.cpp
#include <user_config.h>
#include <SmingCore/SmingCore.h>
Gráfico de dependência de inclusões para application.cpp:

Estruturas de Dados

struct  progs
 Valores de maxima e minima para as temperaturas. Mais...
 

Definições e Macros

#define MQTT_ID   "ElectroDragon"
 Controlador de temperaturas para fases da cerveja Controle de fermentacao, maturacao e priming. Mais...
 
#define MQTT_BROKER   "192.168.1.2"
 
#define MQTT_PORT   1883
 
#define MQTT_USER   "dobitaobyte"
 
#define MQTT_PASSWD   "senha"
 
#define MQTT_TOPIC   "beer/temperature"
 
#define INI_FILE   "/flash/program.ini"
 
#define LOG_FILE   "/flash/yevesta.log"
 
#define LIM_FILE   "/flash/limits.ini"
 
#define MY_SSID   "ssid_do_wifi"
 
#define MY_PASSWD   "senha_do_wifi"
 
#define RELAY_ONE_PIN   12
 
#define RELAY_TWO_PIN   13
 

Funções

void startMqttClient ()
 Inicializador da conexão com o broker. Mais...
 
void onMessageReceived (String topic, String msg)
 Callback do MQTT. Mais...
 
MqttClient mqtt (MQTT_BROKER, MQTT_PORT, onMessageReceived)
 Criacao do objeto para comunicacao via MQTT. Mais...
 
void ls ()
 Lista arquivos no sistema de arquivos SPIFFS. Mais...
 
void sleep (unsigned long interval_ms)
 Função de sleep sem delay no hardware. Mais...
 
void split (char *buf, int size)
 Reatribuição da struct programs. Mais...
 
void strToProg ()
 Carrega os valores do arquivo limits.ini. Mais...
 
String progToStr ()
 Converte valores do enumerador em String. Mais...
 
void writePrograms ()
 Escreve os limites de temperatura no arquivo limits.ini. Mais...
 
void settingTemps (String toSlice)
 Configuração das temperaturas. Mais...
 
void adjustment (int A, int B, int C)
 Configuração dos pinos de GPIO. Mais...
 
void logEvent (String msg)
 Log de excessões. Mais...
 
void programLoader ()
 Se existir, carrega o valor do arquivo program.ini. Mais...
 
void defineProgram (String flag)
 Escolha da fase. Mais...
 
void readFile (String fileToRead)
 Leitor do conteúdo de um arquivo. Mais...
 
void checkMQTTDisconnect (TcpClient &client, bool flag)
 Reinicia a conexão com o broker em caso de desconexão. Mais...
 
void publishIamLive ()
 Apenas publica o status da conexão. Mais...
 
void failed ()
 Chamada em caso de falha da conexão com o broker. Mais...
 
void successful ()
 Chamada em caso de sucesso na conexão com o broker. Mais...
 
void sta_if ()
 Configuração inicial da interface sta e desabilitação do modo AP. Mais...
 
void keepLooking ()
 Garantia da conexão constate. Mais...
 
void init ()
 Inicializador de execução. Mais...
 

Variáveis

String program_to = "M"
 Variavel que recebe a flag do estilo de programa. Mais...
 
static progs programs = {19.0,22.0,1.0,2.0,20.0,22.0}
 
double temp_min = programs.fermentation_min
 Atribuicao de temperatura minima. Mais...
 
double temp_max = programs.fermentation_max
 Atribuicao de temperatura maxima. Mais...
 
Timer procTimer
 
Timer checkConn
 
Timer ESPlives
 
Timer loadLimits
 

Definições e macros

#define INI_FILE   "/flash/program.ini"

Referenciado por defineProgram() e programLoader().

#define LIM_FILE   "/flash/limits.ini"

Referenciado por strToProg() e writePrograms().

#define LOG_FILE   "/flash/yevesta.log"

Referenciado por logEvent().

#define MQTT_BROKER   "192.168.1.2"
#define MQTT_ID   "ElectroDragon"

Controlador de temperaturas para fases da cerveja Controle de fermentacao, maturacao e priming.

A producao da cerveja possui 3 fases diferentes, nas quais as temperaturas precisam ser ajustadas. Esse programa em um ESP8266 com 2 reles ajuda nesse controle, dando um feedback via MQTT.

#define MQTT_PASSWD   "senha"

Referenciado por init() e startMqttClient().

#define MQTT_PORT   1883
#define MQTT_TOPIC   "beer/temperature"
#define MQTT_USER   "dobitaobyte"

Referenciado por init() e startMqttClient().

#define MY_PASSWD   "senha_do_wifi"

Referenciado por sta_if().

#define MY_SSID   "ssid_do_wifi"

Referenciado por sta_if().

#define RELAY_ONE_PIN   12

Referenciado por adjustment() e onMessageReceived().

#define RELAY_TWO_PIN   13

Referenciado por adjustment() e onMessageReceived().

Funções

void adjustment ( int  A,
int  B,
int  C 
)

Configuração dos pinos de GPIO.

Essa função faz a configuração inicial dos pinos para o modo de boot do ESP8266, assim como configura o modo dos pinos dos relés.

Referências RELAY_ONE_PIN e RELAY_TWO_PIN.

Referenciado por init().

269  {
270  //programing = 0 1 0
271  //normal = 1 1 0
272  //sd boot = 0 0 1
273  pinMode(0,OUTPUT);
274  pinMode(2,OUTPUT);
275  pinMode(15,OUTPUT);
276 
277  pinMode(RELAY_ONE_PIN,OUTPUT);
278  pinMode(RELAY_TWO_PIN,OUTPUT);
279 
280  digitalWrite(0,A);
281  digitalWrite(2,B);
282  digitalWrite(15,C);
283 }
#define RELAY_ONE_PIN
Definition: application.cpp:32
#define RELAY_TWO_PIN
Definition: application.cpp:33
void checkMQTTDisconnect ( TcpClient &  client,
bool  flag 
)

Reinicia a conexão com o broker em caso de desconexão.

Referências procTimer e startMqttClient().

522  {
523  if (flag == true){
524  Serial.println("MQTT Broker Disconnected!!");
525  }
526  else {
527  Serial.println("MQTT Broker Unreachable!!");
528  }
529 
530  procTimer.initializeMs(2000, startMqttClient).start();
531 }
void startMqttClient()
Inicializador da conexão com o broker.
Definition: application.cpp:546
Timer procTimer
Definition: application.cpp:67
void defineProgram ( String  flag)

Escolha da fase.

Quando publicado por MQTT o programa desejado (sendo Fermentation, Maturation ou Priming), o callback onMessageReceived(String topic, String msg) se encarrega de chamar essa função. O parâmetro recebido é o tipo escolhido, sendo as opções 'F' para fermentação, 'M' para maturação e 'P' para priming.

Referências INI_FILE e programLoader().

Referenciado por onMessageReceived().

379  {
380  char data[5] = "";
381 
382  if (fileExist(INI_FILE)){
383  Serial.println("Removendo arquivo anterior...");
384  fileDelete(INI_FILE);
385  }
386 
387  file_t program_ini = fileOpen(INI_FILE,eFO_ReadWrite | eFO_CreateIfNotExist);
388 
389  if (program_ini < 0){
390  Serial.print("Erro ao abrir arquivo");
391  return;
392  }
393  char teste = flag.charAt(0);
394  fileWrite(program_ini,&teste,1);
395 
396  fileSeek(program_ini,0,eSO_FileStart);
397  char wrote;
398  int content = fileRead(program_ini,&wrote,1);
399  Serial.print("Content: ");
400  Serial.println(content);
401  Serial.print("Arquivo contem: ");
402  Serial.println(wrote);
403 
404  fileClose(program_ini);
405 
406  programLoader();
407 }
void programLoader()
Se existir, carrega o valor do arquivo program.ini.
Definition: application.cpp:328
#define INI_FILE
Definition: application.cpp:22
void failed ( )

Chamada em caso de falha da conexão com o broker.

Referências logEvent().

Referenciado por sta_if().

568  {
569  Serial.println("Falha na conexao de rede!");
570  //qualquer coisa mais, colocar por aqui.
571  logEvent("Falha na conexao de rede");
572 }
void logEvent(String msg)
Log de excessões.
Definition: application.cpp:309
void init ( )

Inicializador de execução.

Referências adjustment(), checkConn, ESPlives, keepLooking(), mqtt(), MQTT_PASSWD, MQTT_USER, publishIamLive(), sleep() e sta_if().

615  {
616  spiffs_mount();
617  sleep(20);
618  adjustment(HIGH,HIGH,LOW);
619 
620  Serial.begin(115200);
621  sleep(200);
622  Serial.println("Iniciada a serial...");
623  sta_if();
624 
625  String ip_adr = WifiStation.getIP().toString();
626  Serial.print("Endereco IP: ");
627  Serial.println(ip_adr);
628 
629  mqtt.connect("ElectroDragon",MQTT_USER,MQTT_PASSWD);
630  Serial.println("Iniciada a conexao com o broker MQTT...");
631  mqtt.subscribe("beer/#");
632  Serial.println("Subscricao para o topico beer/#");
633 
634  checkConn.initializeMs(3000, keepLooking).start();
635  ESPlives.initializeMs(10000, publishIamLive).start();
636  //loadLimits.initializeMs(10000, strToProg).startOnce();
637 }
#define MQTT_PASSWD
Definition: application.cpp:19
void adjustment(int A, int B, int C)
Configuração dos pinos de GPIO.
Definition: application.cpp:269
void keepLooking()
Garantia da conexão constate.
Definition: application.cpp:607
#define MQTT_USER
Definition: application.cpp:18
Timer checkConn
Definition: application.cpp:68
void publishIamLive()
Apenas publica o status da conexão.
Definition: application.cpp:537
void sta_if()
Configuração inicial da interface sta e desabilitação do modo AP.
Definition: application.cpp:588
void sleep(unsigned long interval_ms)
Função de sleep sem delay no hardware.
Definition: application.cpp:298
Timer ESPlives
Definition: application.cpp:69
MqttClient mqtt(MQTT_BROKER, MQTT_PORT, onMessageReceived)
Criacao do objeto para comunicacao via MQTT.
void keepLooking ( )

Garantia da conexão constate.

Essa função se encarrega de manter a conexão funcional em qualquer situação.

Referências mqtt() e startMqttClient().

Referenciado por init().

607  {
608  if (mqtt.getConnectionState() != eTCS_Connected){
609  Serial.println("Reconectando!!!");
610  startMqttClient();
611  }
612 }
void startMqttClient()
Inicializador da conexão com o broker.
Definition: application.cpp:546
MqttClient mqtt(MQTT_BROKER, MQTT_PORT, onMessageReceived)
Criacao do objeto para comunicacao via MQTT.
void logEvent ( String  msg)

Log de excessões.

Referências LOG_FILE e sleep().

Referenciado por failed(), onMessageReceived() e programLoader().

309  {
310  file_t logF = fileOpen(LOG_FILE, eFO_CreateIfNotExist|eFO_Append);
311  if (logF < 0){
312  Serial.println("Nao pude criar o arquivo de log.");
313  fileClose(logF);
314  return;
315  }
316  fileWrite(logF,msg.c_str(),1);
317  fileClose(logF);
318 
319  Serial.println("Arquivo yevesta.log criado com sucesso");
320  Serial.println("Reiniciando agora...");
321  sleep(300);
322  //System.restart();
323 }
void sleep(unsigned long interval_ms)
Função de sleep sem delay no hardware.
Definition: application.cpp:298
#define LOG_FILE
Definition: application.cpp:23
void ls ( )

Lista arquivos no sistema de arquivos SPIFFS.

Uma listagem simples, apenas para ver os arquivos disponíveis.

Referenciado por onMessageReceived(), readFile() e successful().

559  {
560  Vector<String> files = fileList();
561  Serial.println("Listando arquivos:");
562  for (int i=0; i<files.count(); i++){
563  Serial.println(files.get(i) + " - " + String(fileGetSize(files.get(i))) + " Bytes");
564  }
565 }
MqttClient mqtt ( MQTT_BROKER  ,
MQTT_PORT  ,
onMessageReceived   
)

Criacao do objeto para comunicacao via MQTT.

Referenciado por init(), keepLooking(), publishIamLive(), startMqttClient() e successful().

void onMessageReceived ( String  topic,
String  msg 
)

Callback do MQTT.

Essa funcao é utilizada como callback da comunicação MQTT.

Referências defineProgram(), logEvent(), ls(), readFile(), RELAY_ONE_PIN, RELAY_TWO_PIN, settingTemps(), sleep(), strToProg(), temp_max e temp_min.

444  {
445  Serial.println(topic);
446  Serial.println(msg);
447  Serial.print("Temperaturas do programa atual: ");
448  Serial.println(temp_min);
449  Serial.println(temp_max);
450 
451  if (topic == "beer/program"){
452  if (msg.charAt(0) == 'F'){
453  defineProgram("F");
454  }
455  else if (msg.charAt(0) == 'M'){
456  defineProgram("M");
457  }
458  else if (msg.charAt(0) == 'P'){
459  defineProgram("P");
460  }
461  else{
462  Serial.print("Mensagem invalida: ");
463  Serial.println(msg);
464  logEvent("Mensagem invalida no topico beer/program");
465  }
466  }
467  else if (topic == "beer/temperature"){
468  /*
469  for (int i=0;i<msg.length();i++){
470  if (!isdigit(msg.charAt(i)) && msg.charAt(i) != '.'){
471  Serial.println("Nao parece temperatura. Abortando...");
472  return;
473  }
474  }
475  */
476 
477  float temp = msg.toFloat();
478  Serial.print("Conversao de String para float. Resultado: ");
479  Serial.println(temp);
480  if (temp <= temp_min){
481  //rele off
482  digitalWrite(RELAY_ONE_PIN,LOW);
483  }
484  if (temp >= temp_max){
485  //rele on
486  digitalWrite(RELAY_ONE_PIN,HIGH);
487  sleep(300);
488  digitalWrite(RELAY_TWO_PIN,HIGH);
489  sleep(1500);
490  digitalWrite(RELAY_TWO_PIN,LOW);
491  }
492  }
493  else if (topic == "beer/ls"){
494  ls();
495  }
496  else if (topic == "beer/ini"){
497  readFile(msg);
498  }
499  else if (topic == "beer/relay"){
500  if (msg.charAt(0) == '0'){
501  digitalWrite(RELAY_ONE_PIN,HIGH);
502  }
503  else if (msg.charAt(0) == '1'){
504  digitalWrite(RELAY_ONE_PIN,LOW);
505  }
506  else if (msg.charAt(0) == '2'){
507  digitalWrite(RELAY_TWO_PIN,HIGH);
508  }
509  else if (msg.charAt(0) == '3'){
510  digitalWrite(RELAY_TWO_PIN,LOW);
511  }
512  }
513  else if (topic == "beer/minMax"){
514  settingTemps(msg);
515  }
516  else if (topic == "beer/limits"){
517  strToProg();
518  }
519 }
void strToProg()
Carrega os valores do arquivo limits.ini.
Definition: application.cpp:135
double temp_max
Atribuicao de temperatura maxima.
Definition: application.cpp:65
void logEvent(String msg)
Log de excessões.
Definition: application.cpp:309
void ls()
Lista arquivos no sistema de arquivos SPIFFS.
Definition: application.cpp:559
#define RELAY_ONE_PIN
Definition: application.cpp:32
void defineProgram(String flag)
Escolha da fase.
Definition: application.cpp:379
#define RELAY_TWO_PIN
Definition: application.cpp:33
void sleep(unsigned long interval_ms)
Função de sleep sem delay no hardware.
Definition: application.cpp:298
double temp_min
Atribuicao de temperatura minima.
Definition: application.cpp:63
void readFile(String fileToRead)
Leitor do conteúdo de um arquivo.
Definition: application.cpp:413
void settingTemps(String toSlice)
Configuração das temperaturas.
Definition: application.cpp:220
void programLoader ( )

Se existir, carrega o valor do arquivo program.ini.

Quando existe o arquivo program.ini, le o conteudo para a variavel program_to .

Referências progs::fermentation_max, progs::fermentation_min, INI_FILE, logEvent(), progs::maturation_max, progs::maturation_min, progs::priming_max, progs::priming_min, temp_max e temp_min.

Referenciado por defineProgram().

328  {
329  char flag;
330  if (fileExist(INI_FILE)){
331  file_t inifile = fileOpen(INI_FILE,eFO_ReadOnly);
332  fileSeek(inifile,0,eSO_FileStart);
333  fileRead(inifile,&flag,1);
334  fileClose(inifile);
335  //program_to = fileGetContent(INI_FILE);
336  //TODO: check file stat
337  if (flag == 'F'){
340 
341  Serial.println("Programa carregado: FERMENTATION");
342  Serial.print("Minima: ");
343  Serial.println(programs.fermentation_min);
344  Serial.print("Maxima: ");
345  Serial.println(programs.fermentation_max);
346  }
347  else if (flag == 'M'){
350 
351  Serial.println("Programa carregado: MATURATION");
352  Serial.print("Minima: ");
353  Serial.println(programs.maturation_min);
354  Serial.print("Maxima: ");
355  Serial.println(programs.maturation_max);
356  }
357  else if (flag == 'P'){
360 
361  Serial.println("Programa carregado: PRIMING");
362  Serial.print("Minima: ");
363  Serial.println(programs.priming_min);
364  Serial.print("Maxima: ");
365  Serial.println(programs.priming_max);
366  }
367  else{
368  logEvent("O arquivo ini esta vazio ou corrompido.");
369  Serial.println("Arquivo ini vazio ou corrompido.");
370  }
371  }
372 }
double fermentation_min
Definition: application.cpp:52
double temp_max
Atribuicao de temperatura maxima.
Definition: application.cpp:65
void logEvent(String msg)
Log de excessões.
Definition: application.cpp:309
double maturation_min
Definition: application.cpp:54
double fermentation_max
Definition: application.cpp:53
#define INI_FILE
Definition: application.cpp:22
double priming_min
Definition: application.cpp:56
double maturation_max
Definition: application.cpp:55
double priming_max
Definition: application.cpp:57
double temp_min
Atribuicao de temperatura minima.
Definition: application.cpp:63
static progs programs
Definition: application.cpp:60
String progToStr ( )

Converte valores do enumerador em String.

Essa conversão é feita para utilização no método (), para carregamento de definições no próximo boot do ESP8266. O caminho reverso é feito pela função strToProg().

Referências progs::fermentation_max, progs::fermentation_min, progs::maturation_max, progs::maturation_min, progs::priming_max e progs::priming_min.

Referenciado por writePrograms().

165  {
166  String convert = String(programs.fermentation_min);
167  convert.concat("|");
168  convert.concat(programs.fermentation_max);
169  convert.concat("|");
170  convert.concat(programs.maturation_min);
171  convert.concat("|");
172  convert.concat(programs.maturation_max);
173  convert.concat("|");
174  convert.concat(programs.priming_min);
175  convert.concat("|");
176  convert.concat(programs.priming_max);
177 
178  Serial.println("Resultado da conversao:");
179  Serial.println(convert);
180  return convert;
181 }
double fermentation_min
Definition: application.cpp:52
double maturation_min
Definition: application.cpp:54
double fermentation_max
Definition: application.cpp:53
double priming_min
Definition: application.cpp:56
double maturation_max
Definition: application.cpp:55
double priming_max
Definition: application.cpp:57
static progs programs
Definition: application.cpp:60
void publishIamLive ( )

Apenas publica o status da conexão.

Esse publishing é feito a partir de um timer disparado de dentro da função init().

Referências mqtt() e startMqttClient().

Referenciado por init().

537  {
538  if (mqtt.getConnectionState() != eTCS_Connected)
539  startMqttClient(); // Auto reconnect
540 
541  Serial.println("Publicando status");
542  mqtt.publish("freezer/alive", "Alive");
543 }
void startMqttClient()
Inicializador da conexão com o broker.
Definition: application.cpp:546
MqttClient mqtt(MQTT_BROKER, MQTT_PORT, onMessageReceived)
Criacao do objeto para comunicacao via MQTT.
void readFile ( String  fileToRead)

Leitor do conteúdo de um arquivo.

No momento essa função faz exclusivamente a leitura do primeiro byte do arquivo de modo de operação (program.ini). Utilizado apenas em debug.

Referências ls().

Referenciado por onMessageReceived().

413  {
414  ls();
415  Serial.println("Abrindo arquivo...");
416  file_t fileChoose = fileOpen(fileToRead,eFO_ReadOnly);
417  if (fileChoose == -10002){
418  Serial.println("Arquivo nao encontrado. Conteudo existente:");
419  ls();
420  return;
421  }
422  else if (fileChoose == -10010){
423  Serial.println("Descritor de arquivo incorreto");
424  ls();
425  return;
426  }
427  char result[2] = {'\0'};
428  Serial.println("Lendo conteudo...");
429 
430  fileSeek(fileChoose,0,eSO_FileStart);
431  char wrote[40];
432  for (int i=0; i<40;i++){
433  wrote[i] = 0;
434  }
435  int size = fileGetSize(fileToRead);
436  int content = fileRead(fileChoose,&wrote,size);
437  Serial.print("Conteudo do arquivo: ");
438  Serial.println(wrote);
439  fileClose(fileChoose);
440 }
void ls()
Lista arquivos no sistema de arquivos SPIFFS.
Definition: application.cpp:559
void settingTemps ( String  toSlice)

Configuração das temperaturas.

Essa função permite mudar as temperaturas pré-definidas para quando o tipo de programa for escolhido, a mínima e máxima desse programa já estejam dentro do padrão desejado. O parâmetro tem que receber o formato MINIMA|MAXIMA|PROGRAMA . Ex.: 13.5|14.5|M Isso dá uma mínima de 13.5, máxima de 14.5 e esses valores são inseridos no programa MATURATION. Os programas são: F (Fermentation) M (Maturation) P (Priming)

Essa função substitui os valores do respectivo programa no enumerador programs.

Referências progs::fermentation_max, progs::fermentation_min, progs::maturation_max, progs::maturation_min, progs::priming_max, progs::priming_min e writePrograms().

Referenciado por onMessageReceived().

220  {
221  float tempMin = 0;
222  float tempMax = 0;
223 
224  Serial.println(toSlice);
225  //String toSlice = "13.0|17.5|F";
226  int first = toSlice.indexOf('|');
227  tempMin = toSlice.substring(0,first).toFloat();
228 
229  int last = toSlice.lastIndexOf('|');
230  tempMax = toSlice.substring(first+1,last).toFloat();
231 
232  Serial.println("Minima e Maxima:");
233  Serial.println(tempMin);
234  Serial.println(tempMax);
235  Serial.println("----====----====----====----");
236 
237  char FMP = toSlice.charAt(toSlice.length()-1);
238 
239  Serial.print("Nova minima: ");
240  Serial.println(tempMin);
241  Serial.print("Nova maxima: ");
242  Serial.println(tempMax);
243  Serial.print("Programa: ");
244  Serial.println(FMP);
245 
246  if (FMP == 'F'){
247  programs.fermentation_min = tempMin;
248  programs.fermentation_max = tempMax;
249  Serial.println("Novos valores atribuidos ao programa Fermentation.");
250  }
251  else if (FMP == 'M'){
252  programs.maturation_min = tempMin;
253  programs.maturation_max = tempMax;
254  Serial.println("Novos valores atribuidos ao programa Maturation.");
255  }
256  else if (FMP == 'P'){
257  programs.priming_min = tempMin;
258  programs.priming_max = tempMax;
259  Serial.println("Novos valores atribuidos ao programa Priming.");
260  }
261  Serial.println("Não esqueca de escolher o programa de atuacao agora.");
262  writePrograms();
263 }
double fermentation_min
Definition: application.cpp:52
void writePrograms()
Escreve os limites de temperatura no arquivo limits.ini.
Definition: application.cpp:192
double maturation_min
Definition: application.cpp:54
double fermentation_max
Definition: application.cpp:53
double priming_min
Definition: application.cpp:56
double maturation_max
Definition: application.cpp:55
double priming_max
Definition: application.cpp:57
static progs programs
Definition: application.cpp:60
void sleep ( unsigned long  interval_ms)

Função de sleep sem delay no hardware.

Essa função faz o delay sem causar paralização de hardware, de modo que nunca acontecerá um reset por WDT (Watch Dog Timer), pois as tarefas de background continuam funcionando livremente (toda a parte relacionada ao wifi, por exemplo). O parâmetro recebido é o intervalo desejado em milisegundos. Dentro da função pode-se reparar que há um delayMilliseconds(1), que é 1ms de delay por loop, para que o processador não seja ocupado integralmente na execução do loop. Atenção: Utilizar sleep() é a melhor forma de garantir que não haverá uma indisponibilidade de recursos para a tarefa de background, o que poderia ocasionar um reset do WDT (Watch Dog Timer).

Referenciado por init(), logEvent(), onMessageReceived() e writePrograms().

298  {
299  unsigned long initial_time = millis();
300  unsigned long delta = millis()-initial_time;
301 
302  while (delta < interval_ms){
303  delta = millis()-initial_time;
304  delayMilliseconds(1); //apenas para a CPU 'respirar'
305  }
306 }
void split ( char *  buf,
int  size 
)

Reatribuição da struct programs.

Quando modificados os valores da struct de limites dos programas de temperatura, é necessário carregá-los. Essa função se encarrega de fazer a reatribuição dos valores.

Referências progs::fermentation_max, progs::fermentation_min, progs::maturation_max, progs::maturation_min, progs::priming_max e progs::priming_min.

Referenciado por strToProg().

88  {
89  char value[5] = {0};
90  int j = 0;
91  Vector <String> str_temps;
92 
93  for (int i=0;i<size;i++){
94  if (buf[i] == '|'){
95  value[j] = 0;
96  //Adiciona char* ao vetor de strings...
97  str_temps.add(value);
98 
99  //zerar o array que guarda o valor
100  for (int k=0;k<5;k++){
101  value[k] = 0;
102  }
103  //reinicia o contador da variavel 'value'
104  j = 0;
105  }
106  else{
107  //um,dois,tres, pin...
108  value[j] = buf[i];
109  j++;
110  }
111  }
112  str_temps.add(value);
113  Serial.println("---------------------");
114  for (int k=0;k<str_temps.count();k++){
115  Serial.println(str_temps.at(k));
116  }
117  Serial.println("---------------------");
118 
119  programs.fermentation_min = str_temps[0].toFloat();
120  programs.fermentation_max = str_temps[1].toFloat();
121  programs.maturation_min = str_temps[2].toFloat();
122  programs.maturation_max = str_temps[3].toFloat();
123  programs.priming_min = str_temps[4].toFloat();
124  programs.priming_max = str_temps[5].toFloat();
125  Serial.println("Novos valores atribuidos.");
126 }
double fermentation_min
Definition: application.cpp:52
double maturation_min
Definition: application.cpp:54
double fermentation_max
Definition: application.cpp:53
double priming_min
Definition: application.cpp:56
double maturation_max
Definition: application.cpp:55
double priming_max
Definition: application.cpp:57
static progs programs
Definition: application.cpp:60
void sta_if ( )

Configuração inicial da interface sta e desabilitação do modo AP.

Essa função se encarrega de fazer a primeira conexão com a rede WiFi especificada nos defines no inicio do programa. Após confirmada a conexão, o modo AP é desabilitado. Nos resets do ESP8266 essa função não terá mais efeito.

Referências failed(), MY_PASSWD, MY_SSID e successful().

Referenciado por init().

588  {
589  if (!WifiStation.isEnabled()){
590  WifiStation.enable(true);
591  Serial.println("Ativando interface sta...");
592  }
593  if (!WifiStation.isConnected()){
594  WifiStation.config(MY_SSID,MY_PASSWD,true);
595  Serial.println("Conectando ao SSID...");
596  }
597  if (WifiAccessPoint.isEnabled() && WifiStation.isConnected()){
598  WifiAccessPoint.enable(false);
599  Serial.println("Desativando AP...");
600  }
601 
602  WifiStation.waitConnection(successful,20,failed);
603 }
#define MY_PASSWD
Definition: application.cpp:30
#define MY_SSID
Definition: application.cpp:29
void successful()
Chamada em caso de sucesso na conexão com o broker.
Definition: application.cpp:575
void failed()
Chamada em caso de falha da conexão com o broker.
Definition: application.cpp:568
void startMqttClient ( )

Inicializador da conexão com o broker.

Referências mqtt(), MQTT_PASSWD, MQTT_USER e procTimer.

Referenciado por checkMQTTDisconnect(), keepLooking(), publishIamLive() e successful().

546  {
547  procTimer.stop();
548  TcpClientState state_is = mqtt.getConnectionState();
549  Serial.println("------------------------");
550  Serial.println(state_is);
551  Serial.println("------------------------");
552  mqtt.connect("ElectroDragon", MQTT_USER, MQTT_PASSWD);
553  //mqtt.setCompleteDelegate(checkMQTTDisconnect);
554  mqtt.subscribe("beer/#");
555 }
#define MQTT_PASSWD
Definition: application.cpp:19
#define MQTT_USER
Definition: application.cpp:18
MqttClient mqtt(MQTT_BROKER, MQTT_PORT, onMessageReceived)
Criacao do objeto para comunicacao via MQTT.
Timer procTimer
Definition: application.cpp:67
void strToProg ( )

Carrega os valores do arquivo limits.ini.

Quando há qualquer modificação em um dos valores do struct programs, um arquivo limits.ini é criado com todos os valores de atribuição do struct programs. Se houver um reboot, os valores predefinidos in flow não serão perdidos, pois serão caregados desse arquivo. Essa função se encarrega de fazer essa carga. Ela é chamada a partir da primeira função do init (adjustments()).

Referências LIM_FILE e split().

Referenciado por onMessageReceived().

135  {
136  if (!fileExist(LIM_FILE)){
137  Serial.println("Arquivo nao existe. Fui.");
138  return;
139  }
140  Serial.println("Pegando tamanho do arquivo em Bytes...");
141  int size = fileGetSize(LIM_FILE);
142  char buf[size];
143  for (int i=0;i<size;i++){
144  buf[i] = 0;
145  }
146  Serial.println("Abrindo o arquivo de limites...");
147  file_t limits_ini = fileOpen(LIM_FILE, eFO_ReadOnly);
148  fileSeek(limits_ini,0,eSO_FileStart);
149  int size_return = fileRead(limits_ini,&buf,size);
150  Serial.print("size_return: ");
151  Serial.println(size_return);
152  fileClose(limits_ini);
153 
154  Serial.println("Imprimindo valores do arquivo:");
155  Serial.print("Valores limites: ");
156  Serial.println(buf);
157  split(buf,size);
158 }
void split(char *buf, int size)
Reatribuição da struct programs.
Definition: application.cpp:88
#define LIM_FILE
Definition: application.cpp:24
void successful ( )

Chamada em caso de sucesso na conexão com o broker.

Referências ls(), mqtt() e startMqttClient().

Referenciado por sta_if().

575  {
576  Serial.println("Conexao bem sucedida. Iniciando MQTT...");
577  mqtt.publish("freezer/alive", "Starting");
578  startMqttClient();
579  ls();
580 }
void startMqttClient()
Inicializador da conexão com o broker.
Definition: application.cpp:546
void ls()
Lista arquivos no sistema de arquivos SPIFFS.
Definition: application.cpp:559
MqttClient mqtt(MQTT_BROKER, MQTT_PORT, onMessageReceived)
Criacao do objeto para comunicacao via MQTT.
void writePrograms ( )

Escreve os limites de temperatura no arquivo limits.ini.

Inicialmente o programa é iniciado com predefinições da inicialização do struct programs. Caso exista em disco o arquivo limits.ini, esses valores são carregados para o enumerador programs com a função de carga (). A seleção de um novo valor para qualquer um dos 3 programs é feita no tópico "beer/minMax" e a mensagem deve ter o formato descrito na função (String toSlice) .

Referências LIM_FILE, progToStr() e sleep().

Referenciado por settingTemps().

192  {
193  if (fileExist(LIM_FILE)){
194  fileDelete(LIM_FILE);
195  }
196  sleep(15);
197  char buf[40] = {'\0'};
198  file_t limits_ini = fileOpen(LIM_FILE,eFO_ReadWrite | eFO_CreateIfNotExist);
199  String result = progToStr();
200  fileWrite(limits_ini,result.c_str(),result.length());
201  fileSeek(limits_ini,0,eSO_FileStart);
202  fileRead(limits_ini,&buf,result.length()-1);
203  fileClose(limits_ini);
204 
205 }
String progToStr()
Converte valores do enumerador em String.
Definition: application.cpp:165
void sleep(unsigned long interval_ms)
Função de sleep sem delay no hardware.
Definition: application.cpp:298
#define LIM_FILE
Definition: application.cpp:24

Variáveis

Timer checkConn

Referenciado por init().

Timer ESPlives

Referenciado por init().

Timer loadLimits
Timer procTimer
String program_to = "M"

Variavel que recebe a flag do estilo de programa.

O arquivo program.ini devera conter 1 byte, sendo: F - para Fermentacao M - para Maturacao P - para Priming Sempre que o programa for iniciado, a primeira tarefa sera verificar a existencia de um programa (mais adiante serao vistos detalhes). Se o arquivo de programa existir, seu conteudo alimenta essa variavel program_to

progs programs = {19.0,22.0,1.0,2.0,20.0,22.0}
static
double temp_max = programs.fermentation_max

Atribuicao de temperatura maxima.

Referenciado por onMessageReceived() e programLoader().

double temp_min = programs.fermentation_min

Atribuicao de temperatura minima.

Referenciado por onMessageReceived() e programLoader().