Controlando un Hexbug desde internet con ESP8266

El dia de hoy vamos a aprender a controlar un Hexbug desde internet utilizando un ESP8266, Node-RED, MQTT y un controlador de motores, ¡Asi que bienvenidos! 😀

Esta Guia puede ser utilizada para cualquier otro juguete o mecanismo que utilice dos motores y quieran llevarlo a la era del internet de las cosas, eso si tienen que tener cuidado con la latencia de su red wifi, es decir no sera instantaneo el movimiento del robot cuando ustedes presionen un boton en la pagina web, pueden montar su propio servidor y usar un router propio para lidiar con este problema, pero como lo que queremos esta vez es hacerlo desde internet entonces vamos a lidiar con ese problema debido a la velocidad del internet al cual nos conectemos.

Vamos por partes lo primero que vamos a hacer sera montar una pagina web rapida en Node-RED y luego nos pasamos al área de hardware.

Node-red

lo que vamos a hacer es mediante una pagina enviarle comandos al topico movimiento al cual el ESP8266 debe estar suscrito previamente y asi poder hacer que camine hacia adelante, atras, rote la direccion, se detenga o haga un sonido.

DeepinScreenshot20170428213653

Para los que no saben que es node-red ni como instalarlo les dejo aca la guia para hacerlo.

vamos a hacer uso del dashboard de node-red, tambien flujos de MQTT, de igual manera les dejare el codigo para poder importarlo por si se les dificulta el hacerlo.

Para importar el siguiente codigo, hacemos lo siguiente, click en unas rayitas de lado derecho hasta arriba luego import y luego clipboard.

DeepinScreenshot20170428211022.png

Ahora vamos a la pagina generada en este caso la url es de este tipo 127.0.0.1:1880/ui

Aqui el codigo para poder importarlo.

[{"id":"4a1ded25.3d660c","type":"tab","label":"Hexbug controller"},{"id":"271e95ab.0d86c2","type":"ui_button","z":"4a1ded25.3d660c","name":"avanzar","group":"44059fa6.867ff","order":2,"width":0,"height":0,"label":"avanzar","color":"","bgcolor":"","icon":"keyboard_arrow_up","payload":"avanzar","payloadType":"str","topic":"/movimiento","x":214.88333129882812,"y":122.38333129882812,"wires":[["308a4eb1.f0a1da"]]},{"id":"4c44b2ee.a0afdc","type":"ui_button","z":"4a1ded25.3d660c","name":"","group":"44059fa6.867ff","order":3,"width":0,"height":0,"label":"Retroceder","color":"","bgcolor":"","icon":"keyboard_arrow_down","payload":"retroceder","payloadType":"str","topic":"/movimiento","x":225.88333129882812,"y":154.38333129882812,"wires":[["308a4eb1.f0a1da"]]},{"id":"d73bab01.538328","type":"ui_button","z":"4a1ded25.3d660c","name":"","group":"44059fa6.867ff","order":4,"width":0,"height":0,"label":"Girar Derecha","color":"","bgcolor":"","icon":"keyboard_arrow_right","payload":"girarderecha","payloadType":"str","topic":"/movimiento","x":234.88333129882812,"y":184.38333129882812,"wires":[["308a4eb1.f0a1da"]]},{"id":"879b798b.7f126","type":"ui_button","z":"4a1ded25.3d660c","name":"izquierda","group":"44059fa6.867ff","order":5,"width":0,"height":0,"label":"Girar izquierda","color":"","bgcolor":"","icon":"keyboard_arrow_left","payload":"girarizquierda","payloadType":"str","topic":"/movimiento","x":216.88333129882812,"y":217.38333129882812,"wires":[["308a4eb1.f0a1da"]]},{"id":"d0cf0684.56ae9","type":"ui_button","z":"4a1ded25.3d660c","name":"","group":"44059fa6.867ff","order":6,"width":0,"height":0,"label":"Parar","color":"","bgcolor":"","icon":"stop","payload":"parar","payloadType":"str","topic":"/movimiento","x":203.88333129882812,"y":245.38333129882812,"wires":[["308a4eb1.f0a1da"]]},{"id":"c2296b3c.d7ac6","type":"ui_button","z":"4a1ded25.3d660c","name":"","group":"44059fa6.867ff","order":8,"width":0,"height":0,"label":"bocina","color":"","bgcolor":"","icon":"volume_up","payload":"bocina","payloadType":"str","topic":"/movimiento","x":202.88333129882812,"y":277.3833312988281,"wires":[["308a4eb1.f0a1da"]]},{"id":"308a4eb1.f0a1da","type":"mqtt out","z":"4a1ded25.3d660c","name":"","topic":"","qos":"","retain":"","broker":"416d44b7.bbbe84","x":491.8833312988281,"y":186.5500030517578,"wires":[]},{"id":"f4a56dbc.110b5","type":"mqtt in","z":"4a1ded25.3d660c","name":"","topic":"/movimiento","qos":"2","broker":"416d44b7.bbbe84","x":229.88333129882812,"y":344.7833251953125,"wires":[["7a9ed7c1.54dcc8"]]},{"id":"7a9ed7c1.54dcc8","type":"debug","z":"4a1ded25.3d660c","name":"","active":true,"console":"false","complete":"false","x":405.8833312988281,"y":336.8333435058594,"wires":[]},{"id":"44059fa6.867ff","type":"ui_group","z":"","name":"control hexbug","tab":"3c3b94d0.69b88c","order":1,"disp":true,"width":"6"},{"id":"416d44b7.bbbe84","type":"mqtt-broker","z":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"3c3b94d0.69b88c","type":"u
i_tab","z":"","name":"control hexbug","icon":"dashboard","order":1}]

ahora vamos a la parte de hardware.

Vamos a utilizar Micropython 😀

codigo:

#"""
#Este codigo fue creado para controlar un Hexbug desde internet utilizando MQTT, se suscribe al topico
#movimiento recibe 6 comandos, avanzar, retroceder, girar a la derecha, girar a la izquierda, parar y tocar la bocina. 

#"""

import machine, network
from umqtt.robust import MQTTClient


def conectar():
    #wlan = network.WLAN(network.AP_IF)
    #wlan.active(False)
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    #wlan.ifconfig(('ip', 'netmask', 'gateway', 'DNS'))
    if not wlan.isconnected():
        print('Conectando a la red...')
        wlan.connect('SSID', 'password')
        while not wlan.isconnected():
            pass
    print('configuracion de red:', wlan.ifconfig())


def mqtt_callback(topic,msg):

    print((topic,msg))
    msg=msg.decode()
    if(msg=="avanzar"):
        avanzar()
    elif(msg=="retroceder"):
        retroceder()
    elif(msg=="girarderecha"):
        girarderecha()
    elif(msg=="girarizquierda"):
        girarizquierda()
    elif(msg=="parar"):
        parar()
    elif(msg=="bocina"):
        bocina()
    else:
        print("error")

def retroceder():
    print("avanzar")
    salida1.high()
    salida2.low()
    salida3.low()
    salida4.low()
    bocina.low()
def avanzar():
    print("retroceder")
    salida1.low()
    salida2.high()
    salida3.low()
    salida4.low()
    bocina.low()
def girarderecha():
    print("girarderecha")
    salida1.low()
    salida2.low()
    salida3.high()
    salida4.low()
    bocina.low()
def girarizquierda():
    print("girarizquierda")
    salida1.low()
    salida2.low()
    salida3.low()
    salida4.high()
    bocina.low()
def bocina():
    print("bocina")
    bocina.high()
def parar():
    print("parar")
    salida1.low()
    salida2.low()
    salida3.low()
    salida4.low()
    bocina.low()

conectar()
#estas son las salidas GPIO del ESP8266-12e del nodemcu 
salida1= machine.Pin(14,machine.Pin.OUT)#D5
salida2= machine.Pin(12,machine.Pin.OUT)#D6
salida3= machine.Pin(13,machine.Pin.OUT)#D7
salida4= machine.Pin(15,machine.Pin.OUT)#D6
bocina= machine.Pin(5,machine.Pin.OUT)#D1

broker = "45.55.156.117"
cliente = MQTTClient("hexbug",broker)
cliente.set_callback(mqtt_callback)
cliente.connect()
cliente.subscribe(b"/movimiento")
print("listo")
while True:
    cliente.check_msg()

 

Estamos utilizando los pines del nodemcu que estan marcados como D5, D6, D7, D8 y D1, un controlador de motores l293d con la configuracion normal solo es cuestion de que ustedes prueben.

Les dejamos videos del funcionamiento 😀

He empezado a escribir mi codigo en español, pues porque mi blog esta en español.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: