Robô IoT com ESP8266 NodeMCU 22

Nosso projeto de Robô IoT com ESP8266 NodeMCU vai juntar os tópicos que foram vistos nos posts NodeMCU com MQTT e Como controlar motor dc com ESP8266 NodeMCU. O NodeMCU é uma placa / plataforma muito boa para prototipação rápida de soluções IoT.

Detalhe NodeMCU

Junto com o MQTT, vamos construir um robô totalmente controlado pela Internet à partir de um navegador web comum!

Descrição do projeto Robo IoT com ESP8266 NodeMCU

O projeto deste post consiste em um robô equipado com um módulo ESP8266 NodeMCU, controlado via Internet por MQTT. Tal robô utilizará duas rodas para locomoção, sendo capaz de se movimentar em três direções: para frente, para a esquerda e para a direita.

Utilizar MQTT para este controle permitirá:

  • Controle do robô IoT com ESP8266 NodeMCU a partir de uma página web
  • Controle do robô de qualquer lugar do planeta que possua conexão com a Internet
  • Possibilidade de controlar o robô a partir de qualquer dispositivo conectado à Internet(exemplo: smartphones, tablets e computadores), com qualquer sistema operacional.

O diagrama de como o robô IoT com ESP8266 NodeMCU será controlado pode ser visto na figura abaixo:

 Esquema Robô IoT com ESP8266 NodeMCU

Na comunicação MQTT para controle do robô, o payload da mensagem informará qual ação o robô deve tomar. As ações possíveis podem ser visualizadas na tabela abaixo:

Tabela Ações Robô IoT

A forma de execução de um comando / ação é a seguinte: o robô vai executar indefinidamente o último comando recebido até que seja recebido um novo comando válido.

Material utilizado no projeto Robô IoT com ESP8266 NodeMCU

Para construir este robô, será necessário o seguinte material:

 

Esquema elétrico do Robô IoT com ESP8266 NodeMCU

Na figura abaixo está o esquema elétrico do Robô IoT:

Esquemático Robô IoT com ESP8266 NodeMCU

Programação do ESP8266 NodeMCU

Abaixo, segue o código-fonte completo do projeto.
Importante: leia atentamente os comentários do código!

Interface web

Para controlar o robô IoT com ESP8266 NodeMCU por MQTT, foi desenvolvida uma interface web. Você pode baixá-la clicando aqui.

Assim como foi feito no artigo sobre MQTT no NodeMCU, você pode hospedar essa interface em QUALQUER servidor web ou mesmo rodar no seu próprio computador / rodar localmente (desde que o computador possua conexão com Internet, claro)! Esta interface web é basicamente um websocket que se comunica diretamente com o broker, por isso pode estar rodando em qualquer lugar com disponibilidade de Internet que funciona.

Observe a figura abaixo:

Interface Web NodeMCU

Monte também o seu robô IoT e boa diversão!

Gostou ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!

Posts Relacionados

22 Comentários

  1. Ótima série de posts Pedro, vai agregar bastante a comunidade!

    1. Filipe, muito obrigado!

      Fico feliz que gostou do post! Pra mim é uma satisfação poder ajudar a comunidade!

      Atenciosamente,
      Pedro Bertoleti

  2. Boa noite!

    Gostaria de saber qual é o comando para utilizar o Motor de vibração no arduino uno? (comando para fazer ele vibrar)
    esse motor = https://www.filipeflop.com/pd-361d89-motor-de-vibracao-1027.html?ct=&p=1&s=1

    Obrigado

    1. Boa tarde Guilherme,

      Esse motor não tem comando, você aplica tensão nos terminais e ele começa a vibrar. No Arduino, você pode controlar a vibração ligando e desligando uma porta digital, por exemplo.

      Abraço!

      Adilson – Equipe FILIPEFLOP

  3. Parabéns Pedro pelo post. Vc sabe se dá para colocar mais um sensor de distância e dois leds neste robô? Ou seja, qtos GPIOs tem disponíveis ainda neste robô?
    Grato,
    Augusto

    Augusto Fernandes Vellozo
    1. Augusto, boa tarde.

      Obrigado pela leitura e pelo elogio. Quanto às suas perguntas:

      – Dois LEDs com certeza é possível colocar
      – O sensor de distância eu nunca utilizei com o NodeMCU. Sendo assim, infelizmente não sei te dizer se funcionaria 100%.
      – Ainda há 9 GPIOs disponíveis. Ou seja, dá pra acrescentar algumas funcionalidades neste robô sem problemas.

      Atenciosamente,
      Pedro Bertoleti

  4. Olá, comprei o esp8266 e fiz a conexão conforme o post e ocorreu tudo bem, só que na interface aparece somente a roda esquerda e centralizada. Não passei o pente fino no código ainda, mas fica o comentário construtivo e se rodar certinho com vocês me avisa.
    Parabéns pelo material e pela entrega também que foi muito rápida.

    1. Paulo, boa tarde.

      Muito obrigado pelo elogio, pela leitura e desculpe pela demora. Eu verifiquei novamente aqui e a interface rodou sem problemas.
      Para melhor entender o problema, por favor responda:
      1) Qual navegador utilizou?
      2) Abriu no celular ou computador?

      Atenciosamente,
      Pedro Bertoleti

    2. Após executar no navegador (Safari ou Chrome) em ambos não aparecem as 2 rodas realmente!

  5. Olá, Pedro!
    Observando o código do projeto, creio que houve uma pequena inversão na definição dos tópicos para publicação e subscribe. Nas linhas 6 e 7, está assim:
    #define TOPICO_SUBSCRIBE “MQTTRoboIoTFilipeFlopEnvia” //tópico MQTT de escuta
    #define TOPICO_PUBLISH “MQTTRoboIoTFilipeFlopRecebe” //tópico MQTT de envio de informações para Broker

    Pergunto eu: não seria o contrário?

    #define TOPICO_SUBSCRIBE “Recebe” //tópico MQTT de escuta
    #define TOPICO_PUBLISH “Envia” //tópico MQTT de envio de informações para Broker

    Ou seja, “Recebe” para o SUBSCRIBE e “Envia” para o PUBLISH ?

    Sei que o que está entre aspas pode ser alterado na interface web (vc até recomenda isso), mas a lógica não seria essa?

    Parabéns pelo seu trabalho na FilipeFlop! Estou começando com um Arduino (comprei um Mega2560 exatamente hoje) e gosto muito dos seus posts aqui no Blog.

    Atenciosamente,

    Pedro

    1. Pedro, boa noite.

      Primeiramente, muito obrigado pela leitura e pelos elogios! Fico feliz que você curtiu o projeto!

      No caso dos tópicos, a “referência” de nome dos mesmos é a interface web (ou seja, quando a interface web envia algo, o nodemcu deve escutar e vice-versa). Por isso, no programa do NodeMCU, já esta impressão de que as coisas estão ao contrário.
      Ficou claro? Se não ficou, me avisa que explico de outra forma.

      Atenciosamente,
      Pedro Bertoleti

  6. Boa noite, topei fazer esse projeto . Achei bem interessante, agradeço por terem disponibilizado. Gostaria de saber quais os resistores (intensidades) deverão ser utilizadas !

    1. Joel, boa tarde.

      Muito obrigado por curtir o projeto e querer dar vida ao mesmo também!
      Quanto aos resistores, estes são de valores 2k2 e 220 ohms.

      Atenciosamente,
      Pedro Bertoleti

      1. E no caso, eles iriam em que entrada/saída , cada um ?

        1. Joel, observe o circuito esquemático contido neste artigo. Lá você obtém esta informação.

  7. Vc usou esse programa na IDE do arduino?

  8. Bom dia!

    Fiz as conexões do esp8266 e abri a interface web nos navegadores (Chrome e Explorer), mas apesar de dar o comando via interface ou clicando na letras indicadas o robô não está recebendo o comando.
    Obs. Aparece interface “Esse site diz…”0-0 quando clico parar, 1-1 quando clico frente.
    E gostaria de saber se poderia utilizar o “D1 Arduino compatible Based Esp8266” utilizando a mesma programação.

    Obrigado

    1. Iago, boa noite.

      Não aparece os simbolos de duas rodas (representando roda esquerda e roda direita) quando o comando é recebido? Você testou no seu computador ou em algum dispositivo móvel (tablet ou smartphone, por exemplo)?
      Faço estas perguntas para entender melhor o seu cenário e te ajudar a resolver.

      Atenciosamente,
      Pedro Bertoleti

      1. Bom dia Pedro!

        Os 2 símbolos aparecem, mas os comandos só estão aparecendo na própria interface como avia tido 1-0 (Esquerda), 0-1(Direita) , 1-1(Frente) e 0-0 (Parado) lembrando que o robô fica parado independente do comando.
        Testei no meu computador e também no smartphone (não apareceu esses comandos 1-1).

        E gostaria de saber se eu poderia utilizar o “D1 Arduino compatible Based Esp8266″ utilizando a mesma programação e o mesmo circuito.

        Att:
        Iago Bacelar

        1. Iago, quanto a usar o “D1 Arduino compatible Based Esp8266″ eu não sei, pois nunca utilizei este.
          Quanto ao robo, você modificou os nomes dos tópicos de envio e recepção, certo? Os nomes dos tópicos no NodeMCU estão iguais aos da interface?

          1. Boa Tarde Pedro

            Eu mantive o mesmo nome que está na programa fornecida pelo filipeflop, conferi os tópicos de envio e recepção, verifiquei a tensão de entrada do relé, e também a minha alimentação.
            E mesmo assim não consigo dar comando fica interface web.

            Obs. No meu wifi aparece o ESP conectado.

            Att
            Iago Bacelar

            Iago Bacelar

Deixe uma resposta

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