Raspberry Pi Pico com ESP8266

O Raspberry Pi Pico é uma placa muito versátil. No entanto, um recurso que não está disponível é a comunicação com redes locais. De forma a contornar essa limitação, elaboramos esse artigo a ensinar a conectar o seu Raspberry Pi Pico ao WiFi com utilizando o ESP8266. Para acompanhar este artigo, iremos necessitar dos seguintes componentes:


Imagem Produto Comprar
 

 

 

Raspberry Pico

 


 

 

 

ESP-8266

 


 

 

 

Cabos Jumper Macho-Macho

 


Esquema de Montagem

Esquema de Montagem

Código Utilizado

Deverá aceder ao seu Thonny IDE escolher o Raspberry PI Pico como interpreter e a sua respetiva porta de comunicação.

from time import sleep #Delay
import sys #importar sistema
import socket #Efetuar comunicação entre dispositivos
import network #Importar Wifi
import esp #Necessario para controlar elementos do Esp
import gc

Função para gerar código Html do Site:

Nesta função criamos o código da nossa página usando Html e opcionalmente CSS e JavaScript.

def createWebpage():
#Codigo HTML da nossa WebPage
sourceCode = """<html>
<!--BootStrap-->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
<head>
<title>WebPage Test by ElectroFun</title>
</head>
<body>
<center>
<h2>WebPage Teste by ElectroFun</h2>
<br>
<button type="button" class="btn btn-lg btn-outline-warning" data-toggle="button" aria-pressed="false" autocomplete="off" onclick = "window.open('https://www.electrofun.pt')">Carrega Aqui </button>
</center>
</body>
</html>
"""

return sourceCode

Função para conectar e criar página na nossa rede usando comunicação por sockets.
Relembramos que necessita alterar os valores atribuídos as variáveis ssid e password de forma a coincidirem com os dados da sua rede.

  def connect():
esp.osdebug(None) #Desativar Debug do Esp
gc.collect()

ssid = "ssid" #SSID da sua Rede
password = "password" #Password da sua Rede

st_if = network.WLAN(network.STA_IF) #Objeto controlar estação wlan
st_if.active() #Ativar objecto
st_if.connect(ssid, password) #Conectar a rede

tentativaConexao = 0
while st_if.isconnected() == False: #Loop até conexão seja estabelecida
print("[*] A conectar a " + ssid)
sleep(2) #Delay de 2 segundo por tentativa

if tentativaConexao == 5: #Caso 5 tentativas sejam efetuadas sem sucesso quebra loop e fecha programa
print("[!] Falha ao Conectar a " + ssid)
sys.exit() #Fecha script

tentativaConexao = tentativaConexao + 1

#Assim que a conexão for estabelcida mostra o IP do WebServer, Mascara da Rede, Gateway e Host 
print("[!] Conexão estabelecida com sucesso a " + ssid + "\n[*] Dados de Conexão:\n " + str(st_if.ifconfig()))

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Padrao de Socket por TCP/IP
sock.bind(('', 80)) #Ip, Porta -> Ip estabelecido pelo NodeMCU em connect, porta 80 para ser acedido por Http
sock.listen(5) #Le até 5 conexoes ao mesmo tempo

while True:
try: 
conn, addr = sock.accept() #Aceitar novas conexoes
request = conn.recv(1024) #Tamanho padrao de request em bytes

#Headers Padrao de conexão HTTPS 
conn.send('HTTP/1.1 200 OK\n')
conn.send('Content-Type: text/html\n')
conn.send('Connection: close\n\n')

#Enviar o codigo da Pagina na sua toalidade
conn.sendall(createWebpage())

conn.close() #Fecha conexão

print("[!] Nova conexão de: " + str(addr))

except Exception as e:
#Mostra o Erro
print("Ocorreu o seguinte erro:\n\n" + str(e))

error = True

#Retoma Error como True para quebra o ciclo em main()
return error

Função main

A função main é a função “mãe” do nosso código que estará num loop infinito enquanto não se verifiquem erros na nossa conexão.

  
def main():
error = False
while error == False:
error = connect()

if __name__ == "__main__":
main()

Para mais projetos, percorram o nosso blog, onde podem encontrar vários artigos interessantes relacionados com eletrónica, robótica e muito mais! Visitem também o nosso site, onde encontram tudo para eletrónica e robótica!