Índice:

Como usar o ESP8266 como servidor da web: 5 etapas
Como usar o ESP8266 como servidor da web: 5 etapas
Anonim
Como usar ESP8266 como servidor da web
Como usar ESP8266 como servidor da web

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

Faça funcionar
Faça funcionar
Faça funcionar
Faça funcionar
Faça funcionar
Faça funcionar

Aqui estão as etapas de como funciona

  1. Baixe o arquivo anexado e abra o arquivo mousebot.ino
  2. Vá para sketch> show sketch folder e crie uma nova pasta chamada data
  3. Salve o arquivo html deste tutorial na pasta chamada. Eu chamei o meu de "Joystick"
  4. Certifique-se de que seu spiff já está funcional acessando ferramentas e vendo o "upload de dados de esboço esp8266"
  5. Carregue o arquivo html para nodemcu clicando em "upload de dados de esboço esp8266"
  6. 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

Image
Image

Conecte-se ao nodeMCU e vá para "192.168.4.1" e experimente!:)

Recomendado: