Índice:
Vídeo: ESP8266 Comunicação Direta de Dados: 3 Etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
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
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:
Motor de passo controlado por MIDI com chip de síntese digital direta (DDS): 3 etapas
Motor de passo controlado por MIDI com chip de síntese digital direta (DDS): Você já teve a má idéia de que SÓ teve que se transformar em um miniprojeto? Bem, eu estava brincando com um esboço que fiz para o Arduino Due com o objetivo de fazer música com um módulo AD9833 Direct Digital Synthesis (DDS) … e em algum momento pensei & q
Receptor de conversão direta para todas as bandas: 6 etapas
Receptor de conversão direta em todas as bandas: a.articles {font-size: 110,0%; intensidade da fonte: Negrito; estilo da fonte: itálico; decoração de texto: nenhum; background-color: red;} a.articles: hover {background-color: black;} Este Instrutível descreve uma " Conversão direta " experimental uma
Mod de amostragem direta RTL-SDR: 3 etapas
RTL-SDR Direct Sampling Mod: Muitos dongles não são capazes de fazer uso de frequências abaixo de 30Mhz, entretanto é possível modificar alguns dispositivos para fazer isso usando uma chamada de método Direct Sampling. Na amostragem direta, aplicamos um sinal diretamente ao 'cérebro' dos dongles, ignorando
Base para telefone celular de entrada direta: 10 etapas
Suporte para telefone celular de entrada direta: Eu sei. O mundo precisa de outro suporte para celular tanto quanto eu preciso de um buraco na minha cabeça. Surpreendentemente, não consegui encontrar um suporte para celular para minha caminhonete que atendesse às minhas necessidades. Não achei que minhas necessidades fossem tão exóticas, mas não consegui encontrar
Convertendo meu MP3 Player para porta USB direta e bateria substituível: 3 etapas
Convertendo Meu Mp3 Player para Porta USB Direta e Bateria Substituível: neste instrutível vou mostrar como eu converto meu i-pod shuffle para ter uma porta USB direta (usando o mp3 player para o computador sem usar um adaptador) e para substitua a bateria embutida por uma bateria de telefone celular e o telefone celular b