Primeiros passos com o Arduino Mega WiFi

No post apresentamos o Arduino Mega e algumas de seus recursos. Agora imagine que legal seria conectá-lo à rede internet e controlá-lo remotamente. Pois é, já inventaram um Arduino desses! O Arduino Mega WiFi . O Arduino Mega Wifi é uma versão não oficial do Arduino Mega que vem com um chip Esp8266 integrado na placa adicionando o recurso de conexão WiFi a placa. Possui a mesma pinagem e algumas melhorias em relação ao seu primo Arduino Mega. Neste post veremos algumas dessas melhorias, e um exemplo simples de um servidor web que controla um pino especifico da placa Mega WiFi.

Comparação entre Mega e o Mega WiFi

Na imagem abaixo podemos ver as duas placas lado a lado.

Figura 1 – Arduino Mega com WiFi e Arduino Mega2560.

Apesar de serem semelhantes o Mega WiFi possui alguns detalhes adicionais de hardware a observar:

Figura 2 – Visão em detalhes do Arduino Mega WiFi.

  • Utiliza entrada micro-USB ao invés de USB tipo B do Arduino Mega comum;
  • Drive USB-Serial CH340G;
  • Uma chave que faz a seleção de um modo de operação, vide seção Montando o Projeto para mais detalhes
  • Uma chave para selecionar qual UART (Serial) do Atmega2560 será conectada ao ESP8266;
  • Um conector Pigtail para conectar uma antena e aumentar a distância que a placa pode ficar do ponto de acesso WiFi.

Na tabela abaixo vemos um comparativo entre algumas especificações dos Arduinos Uno, Mega e Mega WiFi

Figura 3 – Comparativo entre Arduinos Uno, Mega e Mega WiFi.

O Arduino Mega WiFi além da óbvia vantagem sobre o Mega simples que é a conexão WiFi possui alguns recursos que valem a pena serem destacados.

  • Possui memória flash conectada ao ESP8266, de 4MB. (125 vezes a do Mega e 1000 vezes a do Uno);
  • Tensão de entrada recomendada 7~16V. O Mega comum tem faixa de 7~12V;
  • Corrente de saída. Em casos onde é usada alimentação externa os pinos de tensão de saída podem fornecer 1.6A para 5V e 1A para 3.3V. O Arduino Mega comum só pode fornecer 500mA e 50mA para 5V e 3.3V respectivamente.

Figura 4 – Pinos de tensão de saída da placa Mega com WiFi.

Instalação do Arduino Mega WiFi no Arduino IDE

Nessa etapa iremos incluir as placas da família do esp8266 na Arduino IDE. Com a IDE aberta clique em Arquivo -> Preferências:

Figura 5 – Acessando as preferências da Arduino IDE.

Na tela seguinte, digite o link abaixo no campo URLs adicionais de Gerenciadores de Placas:

Figura 6 – Adicionando URLs para o Gerenciador de placas.

https://arduino.esp8266.com/stable/package_esp8266com_index.json

Clique em OK para retornar à tela principal da IDE.

Agora clique em Ferramentas -> Placa -> Gerenciador de Placas:

Figura 7 – Acessando o Gerenciador de placas.

Digite no campo de buscas por esp8266 e selecione o esp8266 by ESP8266 Community e clique em INSTALAR.

Figura 8 – Instalando placas esp8266 na Arduino IDE.

Aguarde alguns minutos até que a instalação seja concluída. As placas da linha ESP8266 já estarão disponíveis na lista de placas da IDE do Arduino.

Exemplo – Servidor Web para controlar pinos

Nesta sessão vamos construir um pequeno servidor para controlar o pino 13 da placa Mega WiFi. O servidor irá nos servir uma página html simples com um botão que irá controlar o estado do pino. Este pino está conectado a um Led já incluso na placa facilitando nosso pequeno teste.Aqui utilizamos um Led mas você pode alterar e utiliza-lo para travar ou destravar uma fechadura, acionar uma lampada, um motor e etc.

Componentes Necessários

Montando o Projeto

