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
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!