ESP32 - Módulo Termopar MAX6675
A maioria dos sensores de temperatura que abordamos em outros tutoriais - o DS18B20, o DHT22, o LM35 e similares - chega no máximo a algo em torno de 100-150°C. Isso é mais do que suficiente para um cômodo, uma geladeira ou um canteiro de jardim, mas não serve para nada se você precisa saber o quanto esquenta de verdade um forno industrial, a ponta de um ferro de solda ou o interior de um forno de pizza. Para tarefas assim, os hobbistas usam um termopar, combinado com um pequeno chip digitalizador chamado MAX6675.
Neste tutorial, vamos conectar um ESP32 a uma placa breakout MAX6675 e a uma sonda termopar Tipo K e, depois, ler a temperatura no Serial Monitor em Celsius e em Fahrenheit.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
O Que Exatamente É um Termopar?
Um termopar é simplesmente formado por dois fios de metais diferentes soldados juntos em uma das pontas, formando o que chamamos de junção quente. Quando essa junção esquenta (ou esfria), uma tensão muito pequena aparece entre os fios, e essa tensão sobe e desce junto com a temperatura. Como são apenas dois pedaços de fio, e não um sensor de silício delicado, um termopar consegue sobreviver - e medir - em lugares que destruiriam na hora um sensor comum. A versão Tipo K, feita com fios de Chromel e Alumel, é de longe a mais comum e consegue trabalhar aproximadamente de -328°F a +2300°F.
Sobre o Módulo MAX6675
Sozinho, o sinal de nível de milivolts de um termopar é pequeno demais e ruidoso demais para um microcontrolador ler diretamente. O módulo MAX6675 resolve isso: ele é uma pequena placa breakout construída em torno do CI MAX6675, vendida junto com uma sonda Tipo K já conectada a ela.
Pinagem do Módulo MAX6675

O chip MAX6675 na breakout amostra continuamente o sinal da sonda, faz internamente a compensação da junção fria e entrega ao ESP32 uma leitura de temperatura de 12 bits pronta para uso por meio de um barramento simples de 3 fios. Seus pinos são:
- VCC: entrada de alimentação, de 3.0V a 5.5V.
- GND: terra.
- SCK: entrada do clock serial, controlada pelo ESP32.
- CS: seleção do chip (chip select) - o ESP32 coloca este pino em LOW enquanto está lendo uma amostra.
- SO: apenas saída de dados serial (não existe pino de entrada de dados; o módulo nunca recebe comandos, ele só envia dados).
Um pequeno bloco de bornes de parafuso na borda oposta da placa é onde a sonda é conectada, marcado com + e -; o fio vermelho da sonda vai no + e o fio azul no -.
Para completar as especificações: a própria breakout consegue digitalizar temperaturas de 0°C até 1024°C, tem precisão de cerca de ±3°C e uma resolução de aproximadamente 0.25°C - embora a sonda incluída, descrita a seguir, seja o verdadeiro fator limitante.
A Sonda Tipo K Incluída
A sonda que vem com o módulo é um cabo fino com ponta de aço inoxidável, com cerca de 18 polegadas de comprimento, e ela é especificada apenas para 0°C a 80°C - ótima para uma xícara de café ou um terrário, mas você vai querer uma sonda com especificação mais alta antes de apontá-la para um forno de cerâmica. Procure os fios vermelho (positivo) e azul (negativo) na ponta que se conecta ao bloco de bornes da breakout.
Diagrama de Ligação
Alimente o módulo pelo ESP32: VCC no 5V (3.3V também funciona) e GND no GND. Os três pinos restantes - SCK, CS e SO - podem ir cada um para qualquer GPIO livre do ESP32, já que a biblioteca os controla com bit-banging simples, em vez de usar o periférico SPI de hardware. Por último, encaixe os fios vermelho e azul da sonda termopar nos terminais + e - do módulo.

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
Tabela de ligação entre o Módulo MAX6675 e o ESP32
| Módulo MAX6675 | ESP32 |
|---|---|
| VCC | → 5V |
| GND | → GND |
| SCK | → GPIO19 |
| CS | → GPIO18 |
| SO | → GPIO5 |
Código ESP32
Passos Rápidos
- Novo no ESP32? Comece primeiro pela configuração do ambiente do ESP32 na Arduino IDE.
- Ligue o módulo MAX6675 e a sonda termopar ao ESP32 como mostrado no diagrama acima.
- Conecte o ESP32 ao seu computador com um cabo USB.
- Abra a Arduino IDE.
- Em Tools, escolha a placa ESP32 correspondente (por exemplo, ESP32 Dev Module) e a porta COM correta.
- Abra o painel Libraries pela barra de ícones do lado esquerdo.
- Digite "MAX6675" na caixa de pesquisa e encontre a biblioteca publicada pela Adafruit.
- Clique em Install.
- Search for MAX6675 library created by Adafruit and click the Install button.
- Cole o código acima na IDE.
- Clique em Upload para gravar o sketch no ESP32.
- Aqueça a ponta do termopar (segure-a, assopre nela, mergulhe-a em água morna) ou deixe-a esfriar.
- Abra o Serial Monitor para acompanhar as leituras chegando.
※ Nota:
Está vendo uma leitura travada ou claramente errada? Primeiro verifique de novo a ligação dos pinos SCK/CS/SO e, depois, confirme se os fios vermelho e azul do termopar estão bem presos nos bornes de parafuso do módulo - um fio solto é a causa mais comum de uma leitura travada ou sem sentido.
Explicação do Código
O sketch começa incluindo o cabeçalho da biblioteca MAX6675, que dá ao sketch do ESP32 acesso à classe MAX6675.
Três constantes registram em quais GPIOs do ESP32 os pinos SCK, CS e SO do módulo estão ligados.
Em seguida, um único objeto MAX6675, thermocouple, é criado com esses três pinos - é ele que o resto do sketch vai chamar para fazer uma leitura.
O setup() só precisa iniciar a porta serial, para termos onde imprimir os resultados, e fazer uma pequena pausa para deixar o MAX6675 terminar de ligar antes da primeira leitura.
Dentro do loop(), as duas chamadas da biblioteca que importam são:
- Thermocouple.readCelsius(): obtém a leitura mais recente em graus Celsius.
- Thermocouple.readFahrenheit(): obtém a mesma leitura convertida para Fahrenheit.
Um delay() de um segundo encerra o loop para que as leituras passem em um ritmo confortável, em vez de inundar o Serial Monitor.