Índice:

ESP8266 Comunicação Direta de Dados: 3 Etapas
ESP8266 Comunicação Direta de Dados: 3 Etapas

Vídeo: ESP8266 Comunicação Direta de Dados: 3 Etapas

Vídeo: ESP8266 Comunicação Direta de Dados: 3 Etapas
Vídeo: Como Programar o ESP8266 para ser um WEB SERVER - Video #3 - ESP8266 Primeiros Passos 2024, Novembro
Anonim
ESP8266 Comunicação Direta de Dados
ESP8266 Comunicação Direta de Dados

Introdução

Depois de ter feito alguns projetos com módulos Arduinos e nRF24l01, fiquei pensando se poderia economizar algum esforço usando um módulo ESP8266. A vantagem do módulo ESP8266 é que ele contém um microcontrolador a bordo, portanto, nenhuma placa Arduino adicional é necessária. Além disso, o tamanho da memória do ESP8266 é muito maior e em relação à velocidade, o ESP8266 roda a no máximo 160 MHz em vez dos 16 MHz do Arduino. Claro que existem alguns lados negativos.

O ESP8266 roda apenas em 3,3 V, tem menos pinos e está faltando as boas entradas analógicas que o Arduino tem (ele tem uma, mas apenas para 1,0 V e não 3,3 V). Além disso, existem muitos mais exemplos de código para o Arduino + nRF24l01 do que para o ESP8266, especialmente quando se trata de transferência direta de dados.

Portanto, com um projeto em mente, examinei o tópico de transferência de dados rápida e leve entre dois ESP8266 sem todas as coisas WWW e

Enquanto procurava exemplos na Internet (a maior parte do código abaixo foi obtido na rede em vários lugares), me deparei com muitas perguntas sobre como implementar uma transferência direta de dados sem os bons exemplos do tipo "faça assim". Houve algum código de exemplo, mas principalmente com a pergunta por que não funcionou.

Então, depois de ler e tentar entender, criei os exemplos abaixo que permitem uma transferência de dados rápida e simples entre dois ESP8266.

Etapa 1: limites e planos de fundo (TCP vs. UDP)

Para chegar lá, alguns limites precisam ser esclarecidos em relação ao nRF24l01.

Para usar o ESP8266 dentro do ambiente Arduino, a biblioteca básica a ser usada é a ESP8266WiFi.h. Podem ser diferentes, mas a maioria dos exemplos usa o mencionado em. Ao usar isso, você precisa colocar sua comunicação para o nível WiFi.

Portanto, para comunicar é necessário haver pelo menos um ponto de acesso (AP) / servidor e um cliente. O AP fornece o nome da rede e os endereços IP e o cliente se conectará a este servidor.

Então comparado com o nRF24l01, onde o código em ambas as extremidades é mais ou menos o mesmo (exceto para os canais de transmissão) o código do ESP8266 é fundamentalmente diferente, já que um é configurado como AP e o outro como cliente.

O próximo tópico é que, em vez de apenas enviar alguns bytes para o nRF24l01, para o ESP8266 os protocolos de transferência precisam ser observados.

Existem dois protocolos comuns usados: TCP e UDP.

O TCP (Transmission Control Protocol) é um protocolo que permite uma transmissão sem perdas entre um servidor e um cliente. O protocolo incorpora “handshakes” (muitos sinalizadores e reconhecimentos enviados entre ambas as partes) e numeração e detecção de pacotes para identificar e retransmitir pacotes perdidos. Além disso, ao usar todos esses handshakes, o protocolo evita a perda de dados devido a muitos pacotes enviados ao mesmo tempo na rede. Os pacotes de dados aguardam até que possam ser recebidos.

O UDP (User Datagram Protocol) não possui todos os handshakes, numeração de pacotes e retransmissão. Sua sobrecarga é, portanto, menor e não há necessidade de todos os apertos de mão para manter a conexão. O UDP incorpora alguma detecção básica de erros, mas nenhuma correção (o pacote corrompido acaba de ser descartado). Os dados são enviados, sem o conhecimento se o destinatário está livre para recebê-los. Ao mesmo tempo, vários pacotes podem colidir, pois cada parte envia os dados sempre que necessário. Ao omitir todos os apertos de mão, há um bom recurso adicional do UDP chamado “multicast” e “broadcast”. No caso de “multicast” os pacotes de dados são enviados a um grupo predefinido de membros, em um “broadcast” os pacotes de dados são enviados a todos os membros conectados. Isso reduz a transferência de dados consideravelmente no caso de fluxos a serem recebidos por vários membros (por exemplo, enviando um feed de vídeo para vários receptores ou enviando a hora atual para vários dispositivos conectados).

Existem alguns bons vídeos no Youtube explicando isso ainda melhor.

Portanto, ao enviar dados, é importante conhecer suas necessidades:

  • dados não corrompidos, gerenciamento de múltiplos pares por handshakes → TCP
  • dados em tempo real, conexão rápida → UDP

Comecei com a implementação de uma comunicação baseada em TCP (entre um servidor e um cliente). Durante o teste, tive problemas de travamento na transmissão. No início, os dados eram trocados rapidamente, depois de um tempo, a velocidade caiu drasticamente. Concluí que este era um problema típico da abordagem TCP (o que estava errado!), Então mudei para uma solução baseada em UDP. Finalmente consegui abordar os dois para trabalhar. Portanto, ambas as soluções serão fornecidas.

Os esboços abaixo têm para TCP e UDP em comum que:

  • são independentes de qualquer rede WiFi existente. Portanto, ele funcionará em qualquer lugar longe da Internet e de roteadores conectados.
  • estão enviando dados ASCII para serem impressos por meio do monitor serial.
  • estão enviando dados obtidos pela função millis () -, para analisar a velocidade de transmissão.
  • não são testados para vários clientes (devido a ter o hardware para configurar a rede agora)

Etapa 2: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Para testar toda a configuração, usei dois módulos ESP8266. Um módulo é um adaptador ESP-01 + USB-para-UART. O outro módulo é um módulo baseado em ESP-12 que incorpora a conexão USB, regulador de tensão e algumas coisas divertidas como interruptores, LDR e LED multicolorido.

O Módulo USB-para-UART do ESP-01 precisou ser um pouco modificado para poder usá-lo como programador (novamente Youtube de Csongor Varga).

Para executar os esboços, você precisa instalar as bibliotecas ESP8266 (conforme descrito em muitos lugares na Internet). Em ambos os casos (TCP e UDP), há um esboço do servidor e do cliente cada. Qual esboço é carregado para qual módulo não importa.

Agradecimentos

Como mencionei, os esboços são baseados em muitos pedaços que encontrei na web. Não me lembro mais onde encontrei o quê, qual é o código original ou o que mudei. Então, eu só queria agradecer à grande comunidade em geral por publicar todos os ótimos exemplos.

Etapa 3: os esboços

O Código consiste em dois esboços cada (conforme explicado), um esboço do servidor e um esboço do cliente, para TCP e UDP cada.

Recomendado: