O MIRO é uma plataforma de robô indoor aberta. Parte 3 - Componente de software: ESP8266

imagem

Começamos a desmontar o componente de software da plataforma MIRO. Vamos ver como “cozinhar” o ARDUINO UNO usando o ESP8266 para firmware e comunicação sem fio.

Índice: Parte 1 , Parte 2 , Parte 3 , Parte 4 , Parte 5 .

Eu não queria que desenvolvêssemos nada para o ESP8266. Eu tinha certeza de que, por um longo tempo, havia uma solução pronta para uso com a funcionalidade necessária. E para o MIRO, essa funcionalidade era bastante simples:

  1. O software deve ter uma interface da web para configuração de rede;
  2. O software deve implementar o firmware sem fio ATMEGA328;
  3. O software deve ter a funcionalidade de ponte WiFi-UART para depuração e gerenciamento sem fio.

imagem Provavelmente, para a maioria dessas funções, existe o conhecido ESP-LINK . E ele é realmente poderoso. Nós o usamos em vários outros projetos como uma ponte entre diferentes interfaces - muito conveniente. Mas alguns meses atrás, quando nos sentamos para lidar de perto com esse problema, verificou-se que ele não estava mostrando o ARDUINO UNO. Em todo lugar eles escrevem que estão piscando, mas ele não piscou. E, naquele momento, eu nem sequer entendi profundamente o porquê e qual é o procedimento padrão. Meus camaradas e eu simplesmente configuramos uma porta COM virtual no host em um endereço IP específico do ESP, indicamos a linha de redefinição no próprio ESP-LINK e tentamos exibi-lo. O ATMEGA328 foi redefinido com êxito, mas o firmware não foi inundado. Além disso, a rede tem várias lições sobre como organizar esse firmware com o ESP-LINK. Mas se você ler o problema, eles sempre terão algo que alguém não está piscando.

Desapontado, ele começou a procurar alternativas. E eu achei isso como uma bifurcação do WiFi original do Arduino no GitHub de um desenvolvedor com o apelido jandrassy.
Em fevereiro daquele ano, havia uma instrução monstruosa no README para configurar tudo, desde o firmware ao ambiente de desenvolvimento, mas agora isso foi bastante simplificado. No entanto, ainda é preciso um pouco de esforço para configurar o ambiente. No entanto, o firmware ARDUINO é perfeito. Ele é verificado tanto no Windows quanto no Linux (no MacOS parece que nunca testamos nada - ninguém no ambiente imediato do projeto).

A ordem de preparar o ambiente é esta:

  1. Baixe e instale a biblioteca dfu a partir daqui ;
  2. Por padrão, nesta biblioteca (no arquivo esp8266-serial-arduinouno-hacked.cpp), é anunciado que a linha Reset do chip ATMEGA328 está conectada à linha GPIO5 ESP8266. Para o MIRO, você precisa fazer alterações aqui - mude para GPIO2.

O que exatamente mudar
Foi:

esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(5, OUTPUT); digitalWrite(5, 0); delay(1); digitalWrite(5, 1); delay(200); return 0; } 

Tornou-se:

 esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(2, OUTPUT); digitalWrite(2, 0); delay(1); digitalWrite(2, 1); delay(200); return 0; } 


O autor do jandrassy indica que sua implementação funciona apenas com essa configuração do chip e do carregador de inicialização de destino (ATMEGA328P com Optiboot).

Estou certo de que ainda existem soluções e possivelmente ainda melhores. Se alguém souber com certeza as opções de trabalho, me avise. Porque, apesar da grande quantidade de códigos prontos, verificamos, além do ESP-LINK, outros 2 ou 3 projetos - eles não funcionaram. Em alguns casos, o firmware passou uma vez; em alguns casos, não funcionou.

Talvez uma das principais vantagens da solução encontrada seja a base de códigos relativamente pequena do projeto e o fato de o firmware do Arduino Core ser desenvolvido.

O que não estava no projeto jandrassy era a ponte sem fio WiFi-UART. Já no firmware original do link WiFi do Arduino.org, uma página com uma janela do terminal foi cortada, permitindo que o navegador trabalhasse com o chip UART ATMEGA328. Assim pode ser feito no ESP-LINK. E se voltarmos para as primeiras publicações sobre o Arduino UNO WiFi (por exemplo, aqui está ), fica claro que nas primeiras versões do firmware tanto a janela quanto o item de menu correspondente (“Console WiFi”) são. E mesmo na versão 1.0.0 no arquivo morto, o arquivo console.js (que acabou de implementar esta página) está, mas na verdade não está envolvido no servidor de nenhuma maneira (verificamos). Por que e por que eles viram isso não está claro.

Eu tive que terminar alguma coisa. Agora, há outro servidor no firmware - TELNET na porta óbvia 23, com a qual muitos programas de terminal funcionam sem problemas.

No entanto, no momento, para que tudo funcionasse, tive que remover do código jandrassy a parte responsável pelo firmware sem fio do próprio ESP. Nos requisitos iniciais, eu não tinha essa funcionalidade, então tudo bem. No entanto, se os leitores nos comentários puderem afirmar afirmativamente se é possível em um firmware implementar a possibilidade de firmware sem fio do próprio ESP8266 e do MCU "externo" (neste caso, ATMEGA328), então pensarei em retornar esse recurso ao firmware do ESP. Já na preparação do artigo, indiretamente, vi confirmação disso neste rascunho de canadenses. Mas não checou.

Enquanto isso, o ESP é intermitente exclusivamente via cabo, mas o ARDUINO tem a capacidade de firmware sem fio e comunicações TELNET via ponte WiFi-UART. E é muito conveniente! Meu objetivo é alcançado.

Bem, no projeto, como no original, existe uma interface WEB para configurações (as imagens são clicáveis).





Alteramos os arquivos CSS dos estilos de interface WEB para o nosso projeto e introduzimos uma pequena “muleta” - agora o ESP está sempre no modo AP + STA. Essa muleta foi feita para excluir a possibilidade de alternar o ESP para o modo "apenas STA", no qual, ao transferir o robô para uma sub-rede diferente, o usuário perde a capacidade de configurar o robô em uma nova rede - o robô não pode se conectar à nova rede, mas também não há acesso externo - Eu tenho que atualizar o ESP. No modo AP + STA, o usuário sempre pode conectar-se ao ponto de acesso do robô e configurar a conexão com a nova rede WiFi.

Sobre como piscar ESP8266 com este "monstro". Em geral, para um módulo arbitrário em um chip ESP8266, o pedido é o seguinte:

  1. Ligue o quadro (conecte ao usb);
  2. Defina os parâmetros da placa como na figura;

    imagem

    É muito importante selecionar “v1.4 Maior largura de banda” - se você selecionar “v2”, depois do firmware não será possível conectar à placa via WiFi (o ponto de acesso é visível, mas o procedimento de conexão não funciona - quem sabe com o que está conectado - escreva nos comentários).
  3. Selecione uma porta (no exemplo na captura de tela - COM3).
  4. Execute o firmware. Durante o procedimento para carregar a placa, a memória do microcontrolador é apagada primeiro e, em seguida, o firmware é apagado.
  5. Depois de concluir o procedimento do firmware, você precisa redefinir a placa usando o botão de redefinição.
  6. Selecione Upload de dados de esboço do IDE ESP8266 do Arduino no menu e faça o download de SPIFFS.
  7. Redefina o quadro.

Para a configuração com nossa "placa modificada" UNO + WiFi (consulte a primeira parte ), tudo é um pouco mais complicado devido aos recursos de hardware da placa, que é difícil de estudar confortavelmente devido ao grande número de erros no documento com o diagrama de circuito. Escrevemos instruções mais detalhadas no arquivo “manual de upload de firmware do MIRO ESP Firmware” - se você agir estritamente com ele, o firmware passa 100 de 100.

Chegamos a uma parte muito interessante - o componente de software MIRO atribuído ao ATMEGA328. Também há mais trabalho e espaço para discussão de várias soluções.

Obrigado a todos!

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


All Articles