# 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.