Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Olá, estou usando atualmente o Windows 10, NodeMCU 1.0 e aqui está a lista de software que usei e os guias de instalação que segui:
- IDE Arduino
- Placas adicionais para esp8266
- Spiff
Biblioteca usada:
Websocket
Eu usei o NodeMCU como um servidor para servir um arquivo HTML que fiz a partir deste tutorial. Para servir este arquivo, carreguei o arquivo no sistema de arquivos nodemcu usando Spiffs. O arquivo HTML envia dados para o nodemcu usando websockets para serem impressos no monitor serial para isso. A comunicação bidirecional rápida via websockets do servidor e cliente permite que este seja usado como controle remoto. Nas etapas a seguir, explicarei como meu código funciona
Suprimentos
NodeMCU
Etapa 1: Faça funcionar
Aqui estão as etapas de como funciona
- Baixe o arquivo anexado e abra o arquivo mousebot.ino
- Vá para sketch> show sketch folder e crie uma nova pasta chamada data
- Salve o arquivo html deste tutorial na pasta chamada. Eu chamei o meu de "Joystick"
- Certifique-se de que seu spiff já está funcional acessando ferramentas e vendo o "upload de dados de esboço esp8266"
- Carregue o arquivo html para nodemcu clicando em "upload de dados de esboço esp8266"
- Após o upload do arquivo, faça upload do arquivo mousebot.ino para o nodemcu, acessando o IDE do arduino e pressionando ctrl U
Etapa 2: Como funciona o código
Primeiro, incluímos as bibliotecas que este código usará
// para permitir que o ESP8266 se conecte ao WIFI
#include #include #include // Habilita o ESP8266 a atuar como um servidor #include // habilita a comunicação com o servidor e o cliente (seu dispositivo conectado) #include #include // Para abrir o arquivo uplaoded no nodemcu #include
Defina o esp8266 como um servidor web aberto na porta 80. As portas são caminhos pelos quais os dados passarão. Como porta do servidor, enviará o arquivo HTML para o cliente (os dispositivos conectados a ele).
Adiciona uma conexão de websocket usando a porta 81 para ouvir mensagens do cliente
O websockets possui o parâmetro num, WStype_t, carga útil e tamanho. O num determina o numeber do cliente, payload é a mensagem enviada, size é o comprimento da mensagem e WStype_t é para eventos diferentes, como
- WStype_DISCONNECTED - na desconexão de um cliente.
- WStype_CONNECTED: - quando um cliente se conecta
- WStype_TEXT - Dados recebidos do cliente
Dependendo do tipo de evento, diferentes ações são feitas e comentadas aqui
void webSocketEvent (uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
switch (tipo) {case WStype_DISCONNECTED: Serial.printf ("[% u] Desconectado! / n", num); // imprime dados para o monitor serial break; case WStype_CONNECTED: {IPAddress ip = webSocket.remoteIP (num); // obtém o IP do cliente Serial.printf ("[% u] Conectado de% d.% d.% d.% d url:% s / n", num, ip [0], ip [1], ip [2], ip [3], carga útil); webSocket.sendTXT (num, "Conectado"); // envia "conencted" para o console do navegador} break; case WStype_TEXT: Serial.printf ("[% u] Dados:% s / n", num, carga útil); // imprime o número do cliente em% u e os dados recebidos como strings em% s / n break;}}
Etapa 3: Definir o NODEMCU como servidor
define o SSID e a senha que você usará para se conectar a ele mais tarde
const char * ssid = "Experimente";
const char * password = "12345678";
na configuração, especificamos a taxa na qual nosso nodemcu e pc se comunicarão, que é 115200.
void setup (void) {
Serial.begin (115200); Serial.print ("\ n");
definido como verdadeiro para ver a saída de diagnóstico de wi-fi no terminal serila
Serial.setDebugOutput (true);
initaliaze o sistema de arquivos
SPIFFS.begin ();
Configure o nodemcu como um ponto de acesso com ssid e senha defiend anteriormente e imprima o ip do nodemcu ao qual você se conectará anteriormente. por padrão é 192.168.4.1
Serial.print ("Configurando ponto de acesso…");
WiFi.mode (WIFI_AP); WiFi.softAP (ssid, senha); IPAddress myIP = WiFi.softAPIP (); Serial.print ("endereço IP do AP:"); Serial.println (myIP);
Inicialize o websocket no nodemcu, que é pur servidor
webSocket.begin ();
Chama a função webSocketEvent quando ocorre um evento de websocket.
webSocket.onEvent (webSocketEvent);
Para depuração, imprima "Servidor WebSocket iniciado" em uma nova linha. Isso é para determinar a linha de código que o nodemcu está processando
Serial.println ("servidor WebSocket iniciado.");
quando um cliente visita 192.168.4.1, ele irá chamar a função handleFileRead e enviar com ela o URI do servidor de parâmetros que neste caso é a nossa informação nodemcu. A função handleFileRead servirá o arquivo html do sistema de arquivos nodemcu
server.onNotFound ( () {
if (! handleFileRead (server.uri ()))
se não for encontrado irá mostrar "FileNotFound"
server.send (404, "text / plain", "FileNotFound");
});
Inicia o servidor e o servidor HTTP de impressão é iniciado.
server.begin (); Serial.println ("servidor HTTP iniciado");
Em nosso loop vazio, habilitamos o servidor a lidar continuamente com o cliente e suas comunicações de websockets da seguinte maneira:
void loop (void) {
server.handleClient (); webSocket.loop ();}
Etapa 4: Carregar o arquivo HTML
usaremos uma função chamada handleFileRead para abrir o arquivo html do sistema de arquivos nodemcu. ele retornará um booleano de valor para determinar se está carregado ou não.
Quando "192.168.4.1/" é aberto pelo cliente, definimos o caminho do arquivo como "/Joystick.html, o nome do nosso arquivo na pasta de dados
bool handleFileRead (String path) {
Serial.println ("handleFileRead:" + caminho); if (path.endsWith ("/")) path + = "Joystick.html"; if (SPIFFS.exists (path)) {File file = SPIFFS.open (path, "r"); size_t sent = server.streamFile (arquivo, "text / html"); file.close (); return true; } retorna falso; }
Verifique se o caminho do arquivo "/Joystick.html" existe
if (SPIFFS.exists (path)) {
Se existir, abra o caminho com o propósito de lê-lo especificado pelo "r". Vá aqui para mais propósitos.
Arquivo de arquivo = SPIFFS.open (caminho, "r");
Envia o arquivo para o servidor com um tipo de conteúdo "text / html"
size_t sent = server.streamFile (arquivo, "text / html");
feche o arquivo
file.close ();
a função handleFileRead retorna verdadeiro
return true;}
se o caminho do arquivo não existir, a função handleFileRead retorna falso
return true; }
Etapa 5: experimente
Conecte-se ao nodeMCU e vá para "192.168.4.1" e experimente!:)