# Trabalhando com Sinais Analógicos no ESP32 com MicroPython >[!TLDR] Resumo >Para ler valores analógicos em um [[ESP32]] com [[MicroPython]], utilize `adc = machine.ADC(machine.Pin(numero_do_pino))` (por exemplo, pino 36). `adc.read()` retorna um valor bruto (geralmente de 0 a 4095). Para converter para tensão, multiplique o valor bruto por `3.3 / 4095` (para um [[ESP32]] de 3.3V). Sempre verifique o diagrama de pinagem e a tensão de operação da sua placa. ## Informações Detalhadas A utilização de pinos analógicos no [[ESP32]] com [[MicroPython]] envolve a leitura de níveis de tensão de um pino específico. O [[ESP32]] possui vários canais ADC (Conversor Analógico-Digital), que são acessíveis através de pinos GPIO designados. Abaixo, detalhamos como utilizá-los: ### 1. Importando o Módulo `machine` O primeiro passo é importar o módulo `machine`, que fornece as classes necessárias para interagir com os periféricos de hardware, incluindo o ADC. ```python import machine ``` ### 2. Criando um Objeto ADC Para ler um sinal analógico, você precisa criar um objeto `ADC` associado a um pino analógico específico. ```python # Cria um objeto ADC associado ao pino GPIO 36 adc = machine.ADC(machine.Pin(36)) ``` Substitua `36` pelo número do pino analógico desejado. Pinos como 36, 39, 34 e 35 são comumente usados para ADC no [[ESP32]]. É crucial consultar a documentação da sua placa [[ESP32]] para confirmar a pinagem exata e os pinos disponíveis para ADC. ### 3. Lendo o Valor Bruto Após configurar o objeto ADC, você pode ler o valor analógico bruto do pino: ```python valor_bruto = adc.read() ``` Este método retorna um valor inteiro que representa o nível de tensão lido. A faixa desse valor depende da resolução do ADC, que no [[ESP32]] é tipicamente de 12 bits. Isso significa que os valores brutos estarão entre 0 e 4095 ($2^{12} - 1$). ### 4. Convertendo para Tensão Para obter a tensão real em Volts, você precisa converter o valor bruto lido. A maioria dos [[ESP32]] opera com uma tensão de referência de 3.3V. ```python # Para um ESP32 operando a 3.3V tensao = adc.read() * (3.3 / 4095) ``` Nesta fórmula, `3.3` é a tensão de referência máxima que o ADC pode medir, e `4095` é o valor máximo que um ADC de 12 bits pode retornar. Se o seu [[ESP32]] ou a configuração do ADC usar uma tensão de referência diferente, ajuste o valor `3.3` de acordo. ## Considerações Importantes * **Seleção de Pinos:** Sempre verifique a documentação da sua placa [[ESP32]] para confirmar quais pinos são compatíveis com a funcionalidade ADC. Usar um pino incorreto resultará em falha. * **Faixa de Tensão de Entrada:** O ADC do [[ESP32]] tem uma faixa de entrada padrão de 0 a 3.3V (ou a tensão de operação da sua placa específica). Aplicar uma tensão fora dessa faixa pode danificar o [[ESP32]]. * **Resolução:** A resolução de 12 bits significa que o ADC pode distinguir entre 4096 ($2^{12}$) diferentes níveis de tensão. Isso determina a precisão das suas leituras. * **Atenuação (Attenuation):** O [[ESP32]] permite configurar a atenuação do ADC, o que expande a faixa de tensão de entrada. Isso é útil para medir tensões maiores que 3.3V, mas pode reduzir a precisão. Consulte a documentação do módulo `machine.ADC` para detalhes sobre como configurar a atenuação. * Exemplo: `adc.atten(machine.ADC.ATTN_11DB)` configura a atenuação para permitir uma faixa de entrada de até aproximadamente 2.5V (dependendo do chip [[ESP32]] específico), mapeando-a para a faixa de 0-4095. Outras opções incluem `ATTN_0DB`, `ATTN_2_5DB`, `ATTN_6DB`. * **Calibração:** Para leituras mais precisas, especialmente em aplicações críticas, considere calibrar o ADC. Isso envolve medir tensões conhecidas e ajustar seus cálculos para compensar quaisquer desvios ou não linearidades do sensor e do ADC. Esta explicação abrangente deve ajudá-lo a começar a usar os pinos analógicos no seu [[ESP32]] com [[MicroPython]]. Lembre-se de adaptar o código e as considerações aos requisitos específicos do seu hardware e aplicação.