0% acharam este documento útil (0 voto)
39 visualizações17 páginas

Tutorial Completo - Programação Do ESP32 Com MicroPython

O documento é um tutorial completo sobre programação do ESP32 com MicroPython, abordando desde a instalação até projetos práticos. Ele inclui tópicos como controle de GPIOs, comunicação serial, conexão WiFi e exemplos de projetos como uma estação meteorológica e controle remoto via web. Além disso, fornece soluções para problemas comuns e dicas de otimização.

Enviado por

marcontony.san
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
39 visualizações17 páginas

Tutorial Completo - Programação Do ESP32 Com MicroPython

O documento é um tutorial completo sobre programação do ESP32 com MicroPython, abordando desde a instalação até projetos práticos. Ele inclui tópicos como controle de GPIOs, comunicação serial, conexão WiFi e exemplos de projetos como uma estação meteorológica e controle remoto via web. Além disso, fornece soluções para problemas comuns e dicas de otimização.

Enviado por

marcontony.san
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Tutorial Completo: Programação do ESP32

com MicroPython

Índice

1. Introdução
2. Materiais Necessários
3. Instalação e Configuração do MicroPython no ESP32
4. Configuração do Thonny IDE
5. Primeiros Passos com MicroPython
6. Controle de GPIOs
7. Comunicação Serial
8. PWM e Controle de Motores
9. Sensores Analógicos
10. WiFi e Conexão com Internet
11. Projetos Práticos
12. Solução de Problemas

Introdução

O ESP32 é um microcontrolador poderoso com WiFi e Bluetooth integrados, perfeito para


projetos IoT. O MicroPython é uma implementação leve do Python 3 para microcontroladores,
tornando a programação acessível e divertida.

Vantagens do MicroPython no ESP32:

Sintaxe simples e intuitiva


REPL interativo para testes rápidos
Gerenciamento automático de memória
Bibliotecas para periféricos comuns
Ideal para prototipagem rápida

Materiais Necessários
Hardware:
Placa ESP32 (qualquer modelo: DOIT ESP32 DevKit V1, NodeMCU-32S, etc.)
Cabo USB (micro-USB)
LEDs, resistores (220Ω-1kΩ)
Botões/pushbuttons
Protoboard e jumpers
Sensores diversos (opcional)

Software:
Thonny IDE (última versão)
Driver USB-Serial (CP210x ou CH340, dependendo da placa)

Instalação e Configuração do MicroPython no ESP32

Passo 1: Instalar os drivers USB

# Para chips CP210x (mais comum)


Windows: Baixe de [Link]
drivers
Linux: Geralmente já incluso
macOS: Incluso ou via Homebrew

Passo 2: Baixar o firmware MicroPython


1. Acesse [Link]/download/esp32/
2. Baixe a versão mais recente (arquivo .bin)

Passo 3: Instalar o [Link]

# Instalar via pip


pip install esptool

# Verificar instalação
[Link] version

Passo 4: Apagar a memória flash


# Substitua COM3 pela porta correta
# Windows:
[Link] --port COM3 erase_flash

# Linux/macOS:
[Link] --port /dev/ttyUSB0 erase_flash

Passo 5: Gravar o firmware

# Windows:
[Link] --chip esp32 --port COM3 write_flash -z 0x1000
caminho_para_firmware.bin

# Linux/macOS:
[Link] --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000
caminho_para_firmware.bin

Configuração do Thonny IDE

Instalação

# Baixe de [Link]
Windows: Instalador .exe
Linux: sudo apt install thonny # ou via pip
macOS: .pkg installer

Configuração Inicial
1. Abra o Thonny

2. Configure o interpretador:

Menu: Run → Configure interpreter


Selecione "MicroPython (ESP32)"
Escolha a porta correta (COM3, /dev/ttyUSB0, etc.)
Clique em "Install or update firmware" se necessário

3. Verifique a conexão:

Abra o shell (View → Shell)


Deve aparecer >>> indicando REPL ativo
Digite: print("Hello ESP32!")

Primeiros Passos com MicroPython

Hello World e Blink

# Seu primeiro programa


print("Olá, ESP32!")

# Blink básico
from machine import Pin
import time

led = Pin(2, [Link]) # GPIO2 geralmente tem LED interno

while True:
[Link](1) # Liga LED
[Link](0.5)
[Link](0) # Desliga LED
[Link](0.5)

Entendendo o REPL

# REPL - Read-Eval-Print Loop


# Testes rápidos sem precisar salvar

>>> import machine


>>> [Link]() # Mostra frequência do processador
>>> import esp
>>> esp.flash_size() # Tamanho da flash
>>> help('modules') # Lista módulos disponíveis

Controle de GPIOs

Configuração Básica de Pinos


from machine import Pin
import time

# Configuração de saída
led_vermelho = Pin(15, [Link])
led_verde = Pin(16, [Link])

# Configuração de entrada com pull-up


botao = Pin(0, [Link], Pin.PULL_UP)

# Controle básico
led_vermelho.on() # Liga
led_vermelho.off() # Desliga
led_verde.toggle() # Inverte estado

# Leitura de botão
if [Link]() == 0: # PULL_UP: 0 = pressionado
print("Botão pressionado!")

Interrupções (IRQ)

from machine import Pin


import time

contador = 0

def botao_pressionado(pin):
global contador
contador += 1
print(f"Botão pressionado {contador} vezes")

# Configurar interrupção
botao = Pin(0, [Link], Pin.PULL_UP)
[Link](trigger=Pin.IRQ_FALLING, handler=botao_pressionado)

# Loop principal
while True:
[Link](1)

Comunicação Serial

UART
from machine import UART
import time

# Configurar UART
uart = UART(1, baudrate=9600, tx=17, rx=16)

# Enviar dados
[Link]("Hello Serial!\n")

# Receber dados
if [Link]():
dados = [Link]()
print(dados)

I2C - Comunicação com sensores

from machine import Pin, I2C


import time

# Configurar I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)

# Escanear dispositivos
dispositivos = [Link]()
print("Dispositivos I2C:", [hex(addr) for addr in dispositivos])

# Exemplo com sensor BMP280 (pressão/temperatura)


import bmp280 # Biblioteca externa
sensor = bmp280.BMP280(i2c)
temperatura = [Link]
pressao = [Link]

SPI
from machine import Pin, SPI
import time

# Configurar SPI
spi = SPI(1, baudrate=1000000, polarity=0, phase=0,
sck=Pin(18), mosi=Pin(23), miso=Pin(19))
cs = Pin(5, [Link])

# Comunicação
[Link](0)
[Link](b'comando')
dados = [Link](10)
[Link](1)

PWM e Controle de Motores

LED com efeito fade

from machine import Pin, PWM


import time

# Configurar PWM no pino 2


led = PWM(Pin(2), freq=1000)

# Efeito fade
while True:
for duty in range(0, 1024):
[Link](duty)
time.sleep_ms(2)
for duty in range(1023, -1, -1):
[Link](duty)
time.sleep_ms(2)

Controle de servo motor


from machine import Pin, PWM
import time

# Servo no pino 13
servo = PWM(Pin(13), freq=50) # 50Hz para servo

def set_servo_angle(angle):
# Converter ângulo (0-180) para duty cycle (40-115)
duty = int(40 + (angle * 75 / 180))
[Link](duty)

# Testar movimento
for angulo in range(0, 181, 30):
set_servo_angle(angulo)
[Link](1)

Sensores Analógicos

Leitura de potenciômetro

from machine import Pin, ADC


import time

# Configurar ADC
pot = ADC(Pin(34))
[Link](ADC.ATTN_11DB) # Leitura até 3.6V
[Link](ADC.WIDTH_12BIT) # Resolução 12 bits (0-4095)

while True:
valor = [Link]()
voltagem = valor * 3.3 / 4095
print(f"Valor ADC: {valor}, Voltagem: {voltagem:.2f}V")
[Link](0.5)

Sensor de temperatura interno


import esp32
import time

while True:
temp = esp32.raw_temperature() # Em Celsius
print(f"Temperatura interna: {temp}°C")
[Link](1)

WiFi e Conexão com Internet

Conectar ao WiFi

import network
import time

def conectar_wifi(ssid, senha):


wlan = [Link](network.STA_IF)
[Link](True)

if not [Link]():
print("Conectando ao WiFi...")
[Link](ssid, senha)

# Aguardar conexão
timeout = 10
while not [Link]() and timeout > 0:
[Link](1)
timeout -= 1
print(".", end="")

if [Link]():
print("\nConectado!")
print("IP:", [Link]()[0])
return wlan
else:
print("Falha na conexão")
return None

# Usar
wifi = conectar_wifi("SeuWiFi", "SuaSenha")

Cliente HTTP simples


import urequests
import network

# Após conectar ao WiFi


response = [Link]("[Link]
print("Status:", response.status_code)
print("Resposta:", [Link])
[Link]()

# POST request
dados = {"nome": "ESP32", "valor": 123}
response = [Link]("[Link] json=dados)
print([Link]())

Servidor Web básico


import network
import socket

# Configurar WiFi
wlan = [Link](network.STA_IF)
[Link](True)
[Link]("SSID", "senha")

# Aguardar conexão
while not [Link]():
pass

print("Conectado! IP:", [Link]()[0])

# Criar servidor
addr = [Link]('[Link]', 80)[0][-1]
s = [Link]()
[Link](addr)
[Link](1)

print("Servidor rodando...")

while True:
cl, addr = [Link]()
request = [Link](1024)

html = """<!DOCTYPE html>


<html>
<head><title>ESP32 Web Server</title></head>
<body>
<h1>Olá do ESP32!</h1>
<p>Você está conectado ao servidor web.</p>
</body>
</html>"""

[Link]('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')


[Link](html)
[Link]()

Projetos Práticos

Projeto 1: Estação Meteorológica


from machine import Pin, I2C, ADC
import dht
import time
import network
import urequests

# Sensores
dht_sensor = dht.DHT22(Pin(4))
luminosidade = ADC(Pin(34))
[Link](ADC.ATTN_11DB)

# Conectar WiFi
def conecta_wifi():
wlan = [Link](network.STA_IF)
[Link](True)
[Link]("SSID", "senha")

while not [Link]():


[Link](1)
return [Link]()[0]

# Loop principal
ip = conecta_wifi()
print(f"IP: {ip}")

while True:
try:
# Ler sensores
dht_sensor.measure()
temp = dht_sensor.temperature()
umid = dht_sensor.humidity()
luz = [Link]()

# Mostrar dados
print(f"Temperatura: {temp}°C")
print(f"Umidade: {umid}%")
print(f"Luminosidade: {luz}")

# Enviar para serviço web (exemplo)


dados = {
"temp": temp,
"umid": umid,
"luz": luz
}

# Descomentar para enviar


# response = [Link]("[Link] json=dados)
# [Link]()

[Link](10)

except Exception as e:
print("Erro:", e)
[Link](5)

Projeto 2: Controle Remoto via Web


from machine import Pin, PWM
import network
import socket
import json

# Atuadores
led = Pin(2, [Link])
servo = PWM(Pin(13), freq=50)
rele = Pin(15, [Link])

# Configurar WiFi AP
ap = [Link](network.AP_IF)
[Link](True)
[Link](essid="ESP32-Control", authmode=network.AUTH_WPA_WPA2_PSK,
password="12345678")

print("AP IP:", [Link]()[0])

# Servidor web
def web_page():
html = """
<!DOCTYPE html>
<html>
<head>
<title>ESP32 Control</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
button { padding: 10px 20px; margin: 5px; font-size: 16px; }
.on { background-color: #4CAF50; color: white; }
.off { background-color: #f44336; color: white; }
</style>
</head>
<body>
<h1>Controle ESP32</h1>
<h2>LED</h2>
<button class="on" onclick="fetch('/led/on')">Ligar</button>
<button class="off" onclick="fetch('/led/off')">Desligar</button>

<h2>Servo</h2>
<input type="range" min="0" max="180"
onchange="fetch('/servo/'+[Link])">

<h2>Relé</h2>
<button class="on" onclick="fetch('/rele/on')">Ligar</button>
<button class="off" onclick="fetch('/rele/off')">Desligar</button>
</body>
</html>
"""
return html

s = [Link](socket.AF_INET, socket.SOCK_STREAM)
[Link](('', 80))
[Link](5)

while True:
conn, addr = [Link]()
request = [Link](1024).decode()

# Processar comandos
if '/led/on' in request:
[Link]()
elif '/led/off' in request:
[Link]()
elif '/servo/' in request:
angulo = int([Link]('/servo/')[1].split()[0])
[Link](int(40 + angulo * 75 / 180))
elif '/rele/on' in request:
[Link]()
elif '/rele/off' in request:
[Link]()

response = web_page()
[Link]('HTTP/1.1 200 OK\n')
[Link]('Content-Type: text/html\n')
[Link]('Connection: close\n\n')
[Link](response)
[Link]()

Solução de Problemas

Problemas Comuns e Soluções


1. Não consigo conectar ao ESP32

Verifique drivers USB instalados


Tente outra porta USB
Reinicie o ESP32 (botão EN/RST)

2. Erro ao gravar firmware


# Tente modos alternativos
[Link] --port COM3 --baud 115200 write_flash -z 0x1000 [Link]
[Link] --port COM3 --before default_reset --after hard_reset
write_flash -z 0x1000 [Link]

3. Bootloop ou travamentos

# Acessar modo seguro


# Pressione e segure BOOT/FLASH enquanto reinicia

# Ou tente reflash completo


[Link] --port COM3 erase_flash
[Link] --port COM3 write_flash -z 0x1000 [Link]

4. Erro de memória

# Verificar memória disponível


import gc
gc.mem_free()
gc.mem_alloc()

# Forçar coleta de lixo


[Link]()

Dicas de Otimização

# Desativar WiFi quando não usado


[Link](False)

# Usar deep sleep para economia de energia


from machine import deepsleep
# deepsleep(10000) # 10 segundos

# Gerenciar memória eficientemente


@[Link] # Decorator para código mais rápido
def funcao_critica():
pass

Recursos Adicionais
Bibliotecas Úteis
[Link]: Cliente MQTT para IoT
urequests: Cliente HTTP simples
ujson: Manipulação JSON
ds18x20: Sensor temperatura DS18B20
neopixel: LEDs endereçáveis

Documentação Oficial
MicroPython ESP32
ESP32 Datasheet
Thonny IDE

Conclusão

Parabéns! Você agora tem uma base sólida para programar o ESP32 com MicroPython.
Comece com projetos simples e aumente gradualmente a complexidade. A comunidade
MicroPython é muito ativa e existem inúmeras bibliotecas disponíveis para sensores e
atuadores.

Próximos passos sugeridos:

Explore IoT com MQTT


Integre com serviços cloud (AWS IoT, Google Cloud)
Crie projetos com display OLED
Desenvolva sistemas de automação residencial
Experimente com comunicação Bluetooth

Lembre-se: a prática é fundamental para o aprendizado. Divirta-se programando seu ESP32!

Você também pode gostar