Hoje trago mais uma placa de desenvolvimento criada pelo Fabio Souza e portal Embarcados; depois de falar da Franzininho C0, hoje vou compartilhar minhas impressões sobre a Franzininho Wi-Fi, baseada no chip ESP32-S2 da Espressif.
Eu estive alguns anos longe das plaquinhas e sistemas embarcados, então as últimas ESP que programei foram a ESP8266 e ESP-12; vamos nos aventurar com esta nova plaquinha!.
A placa pode ser programada de várias formas: IDE do Arduino, ESP-idf, microPython, CircuitPython.
Eu escolhi começar programando a placa em microPhyton. Não posso reclamar da documentação da Franzininho, é bem completa e tem até vídeos. Começe gravando o firmware do microPython no seu Franzininho Wi-Fi aqui neste link.
Alternativamente (foi o que tive que fazer) baixei o .bin deste link oficial e utilizei o guia deste link para gravar o microPython na placa. Deve ser também baixada a Thonny IDE no site oficial.
Aqui um detalhe importante: a Thonny IDE não funcionou de primeira, não baixava os pacotes necessários; descobri que (não sei o porquê) o problema foi o bootloader gravado pelo método indicado pelo site oficial da Franzininho Wi-Fi.
Utilizei muito a documentação oficial do site do microPython para ESP-32, deste link e também alguma ajuda deste blog e principalmente daqui. Com isso eu criei o código abaixo para piscar os dois LEDs da placa Franzininho (pinos 21 e 33).
from machine import Pin
from time import sleep
led = Pin(33, Pin.OUT)
led2 = Pin(21, Pin.OUT)
while True:
led.value(not led.value())
led2.value(not led2.value())
sleep(0.5)
E um GIF dos LEDs amarelo e azul piscando:
E sobre conexão Wi-Fi? como conectar a Franzininho Wi-Fi na internet?
Eu vou começar fazendo um exemplo onde um celular controla dois LED’s da Franzininho, que você pode ver na íntegra neste artigo de blog.
Ao fazer o download do código abaixo para a placa, no console da Thonny IDE vai aparecer o endereço de IP ao qual você deve conectar.
from machine import Pin
import network
import socket
import time
# Define GPIO pins
GPIO1 = Pin(21, Pin.OUT)
GPIO2 = Pin(33, Pin.OUT)
# Initialize GPIO states
GPIO1.value(0) # OFF
GPIO2.value(0) # OFF
GPIO1_state = "GPIO 1 is OFF"
GPIO2_state = "GPIO 2 is OFF"
#WiFi credentials
ssid = 'SUAREDE'
password = 'SUASENHA'
wlan = network.WLAN(network.STA_IF)
#function to connect to Wi-Fi network
def cnctWifi():
wlan.active(True)
print('Attempting to connect to the network...')
wlan.connect(ssid, password)
max_wait = 10
while max_wait > 0 and not wlan.isconnected():
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
# Manage connection errors
if not wlan.isconnected():
print('Network Connection has failed')
else:
print('Connected to the network successfully.')
status = wlan.ifconfig()
print( 'Enter this address in browser = ' + status[0] )
#HTML + CSS for webpage
html = """<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>MicroPython Web Server</title>
<style>
html {
font-family: Arial;
display: inline-block;
margin: 0px auto;
text-align: center;
}
h1 {
font-family: Arial;
color: #2551cc;
}
.button1,
.button2 {
-webkit-border-radius: 10;
-moz-border-radius: 10;
border-radius: 10px;
font-family: Arial;
color: #ffffff;
font-size: 30px;
padding: 10px 20px 10px 20px;
text-decoration: none;
display: inline-block;
margin: 5px;
}
.button1 {
background: #339966;
}
.button2 {
background: #993300;
}
</style>
</head>
<body>
<h1>MicroPython Web Server</h1>
<p>%s</p>
<p>
<a href="/GPIO1/on"><button class="button1">GPIO 1 ON</button></a>
<a href="/GPIO1/off"><button class="button2">GPIO 1 OFF</button></a>
</p>
<p>%s</p>
<p>
<a href="/GPIO2/on"><button class="button1">GPIO 2 ON</button></a>
<a href="/GPIO2/off"><button class="button2">GPIO 2 OFF</button></a>
</p>
</body>
</html>
"""
# Connect to Wi-Fi
cnctWifi()
# Set up socket for web server
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.setblocking(0)
s.bind(addr)
s.listen(1)
print('listening on', addr)
# Main loop for handling client requests
while True:
if not wlan.isconnected():
print("Connection failed. Trying to reconnect")
wlan.disconnect()
cnctWifi()
if wlan.isconnected():
try:
cl, addr = s.accept()
print('client connected from', addr)
request = cl.recv(1024)
print(request)
request = str(request)
GPIO1_on = request.find('/GPIO1/on')
GPIO1_off = request.find('/GPIO1/off')
GPIO2_on = request.find('/GPIO2/on')
GPIO2_off = request.find('/GPIO2/off')
if GPIO1_on == 6:
print("GPIO 1 is on")
GPIO1.value(1)
GPIO1_state = "GPIO 1 is ON"
if GPIO1_off == 6:
print("GPIO 1 is off")
GPIO1.value(0)
GPIO1_state = "GPIO 1 is OFF"
if GPIO2_on == 6:
print("GPIO 2 is on")
GPIO2.value(1)
GPIO2_state = "GPIO 2 is ON"
if GPIO2_off == 6:
print("GPIO 2 is off")
GPIO2.value(0)
GPIO2_state = "GPIO 2 is OFF"
response = html % (GPIO1_state, GPIO2_state)
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
except:
pass
time.sleep(0.1)
Em SUAREDE e SUASENHA você deve colocar as credeciais do seu Wi-Fi. Você deve ainda alterar os pinos de GPIO no código, no caso da Franzininho os LEDs estão nos pinos 21 e 33. O aplicativo tem a cara abaixo:
Ao clicar em “GPIO 1 ON” ou “GPIO 2 ON” os respectivos LEDs são ligados, e ao clicar OFF são desligados, observe a sua placa Franzininho Wi-Fi.
Por hoje é isso, fizemos dois exemplos de utilização da Franzininho Wi-Fi com microPython via IDE Thonny. Em artigos futuros quero programar esta placa via IDE do Arduino e também via ESP-idf (spoiler, já tentei e é bem trabalhoso).
Deixe um comentário