Neste exemplo em específico não utilizarei nenhum componente além do próprio Arduino Mega WiFi. Além disso precisaremos de uma rede WiFi na qual a placa Mega irá se conectar.

Antes de fazer a programação devemos observar a posição dos DIP-switches, temos combinações diferentes para gravar o ESP8266 ou o ATmega2560.

Figura 9 – DIP-switches de seleção do modo de gravação.

Logo abaixo temos a tabela com as combinações DIP Switches. Preste bastante atenção antes de fazer a gravação.

Figura 10 – Tabela de modos de gravação.

Também temos uma chave para selecionar a UART que o Mega irá utilizar para se comunicar com o ESP8266. 

Figura 11 – Chave de seleção UART.

Temos a opção de usar a UART3 ou a UART0. Neste post usaremo a UART3.

Programando – ESP8266

Configure a placa Mega WiFi no modo onde o CH340G se conecta ao ESP8266 para upload, conforme a figura 10.

Depois vá até o menu de placas e verifique se a placa ESPDuino (ESP-13 Module) está selecionada. Compile e carregue seguinte código para o ESP8266.

Programando – Mega2560

Configure a placa Mega WiFi no modo em que o CH340G se conecta ao ATmega2560 para upload, conforme a figura 10.

Após a mudança na sequência de chaves vá até o menu de placas e troque para Mega2560. Compile e carregue seguinte código para o Mega2560.

Colocando para Funcionar

Primeiramente abra o Monitor Serial e observe qual ip atribuído ao Mega WiFi, reset a placa caso não tenha aparecido nenhuma mensagem.

Figura 12 – Mensagens enviadas pelo Arduino Mega WiFi.

Abra o seu navegador com o ip informado no Serial Monitor. Se tudo estiver funcionando corretamente, uma página semelhante a da imagem abaixo será exibida.

Figura 13 – Pagina HTML gerada pelo Arduino Mega WiFi .

Entendendo o código

Primeiramente vamos analisar as partes mais importantes do código carregado no ESP8266.

A primeira coisa que você precisa fazer é incluir o ESP8266WiFi biblioteca.

Troque o conteúdo das variáveis ssid e password pelas respectivas ssid e senha da sua rede WiFi.

Em seguida, você define seu servidor da Web para a porta 80.

Dentro da função setup() configure a porta serial para 115200 de baudrate,que será utilizada para enviar informações para o ATmega2560, como o IP por exemplo.

Em seguida o ESP8266 irá tenta se conectar a rede com as credenciais definidas acima. E enviará as informações  via serial ao ATmega2560.

Inicie o servidor web.

Na função loop() serão tratadas as solicitações dos clientes que se conectarem ao nosso servidor web.

O ESP8266 está sempre ouvindo os clientes conectados com esta linha:

Quando uma solicitação é recebida de um cliente, salvaremos os dados recebidos. O loop while a seguir estará em execução enquanto o cliente permanecer conectado.

Após fazer a leitura de toda solicitação recebida do cliente, podemos verificar qual URL está sendo recebida, pois ela irá mudar dependendo do comando que usamos. Arbitrei que “/13/on” será usada para ativar e “/13/off” para desativar. Após verificar qual dessas opções foi recebida, envie uma mensagem correspondente via serial ao ATmega2560.

Logo após enviaremos uma página de resposta ao cliente.

Vale destacar que a página será ligeiramente diferente dependendo da solicitação do cliente.Por exemplo se o cliente mandou o comando para ativar a saída do Arduino, enviaremos uma página com um botão escrito “Desligar” com um link para “/13/off” para que o cliente tenha somente a opção de desligar.

Agora vamos dar uma olhada no código para o ATmega2560. Primeiramente definimos uma string que irá armazenar as mensagens recebidas do ESP8266.

Configuramos o pino 13 como saída digital, aqui usamos a definição LED_BUILTIN pois faz referência ao pino que controla o LED integrado da placa, geralmente o 13. 

Definimos as duas portas seriais que serão utilizadas, a Serial3 está conectada ao ESP8266 e a Serial simples está conectada ao CH340G.

Dentro da função loop() o Mega2560 ficará sempre verificando o buffer da UART3, se existir algum dado, este será lido e replicado para a UART0 e enviado via USB para o usuário.

Acrescente cada caracter recebido a nossa string msg.

Faça uma busca pelas palavras LED_ON ou LED_OFF. Dependendo do resultado ative ou desative a saida 13.

Funcionamento

Bom por hoje é tudo. Se interessou pelo modelo Mega WiFi? Visite o site da loja e adquira o seu Arduino Mega WiFi hoje mesmo.

Yure Albuquerque

Graduando em Tecnologia Mecatrônica Industrial. Tenho experiência com Arduino e Raspberry Pi. Atualmente experimentando novas tecnologias como ESP32 e compartilhando no blog da Smart Kits.

Post navigation

23 Comentários

  • Muito bom sua explicação. uma das melhores que já vi. parabens. Gostaria que você fizesse uma com portas analógicas. lendo sensor de voltagem e mostrando na web.

    • Bom dia Manassés!
      Agradeço pelo comentário e fico feliz que o post tenha ajudado. Também achei sua sugestão um excelente tema para postagens futuras, em breve traremos um post sobre o assunto.
      Abraço.

    • Bom dia Sergio, existem projetos de impressoras que usam o Arduino Mega, o Mega WiFi serviria perfeitamente e em acréscimo você teria possibilidade de conecta-lo a rede de local e/ou internet para enviar um aviso remoto sobre o progresso da impressão, ou criar uma interface web de configuração da sua impressora ou até mesmo carregar um arquivo de impressão de forma remota.
      Abraço.

  • Yure, como vai? amigao veja se vc pode me ajudar, estou tentando fazer funcionar num arduino mega wifi o modulo nrf24l01, pois quero utilizar a parte wifi dele (esp8266) para se conectar a internet ( blynk) e a parte normal do mega com um modulo nrf24l01 acionando um led em outro arduino mega wifi, tmb com modulo nrf24l01. só que nao consigo fazer funcionar o modulo nrf24l01 de jeito nenhum. será que nao funciona esse modulo nessa placa?

    • Olá Huderson! Verifique as conexões do Arduino Mega com o modulo nrf24l01 pois este modulo utiliza barramento spi e os pinos dedicados ao spi do Arduino Mega são diferentes do Arduino Uno.
      Arduino Uno Pinos SPI:
      10 – SS;
      11 – MOSI;
      12 – MISO;
      13 – SCK.
      Arduino Mega Pinos SPI:
      50 – MISO;
      51 – MOSI;
      52 – SCK;
      53 – SS.

      Abraço!

  • Yure! Caramba você é fera mesmo, tenho 66 anos sou professor de física trabalho em colégio público no RJ, Será que consigo aprender e repassar para meus alunos? Por que acho que o futuro esta justamente nessa ciência. Você deu um Show ta de parabéns

  • Olá Yure, Excelente explicação, parabens, gostaria de saber como poderia se comunicar com um botão fisico no lado do arduino mega e o mesmo, quando for pressionado mandar algumas informacoes para ser enviado via post ou get pelo esp8266.

    Aguardo Resposta!!!!

    Abraços

    • Olá Renato, sim é possivel se pensar que a uart é uma interface bidirecional, você poderá enviar dados vindos do Atmega para o esp8266 facilmente.

  • Olá Yure, Parabéns pela explicação, com todo esse detalhamento de linha por linha ficou sensacional!!! Estou com um projeto para monitorar uma balança online e acredito que com esse seu projeto e algumas mudanças vou alcançar meu objetivo com muita mais facilidade! Obrigado!

  • Oi, estou tentando usar essa programação e tá dando certo mas sempre que tento adicionar mais um botão pra acionar outro led, o led não ascende!! A página da o comando no link, mas não liga o led! Vc conseguiria fazer um código com 2 botões pra 2 leds?

  • Nesse exemplo o esp8266 passa dados para o mega2560 (inicializando o serial3 no mega2560) porém se eu quiser passar um dado do mega2560 para o esp8266 como que eu faço? ja tentei de tudo.
    A minha placa é igual a do exemplo com o wifi integrado.

    • Olá Marcus, você vai precisar programar o esp8266 pare fazer leituras do buffer serial usando Serial.available() para checar se há novos dados e Serial.read(), por exemplo, para pegar o dado que foi recebido. Do lado do atmega2560 você vai precisar usar serial3.print() ou serial3.write() para enviar os dados que precisa.Não esquecer de alterar a chave da UART0 para UART3 também.

  • Boa noite Yure,
    Estou com o mesmo problema do Marcus.
    Usei os comandos que você menciona acima, mas não consigo obter êxito nem monitorar na serial o que acontece.
    Veja os dois programas de exemplo abaixo e se possível me diga como resolver, ok?
    NO MEGA FUNCIONANDO
    // *****************
    // Secket no Mega
    // Teste de seriais

    void setup() {
    Serial.begin(9600);
    Serial3.begin(9600);

    while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
    }
    }

    void loop() {
    while (Serial3.available() > 0) {
    char inByte = Serial3.read();
    Serial.write(inByte);
    if (inByte == ‘M’) {
    Serial.println(“X-X-X-X-X – MEGA – X-X-X-X-X “);
    Serial.println(“1”);
    }
    if (inByte == ‘E’) {
    Serial.println(“X-X-X-X-X – E S P – X-X-X-X-X “);
    Serial.println(“2”);
    }
    }
    delay(3000);
    Serial.println();
    }

    NO ESP8266 SEM FUNCIONAR O RETORNO DO MEGA
    // ****************
    // Secket no ESP
    // Teste de seriais

    void setup() {
    Serial.begin(9600);
    Serial1.begin(9600);

    while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
    }
    }

    void loop() {
    Serial.println(“M”);
    delay(3000);
    Serial.println(“E”);
    delay(3000);

    while (Serial1.available() > 0) { //AQUI ESTÁ O PROBLEMA. NÃO CONSIGO LER O QUE DEVERIA VIR DA SERIAL DO MEGA.
    char inByte = Serial1.read();
    Serial.write(inByte);
    if (inByte == ‘1’) {
    Serial.println(“MEGA01 “);
    }
    if (inByte == ‘2’) {
    Serial.println(“ESP02 “);
    }
    }
    delay(3000);
    }

    • Olá Marcone, o Mega WiFi tem chaves para interligar a UART0, GPIO1 (TX) e GPIO3 (RX), do ESP8266 com o Atmega ou com o chip conversor usb/serial nunca os dois simutanemanete. Portanto se precisar ler o que recebe do Atmega você pode ligar um conversor usb/serial extra ao pino GPIO2(TX1) e usar Serial1 para poder obter as informações que precisa. Ou criar um codigo para enviar mensagens via socket, mqtt ou outro protocolo de internet.

  • Olá, ao reralizar o upload do código pro ESP aparece esse erro

    Executable segment sizes:

    ICACHE : 32768 – flash instruction cache

    IROM : 249000 – code in flash (default or ICACHE_FLASH_ATTR)

    IRAM : 27565 / 32768 – code in IRAM (IRAM_ATTR, ISRs…)

    DATA : 1504 ) – initialized variables (global, static) in RAM/HEAP

    RODATA : 1896 ) / 81920 – constants (global, static) in RAM/HEAP

    BSS : 25744 ) – zeroed variables (global, static) in RAM/HEAP

    Sketch uses 279965 bytes (26%) of program storage space. Maximum is 1044464 bytes.
    Global variables use 29144 bytes (35%) of dynamic memory, leaving 52776 bytes for local variables. Maximum is 81920 bytes.
    A programmer is required to upload

    Como proceder?

  • Bom dia! Estou começando com programação de arduino. Gostaria de saber como faço para acrecentar um novo comando para acionar uma segunda saída do arduino mega.

  • Bom dia! Estou começando com programação de arduino. Gostaria de saber como faço para acrecentar um novo comando para acionar uma segunda saída do arduino mega.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Usando Múltiplos Sensores de Distância Laser VL53L0X

Módulo Bluetooth AT-09 com Arduino

Blynk – Medição de temperatura com DS18B20