RobotDyn atinge o dobro: Mega + ESP8266

RobotDyn Mega + ESP8266
O que um desenvolvedor faz em raras horas de lazer? É isso mesmo, navegando pelas listas de preços das lojas de ferro. Houve um minuto grátis e decidi procurar nas páginas das lojas on-line populares - tédio, nada de interessante, já vimos tudo isso ... e de repente meus olhos caem no próximo Mega. Bah! Sim, não é apenas o Mega, mas combinado com o amado ESP8266 de todos e cuidadosamente equipado com switches para que dois controladores trabalhem juntos - com fio (usando Ethernet Shield) com muitos GPIO e Wi-Fi para comunicação sem fio.

Nada mal! Pensei e me lembrei do AMS - lá você pode instalar dois servidores - com e sem fio e conectá-los em um sistema - o ESP8266 receberá 54 pinos digitais e 16 analógicos, e o Mega receberá controle sem fio via Wi-Fi e todos os pães ESP8266. Há muito tempo, não encontrei um conselho tão interessante.

Olá! Você tem uma placa Mega + ESP8266 ?
- Sim, mas temos apenas um.
"Por que apenas um?"
- O resto foi desmontado.
"Reserve-a, por favor, para mim."

Algumas palavras sobre a empresa


Gostei do RobotDyn de duas coisas: a primeira - com suas soluções tecnológicas. Não há necessidade de ir longe, um excelente exemplo é a placa Mega + ESP8266 em consideração. Algo assim não vi em nossas (e não na nossa, mas não procurei aqui) nas lojas on-line. E este não é o único exemplo, ainda existe a opção Uno + ESP8266 e a empresa claramente não vai parar por aí, aparentemente ainda existem muitos dispositivos interessantes esperando por nós.

E o segundo é sua política de preços. Não vou me debruçar sobre essa questão aqui em detalhes, mas direi que os preços me surpreenderam agradavelmente - o lema da empresa é "Os preços são como no Aliexpress".

Em poucas palavras, descrevi o pano de fundo em que todos os eventos subseqüentes se desenrolam; agora vamos diretamente aos detalhes técnicos e uma descrição do quadro e como trabalhar com ele.

O próprio quadro


Em geral, uma placa comum, não muito diferente de outras similares, se não uma pequena parte, a saber, o chip ESP8266EX integrado à placa. Isso transfere imediatamente o conselho para a categoria de soluções extraordinárias. Quero chamar sua atenção para mais um detalhe - não um módulo padrão do tipo ESP-12 está integrado à placa, mas o chip e toda a fiação são feitos na própria placa, o que indica de maneira transparente o nível dos desenvolvedores. Também quero observar que a placa possui uma antena impressa e um conector para conectar uma antena externa, o que em muitos casos pode ser muito útil.
RobotDyn Mega + ESP8266
Existem conectores de pinos na placa para conectar aos terminais ESP8266 e vários switches, que vale a pena mencionar um pouco mais. A principal idéia de usar a placa é que, usando os comutadores, você pode configurar a interação de seus três componentes de maneiras diferentes: o chip Atmega2560, o chip ESP8266EX e o conversor CH340G USB-TTL. São possíveis conexões únicas e complexas, que permitem organizar muitas opções para a interação de todas as partes do quadro. Isso abre grandes oportunidades para a construção de vários dispositivos, mas mais sobre isso mais tarde.

Pinos ESP8266

Também quero observar a capacidade de carga decente da placa. A julgar pelas inscrições, ele é capaz de fornecer uma corrente de carga de 1,6 A em um canal de 5 volts e 1 A em um 3,3 volts. O que é muito bom, especialmente no conjunto.

Não há mais nada a dizer sobre o conselho, passamos a instalar o software e testá-lo.

Teste de placa


Como a placa está integrada e praticamente não há espaço livre, e a fiação da parte de alta frequência do ESP8266EX é feita nela, a princípio surgiram dúvidas sobre a operação correta e sem problemas de toda essa economia.

No futuro, direi que, apesar das minhas preocupações, tudo funciona de forma estável e conforme o esperado. Conectamos os comutadores na placa Atmega2560 ao USB - obtemos o Arduino Mega, conectamos o ESP8266EX ao USB - obtemos o ESP8266, mudamos para o modo de conexão do Atmega2560 com o ESP8266EX, obtemos a conexão entre os chips via interface serial. Tudo funciona exatamente como descrito na documentação e exatamente como é esperado intuitivamente.

Uma grande vantagem dessa solução é que os desenvolvedores cuidaram de combinar os níveis de sinal lógico de todos os componentes do sistema. Qualquer pessoa que tente manualmente configurar o módulo ESP8266 e conectar corretamente todos os resistores pull-up me entenderá. Não existem problemas, todo o seu trabalho é reduzido a clicar nos interruptores na placa, de acordo com as instruções do fabricante.

Teste de carga


Como testar o quadro? Você pode fazer o download de algum esboço padrão, mas será um teste sobre nada. Essa opção pode funcionar bem e, em condições de combate, o sistema falhará. Portanto, o trabalho de ambas as partes sob o controle das versões correspondentes do Arduino Mega Server foi escolhido como um teste de carga pesada. Para Mega - Arduino Mega Server para Mega e ESP8266 - Arduino Mega Server para ESP8266 na versão M1.

O kit de distribuição M1 foi escolhido devido ao fato de apenas 1 MB de memória flash do ESP8266 estar instalado na placa. Na minha opinião, esse é quase o único erro dos desenvolvedores - em futuras revisões da placa, eu recomendaria que eles colocassem chips de memória de 4 MB. A diferença de preço é pequena e as possibilidades de uso da versão com 4 MB são muito maiores. Mas como existe uma versão AMS para sistemas com 1 MB, não prestei muita atenção a esse ponto e continuei testando.

O que dizer? Ativamos o quadro, preenchemos o software e obtemos dois servidores independentes. Um conectado via Ethernet Shield e um sem fio via Wi-Fi. Beleza!

Também gostaria de observar que mesmo a adição de um Ethernet Shield com um leitor de cartão a este sistema já sofisticado não causou conflitos ou falhas - tudo funcionou da maneira que deveria funcionar. E, em alguns casos, é ainda melhor do que o habitual - esta é a primeira placa na qual o firmware ESP8266 no ar passou com êxito em 100% dos casos; em todas as outras placas e módulos, há falhas periódicas com essa intermitência.

E dois servidores estão girando, carregando o quadro, cumprindo suas obrigações e ... isso é tudo. Tudo simplesmente funciona, não há nada a dizer, mas este é provavelmente o melhor elogio para qualquer sistema técnico.

Mais interessante


O que descrevi aqui é interessante do ponto de vista puramente acadêmico: um quadro interessante, uma solução técnica interessante, mas é claro que estamos interessados ​​em sua aplicação prática. Qual é o seu destaque prático e aplicado?

O fato é que, com um interruptor na placa, você pode conectar duas de suas partes (Mega e ESP) em uma única unidade e, assim, primeiro obter um novo sistema de qualidade e, em segundo lugar, compensar as falhas inerentes a cada uma de suas partes individuais.

Vamos começar com o ESP8266. A principal desvantagem dessa solução geralmente excelente é a falta catastrófica de pinos GPIO. Como se costuma dizer, um, dois e calculou mal. É difícil dizer o que os desenvolvedores deste chip pensavam, mas antes do lançamento do ESP32 eles tinham um pouco mais de tempo para pensar e corrigiram essa falha no novo chip. Mas estamos lidando especificamente com o 8266.

Esta placa permite que você faça um cavalo se mover e usar toda a potência do Mega, e isso, entre outras coisas, 54 saídas digitais e 16 analógicas no ESP8266. Ou seja, de repente, nosso precário ESP obtém excelentes oportunidades para trabalhar com sensores, atuadores e outros periféricos. Acontece, por assim dizer, bebê ESP em esteróides.

Essa é apenas uma das opções possíveis para o uso da placa, deitada na superfície.

Agora vamos dar uma olhada no Mega. Ela não interfere na interface sem fio e na capacidade de interagir com dispositivos Wi-Fi, o que pode lhe proporcionar integração com a parte ESP do sistema. E, ao mesmo tempo, resta a possibilidade de operação paralela por meio de uma interface Ethernet com fio.

E essa também é apenas uma das aplicações possíveis para esta placa, deitada na superfície.

Bem, várias opções de pontes: Ethernet - Wi-Fi, nRF24 - Ethernet, nRF24 - Wi-Fi, nRF24 (1) - nRF24 (2), nooLite - Wi-Fi, nooLite - Ethernet, nooLite (1) - nooLite (2) ), etc., etc. até o infinito. Você pode rotear sinais de dezenas de subsistemas com os quais o Mega Server do Arduino trabalha entre as duas partes da placa e as interfaces conectadas a elas.

Eu nem sei o que dizer. Muito legal

Detalhes técnicos


Agora um pouco sobre os detalhes técnicos. Você vê uma tabela na qual todos os modos possíveis de operação do quadro são apresentados e todas as posições possíveis dos interruptores nele. Vamos considerar brevemente cada modo.

Tabela de modos operacionais da placa RobotDyn

Arduino Mega 2560


O modo mais simples de operação da placa, na tabela, é designado como modo 3. Se você colocar os interruptores 3 e 4 na posição ON e o restante na posição OFF, obteremos o habitual Arduino Mega 2560. Nada interessante, pelo fato de não valer a pena comprar esta placa, você pode era comprar o Mega habitual.

ESP8266


Também não é um modo de operação muito interessante. Na tabela, ele é dividido em dois submodos, designados como 1 (carregando o esboço no ESP) e 2 (modo de conexão ESP para USB). Essa é toda a funcionalidade do ESP8266 padrão e, para esse uso, também não valia a pena comprar esta placa, você poderia se dar bem com o habitual módulo ESP.

Todos são independentes


Também não consideramos essa opção no número 6, porque todas as conexões entre as partes da placa estão quebradas e, definitivamente, não pode ser útil para nada.

A conexão entre Mega e ESP


Nesse modo, designado como 5, a comunicação é estabelecida entre o Mega e o ESP por meio de uma interface serial, mas não há comunicação com o conversor USB-TTL. O ESP usa o Serial padrão, enquanto o Mega não usa menos o Serial3 padrão. A conexão funciona de maneira estável e contínua a uma velocidade de 115200. Esse é um modo de operação bastante específico quando nenhum controlador possui conexão USB. E então ele também não é muito interessante para nós.

Comunicação entre Mega e ESP e Mega e USB ao mesmo tempo


Mas isso é chamado de trunfo. Conseguimos tudo de uma vez - a conexão Mega USB e a capacidade de fazer upload de esboços para Mega e controlar sua operação através do mesmo USB, a possibilidade de comunicação entre Mega e ESP e a capacidade de fazer upload de esboços para o ESP8266 e controlar sua operação na interface USB ... Mega! Ou seja, enchimento cheio, não saindo diretamente da caixa registradora.

Este é o único modo correto de operação listado na tabela. Lembre-se do número vencedor, que é quatro. Na configuração dos interruptores na placa, também fica bonito - 1, 2, 3, 4 estão na posição LIGADO, o restante está DESLIGADO.

Um leitor atento perguntará: como podemos enviar esboços para o ESP8266 se a porta USB estiver ocupada conectando-se à mega parte do sistema? E esta é a pergunta certa, a resposta não é possível. E por que, então, você está escrevendo que nesta configuração podemos enviar esboços para o ESP8266? Como o Mega Server do Arduino tem a capacidade de baixar esboços no ar diretamente do IDE do Arduino pressionando alguns botões, é isso mesmo - temos o preenchimento total, tudo funciona imediatamente.

Mas e aqueles que querem usar o quadro sem o Arduino Mega Server? Existem apenas duas opções: clique constantemente nos comutadores ou adicione a capacidade de fazer o download de esboços no ar em seus projetos. Pessoalmente, gosto mais da segunda opção.

Configurações do IDE do Arduino


As configurações do IDE do Arduino para o Mega não levantam dúvidas, tudo é padrão lá e, para o ESP8266, darei uma captura de tela do menu com as configurações para uma implementação específica da parte do ESP na placa RobotDyn. Você deve definir os mesmos parâmetros, com exceção do número da porta - em seu sistema, provavelmente terá um valor diferente.

Configurações do ESP8266 no IDE do Arduino

Arduino Mega Server para RobotDyn Mega + ESP8266


Para esta placa, foi lançada uma versão dual especial do Arduino Mega Server, que contém dois servidores ao mesmo tempo, otimizados especificamente para esta placa. Isso é o que está fora de questão, pois esses dois servidores contêm funcionalidade padrão e podem ser usados ​​para qualquer um dos seus projetos.

Você pode usar esses dois servidores independentemente na mesma placa ou adicionar a funcionalidade necessária e usá-los no modo tandem e bridge entre duas redes e quaisquer interfaces conectadas aos servidores.

O primeiro conjunto do Mega Servidor Arduino da placa RobotDyn Mega + ESP8266 contém um exemplo de teste da interação de dois controladores por meio de uma interface serial. Esta é uma demonstração dos recursos da tecnologia com base nos quais você pode desenvolver suas próprias soluções.

Agora um pouco mais sobre o desenvolvimento de um protocolo para a interação de dois controladores via interface serial em geral e nesta placa em particular.

Desenvolvimento de Protocolo


O que devemos construir uma casa? Precisa desenvolver um protocolo de interação entre as duas partes do sistema através da interface serial? - vamos desenvolver, aqui o principal é definir a tarefa de forma clara e correta. Para demonstrar a operação em conjunto do sistema, exibimos os indicadores de operação "parceiro" no painel de instrumentos de cada servidor.

Um pouco sobre terminologia. Para Mega, o "parceiro" é ESP8266, para ESP8266, respectivamente, Mega.

Quando o parceiro estiver trabalhando, o indicador acenderá esverdeado, quando não estiver trabalhando, vermelho e cinza quando o estado estiver indefinido. Isso é muito conveniente - durante a operação, você verá imediatamente o estado do alter ego do seu sistema.

Para uma solução prática para esse problema, existem exatamente um milhão de maneiras, escolheremos o seguinte: os blocos de comunicação de ambas as partes do sistema serão idênticos, a interação ocorrerá no modo full duplex, os blocos de informações terão um formato simples e claro:

?= 

ou

 ? 

Este é apenas um exemplo de teste para resolver a tarefa, você pode modificar esse protocolo de interação ou escrever seu próprio, adequado para suas tarefas. Mas no protocolo já implementado, você pode não apenas monitorar o status do parceiro, mas também usá-lo para muitos outros fins, por exemplo, transmitir o status dos pinos do controlador, o status dos sensores ou enviar comandos de controle ao parceiro.

Especificamente, em nosso sistema, as equipes terão esta aparência:

? mega = 1 - Mega envia dados sobre seu desempenho. Parâmetro "mega", valor "1".

? esp = 1 - ESP8266 envia dados sobre sua saúde. O parâmetro é "esp", o valor é "1".

Então, por exemplo, considere a implementação do protocolo para a mega parte do sistema.

Da maneira padrão, inicializamos o módulo AMS e o hardware Serial3 Mega a uma velocidade de 115200.

 void robotdynInit() { Serial3.begin(115200); modulRobotdyn = MODUL_ENABLE; started("RobotDyn", true); } 

Verificamos o status da porta Serial3 e, no caso de dados do parceiro, formamos a variável de sequência serialReq que contém os dados ou comandos recebidos.

 void checkSerial() { while (Serial3.available() > 0) { if (sFlag) { serialReq = ""; sFlag = false; } char c = Serial3.read(); if (c == 10) { sFlag = true; parseSerialStr(); } else if (c == 13) { // skip } else { if (serialReq.length() < MAX_SERIAL_REQ) { serialReq += c; } } // if } // while (Serial3.available() > 0) } // checkSerial() 

Analisamos os comandos e os dados e, no caso de informações sobre o estado do parceiro, tomamos medidas na forma de alterar o estado da variável esp.

 void parseSerialCmd() { String command, parameter; if (serialReq.indexOf(F("?")) >= 0) { int pBegin = serialReq.indexOf(F("?")) + 1; if (serialReq.indexOf(F("=")) >= 0) { int pParam = serialReq.indexOf(F("=")); command = serialReq.substring(pBegin, pParam); parameter = serialReq.substring(pParam + 1); } else { command = serialReq.substring(pBegin); parameter = ""; } if (command != F("esp")) { Serial.print(F("command/parameter: ")); Serial.print(command); Serial.print(F("/")); Serial.println(parameter); } if (command == F("esp")) { if (parameter == F("1")) { esp = 1; espTimer = millis(); } else { esp = 0; } } } // if (request.indexOf(F("?")) >= 0) } // parseSerialCmd() 

Você pode adicionar facilmente o processamento de qualquer outro comando alterando e adicionando à seção de código correspondente.

  if (command == F("esp")) { if (parameter == F("1")) { esp = 1; espTimer = millis(); } else { esp = 0; } 

Se você usar muitos comandos e dados em seus próprios projetos e análises, é melhor projetar esta seção de código na forma das funções correspondentes.

Resta apenas considerar a função padrão do módulo AMS, responsável por seu trabalho. Primeiro, o status da porta é verificado e, a cada quatro segundos, um comando é enviado ao parceiro que Mega está ativo e funcionando, e o tempo decorrido desde a última verificação dos dados do parceiro é verificado e, se exceder 8 segundos, conclui-se que o parceiro não está funcionando.

 void robotdynWork() { checkSerial(); if (cycle4s) { Serial3.println(F("?mega=1")); if (millis() - espTimer > 8000) { esp = 0; } } } 

Isso é tudo mágico. Verdade, nada complicado?

Código completo do módulo responsável pelas comunicações intersistema entre Mega 2560 e ESP8266
 /* Modul RobotDyn part of Arduino Mega Server project */ #ifdef ROBOTDYN_FEATURE bool sFlag = true; unsigned long espTimer = millis(); // Serial request #define MAX_SERIAL_REQ 32 String serialReq = ""; void robotdynInit() { Serial3.begin(115200); modulRobotdyn = MODUL_ENABLE; started("RobotDyn", true); } void printSerialStr() { Serial.print("["); Serial.print(serialReq); Serial.println("]"); } void parseSerialCmd() { String command, parameter; if (serialReq.indexOf(F("?")) >= 0) { int pBegin = serialReq.indexOf(F("?")) + 1; if (serialReq.indexOf(F("=")) >= 0) { int pParam = serialReq.indexOf(F("=")); command = serialReq.substring(pBegin, pParam); parameter = serialReq.substring(pParam + 1); } else { command = serialReq.substring(pBegin); parameter = ""; } // if (command != F("esp")) { Serial.print(F("command/parameter: ")); Serial.print(command); Serial.print(F("/")); Serial.println(parameter); //} if (command == F("esp")) { if (parameter == F("1")) { esp = 1; espTimer = millis(); } else { esp = 0; } } } // if (request.indexOf(F("?")) >= 0) } // parseSerialCmd() void parseSerialStr() { if (serialReq[0] == '?') { parseSerialCmd(); } else { printSerialStr(); } } void checkSerial() { while (Serial3.available() > 0) { if (sFlag) { serialReq = ""; sFlag = false; } char c = Serial3.read(); if (c == 10) { sFlag = true; parseSerialStr(); } else if (c == 13) { // skip } else { if (serialReq.length() < MAX_SERIAL_REQ) { serialReq += c; } } // if } // while (Serial3.available() > 0) } // checkSerial() void robotdynWork() { checkSerial(); if (cycle4s) { Serial3.println(F("?mega=1")); if (millis() - espTimer > 8000) { esp = 0; } } } #endif // ROBOTDYN_FEATURE 


Como é a saída no monitor serial


No Mega 2560 Serial Monitor, a saída, os dados e os comandos da parte ESP do sistema são exatamente iguais aos seus. Para distinguir a saída do parceiro da saída da Mega, seus dados são colocados entre aspas quadradas. Nesse caso, você pode ver a reinicialização do ESP8266 e o ​​log de inicialização do AMS no monitor serial da Mega.

Saída ESP8266 para o monitor da série Mega 2560

E o log da troca real de comandos entre as duas partes do sistema via interface serial. Você vê a saída do ESP8266 com informações sobre a decodificação de dados de status do Mega na interface serial do Mega, entre aspas quadradas.

Saída ESP8266 na decodificação de mega comando

Beleza na interface


Agora, um pouco sobre como tudo fica na interface do Arduino Mega Server. Para começar, darei capturas de tela de ambas as partes do sistema em funcionamento.

Arduino Mega Server para RobotDyn Mega + ESP8266

Elipses são circulados em torno de inscrições que identificam o controlador e a parte do sistema com a qual você está trabalhando atualmente. Os círculos são circulados em torno de indicadores que mostram o status do parceiro. No momento, tudo está em ordem, ambas as partes do sistema funcionam normalmente e interagem normalmente entre si através da interface interna. Se algo der errado, você saberá disso depois de 8 segundos no máximo.

Algo deu errado

Algo deu errado. O ESP8266 recebeu uma atualização de firmware pelo ar e a mega parte do sistema registrou o momento de sua reinicialização. Após alguns segundos, a parte ESP do sistema será retomada e o indicador apagará em vermelho.

Por conveniência, quando você passa o mouse sobre o indicador de status do parceiro, uma dica é exibida e a capacidade de clicar nele e em uma janela separada a interface da segunda parte do sistema, nesse caso, a parte ESP, é aberta. Isso é feito por conveniência, você pode a qualquer momento, com um clique, abrir a interface da segunda parte do sistema.

Dica para o AMS

Idéias do projeto


Agora, um pouco sobre o que você pode fazer com tudo isso, tendo um pouco de imaginação. A prancha habitual, completamente discreta à primeira vista, permite fazer muitas coisas completamente incomuns e interessantes. Isto é especialmente verdade na combinação com o Arduino Mega Server.

Então, a primeira coisa que vem à mente:

Encaminhar dados dos sensores entre os controladores. Em ambos os lados e em quantidades ilimitadas. Este é um sistema que possui as vantagens de ambas as partes e as possibilidades não se somam, mas o que é chamado de efeito sinérgico é observado.

A ponte entre as interfaces. O Arduino Mega Server pode trabalhar com muitas interfaces e este sistema permite rotear dados e comandos entre quaisquer interfaces com e sem fio conectadas.

Trabalhe na mesma rede quando o Mega via Ethernet Shield e o ESP8266 via Wi-Fi se comunicarem com dispositivos com e sem fio na mesma rede.

Trabalhe em redes diferentes quando o Mega estiver conectado à Ethernet com fio e o ESP8266 via Wi-Fi para outra rede e o sistema roteia comandos e dados de uma rede para outra.

A saída de uma parte do sistema na interface de outra. Via Ethernet usando feeds da Web padrão ou através de uma conexão serial interna.

Depuração Uma parte do sistema pode atuar como depurador e testador de outra parte do sistema, de acordo com o seu programa.

Temporizador de vigilância. Cada controlador pode atuar como um tipo de cão de guarda em relação a outro.

Falhas de log. Cada controlador pode manter registros do trabalho de seu parceiro, compilar estatísticas e relatar situações alarmantes.

Banco de dados para ESP8266. Usando esse sistema, você pode organizar algo como um banco de dados SQL no Mega para ESP8266. O ESP faz seu trabalho e o Mega atua como um sistema de armazenamento (até 32 GB).

Piscando um ao outro. Os controladores podem fazer a atualização dinâmica entre si de acordo com a lógica incorporada ou com a chegada de um comando de controle externo.

Módulos de conexão. Os controladores podem se conectar a vários periféricos que têm problemas para se conectar a qualquer parte do sistema.

E assim por diante, e assim por diante, acho que um leitor curioso será capaz de apresentar de maneira independente muitas maneiras não menos interessantes de usar esse sistema.

Conclusão


Na minha opinião, esta é uma solução muito interessante, e devemos agradecer muito ao RobotDyn por uma taxa tão interessante. Eu, pelo menos, digo isso sinceramente.

Faça o download do kit de distribuição do Arduino Mega Server para o RobotDyn Mega + ESP8266 e verifique pessoalmente a validade de tudo o que está escrito aqui. Você pode acessar o site oficial do projeto Arduino Mega Server na seção de downloads .

Source: https://habr.com/ru/post/pt402429/


All Articles