ESP32 Publicando Dados na Nuvem (Google)

CONAENGE » ESP32 » Automação com ESP32 e Cloud (Google)

Não existe dúvida de que o Arduino mudou a forma do mundo ver a eletrônica/automação, tornando o assunto muito mais amigável aos não especialistas no assunto.

Com isto, uma série de ideias e movimentos estão cada vez mais fortes. A Crescer Engenharia está dando robustez a estas ideias, tornando-as usuais na indústria e como produto comercializável.

Lançaram a CPB32 vista abaixo:

CPB - foto32_sf - 800px - ESP32

Levando as ideias a outro patamar, pois o ESP32 é um dual core de 32 bits, com 10x mais velocidade de clock que o Arduino Uno, entradas e saídas analógicas de 12 bis e – o principal – WiFi e Bluetooth onboard.

Lembrando que tudo o que é mostrado neste artigo funciona no ESP32, e – com algumas modificações – no ESP8266 também.

O projeto deste artigo é ter a CPB32 como um monitorador de consumo elétrico de uma empresa, publicando esse consumo periodicamente em uma planilha do Google, com isto poderemos ter os dados armazenados na nuvem (cloud). Este conceito pode ser expandido a muitos tipos de aplicações, como sensores de distância/presença, medições de nível em caixas d’ água, entre muitas outras aplicações.

O Google Sheets é uma das ferramentas disponibilizadas pelo Google, e está vinculada a outra ferramenta Google chamada Drive. Ela é gratuita, bastando você ter uma conta do Gmail / Google. Funciona de maneira semelhante ao Microsoft Excel. Certamente é um diferencial deste artigo usar essa ferramenta.

Conheça o Curso Automação com Arduino!

HARDWARE com ESP32:

Hardware ESP32

1 – Fonte 24V / 1A
2 – CPB32
3 – Shield de Medição AC Crescer
4 – Sensor de corrente AC SCT013

SOFTWARE para ESP32:

Trabalharemos em 2 frentes, Passo 1 e Passo 2, o primeiro é a preparação da planilha do Google (Google Sheets) e depois trabalharemos no código da CPB32.

PASSO 1: CONFIGURANDO O GOOGLE SHEETS

Você tendo a conta do Google, tem acesso ao Drive via App`s do Google.

Google Apps com o ESP32

No canto superior esquerdo, vá em Novo:

Google Drive

Escolhendo uma planilha em branco:

Planilha em Branco

Clique no nome da planilha e renomeie, nós colocamos “BlogCrescerCPB32”:

Copie a parte da URL que nos interessa, e guardar num arquivo de apoio para usarmos no momento correto:

135Ws-8fP_QFqqtJd16GHyjVJvX5hKifp1gAA2WRwSTY

Agora vamos criar um script para rodar a Macro:

Por fim, cole todo o código abaixo, no lugar do código que está no script:

function doGet(e) { 
 Logger.log( JSON.stringify(e) ); // view parameters
 var result = 'Ok'; // assume success
 if (e.parameter == 'undefined') {
 result = 'No Parameters';
 }
 else {
 var sheet_id = '176RxIsfqc6a5fuljrN6-rRM_uF3Xf0k2GCXgnThYXek';  // Spreadsheet ID
 var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet(); // get Active sheet
 var newRow = sheet.getLastRow() + 1; 
 var rowData = [];
 d=new Date();
 rowData[0] = d; // Timestamp in column A
 rowData[1] = d.toLocaleTimeString(); // Timestamp in column A
 
 for (var param in e.parameter) {
 Logger.log('In for loop, param=' + param);
 var value = stripQuotes(e.parameter[param]);
 Logger.log(param + ':' + e.parameter[param]);
 switch (param) {
 case 'value1': //Parameter 1, It has to be updated in Column in Sheets in the code, orderwise
 rowData[2] = value; //Value in column A
 result = 'Written on column A';
 break;
 case 'value2': //Parameter 2, It has to be updated in Column in Sheets in the code, orderwise
 rowData[3] = value; //Value in column B
 result += ' Written on column B';
 break;
 case 'value3': //Parameter 3, It has to be updated in Column in Sheets in the code, orderwise
 rowData[4] = value; //Value in column C
 result += ' Written on column C';
 break;
 default:
 result = "unsupported parameter";
 }
 }
 Logger.log(JSON.stringify(rowData));
 // Write new row below
 var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
 newRange.setValues([rowData]);
 }
 // Return result of operation
 return ContentService.createTextOutput(result);
}
function stripQuotes( value ) {
 return value.replace(/^["']|['"]$/g, "");
}

E cole a parte da URL copiada anteriormente no local indicado abaixo, comentado como //Spreadsheet ID:

Código de Progamação para ESP32

Nós iremos inserir 3 valores, por isto podemos verificar no código os “value1”, “value2” e “value3”.

Agora vamos publicar o Script, pois o ESP32 irá buscar o script, e o script irá inserir os dados na planilha.

Seguindo a sequência de telas abaixo:

Clique em avançado e depois no local abaixo:

Copie toda a URL gerada, e confirme no seu celular ou email a permissão que o Google irá requerer, para segurança.

Este é um dos momentos bem interessantes do projeto, pois agora temos uma URL que possibilita testar a planilha e é o caminho para todos os acessos a ela.

https://script.google.com/macros/s/AKfycbxpDJFU3kc6LfkqM_Yfq1mHYnz5t08GdCteX7X4MU1_2l01QU59/exec

Vamos adicionar:

?value1=113&value2=125&value3=55

Resultando em:

https://script.google.com/macros/s/AKfycbxpDJFU3kc6LfkqM_Yfq1mHYnz5t08GdCteX7X4MU1_2l01QU59/exec?value1=113&value2=125&value3=55

Colocando esta URL no navegador, vamos verificar se os valores aparecem na planilha, sendo que no navegador retornou algo parecido com:

E na planilha foi:

E a cada vez que rodar a URL, será inserida uma nova linha abaixo.

PASSO 2: PROGRAMANDO A CPB32 ou ESP32

Agora vamos ao código que pode ser baixado no link a seguir:

https://github.com/casaautomacao/ESP32_GoogleSheets_v2

O código tem duas partes distintas, sendo uma em cada Tarefa (Task). A Tarefa que roda no Core 0 (Núcleo 0), é a atividade de envio para o Google Sheets e leva cerca de 4 segundos. Já a atividade do Core 1, é a medição da corrente e tensão da rede, já calculando o valor RMS destes sinais.

Caso você não conheça o conceito de Core, acesse este outro artigo: Usando o Dual Core do ESP32.

Vou apontar de agora em diante, alguns pontos chaves para funcionar e gerar o gráfico abaixo:

Na última aba tem algumas funções para conexão wifi.

Na primeira Aba, tem a configuração dos Cores no setup e a chamada da função da conexão WiFi.

Atenção pois algumas versões do ESP32 não conectam na primeira tentativa no WiFi, necessitando resetar a placa para na próxima tentativa conectar.

Em nossas aplicações, quando não há sucesso na conexão, o ESP reseta e tenta novamente.

Na primeira aba temos a inserção do endereço do script, ali que é feita a amarração entre ESP32 e Google Script.
Script para ESP32 com o Google

O ponto de atenção principal nesta primeira Aba está no loop(), onde estamos desabilitando a proteção de watchdog no Core 0, por esta proteção não deixar a aplicação rodar mais que uma hora sem que ocorra um reset.

Na aba da Task1 que roda no Core 1, temos o cálculo do RMS. O detalhamento vai depender do número de comentários neste blog, se forem muitos vamos detalhar como foi feito o cálculo e qual a performance. Caso vocês não tenham interesse…

Mas basicamente ele calcula a tensão e a corrente RMS e disponibiliza para envio na Task2 que roda no Core 0.

Então na Task2 deve ter o que mais é necessário para o projeto funcionar.
Código - ESP32

Sendo uma função para conectar ao host, que é o próprio google.
Conectar o ESP32 com o host (Google)

E o send_data para montagem da URL e envio, sendo esta, a mais complexa.

String Request = String("GET ") + "/macros/s/" + GScriptId + "/exec?" + "value1=" + tensaoFinal + "&value2=" + correnteFinal + "&value3=" + tempoEnvio + " HTTP/1.1\r\n" + "Host: script.google.com\r\n" + "User-Agent: ESP8266\r\n" + "Connection: close\r\n" + "\r\n\r\n";

A montagem da String Request na linha 41 que tem todo o texto acima, é o ponto de maior atenção, pois precisa resultar em algo semelhante ao exemplo abaixo:

Get /macros/s/AKfycbxpDJFU3kc6LfkqM_Yfq1mHYnz5t08GdCteX7X4MU1_2l01QU59/ exec?value1=113&value2=125&value3=55 HTTP/1.1\r\n Host: script.google.com\r\n
User-Agent: ESP8266\r\n Connection: close\r\n\r\n\r\n

E tudo isto enviado para o cliente que é o script do Google.

O que vem depois, fica para você olhar no Monitor Serial da IDE do Arduino.

FUNCIONAMENTO PRÁTICO COM APLICAÇÃO REAL: CPB32 COMO MEDIDORA DE CONSUMO DE ENERGIA ELÉTRICA

E aí o que achou desta aplicação?

> > > Quero Saber Mais Sobre Automação!

FONTE: artigo originalmente publicado no website Crescer Engenharia.

Inscreva-se no 6º Congresso Nacional Online de Engenharia Mecânica e Automação! (de 06 a 08/10/2025)