Muy buenas a todos!
Mi nombre es Ricardo y soy nuevo por aquí. Os he leido mucho y más de una vez me ha sacado de algún problemilla, gracias!. Esta vez me toca exponer a los sabios mi problema porque llevo dias tratando de encontrar la solución y no lo localizo, sin más os expongo el problema.
Estoy haciendo un proyecto de IoT con Home Assitant+MQTT+sensores conectados a Arduino.
Cuando hago un proyecto de esta envergadura voy dando pasitos de hormiga, y según voy teniendo avances lo voy juntando con mi proyecto y ya lo adapto para encajarlo.
Actualmente ya tengo el servidor MQTT funcionando y el Home Assistant. Mi siguiente objetivo es integrar un sensor para que envíe por el MQTT la señal. La solución fácil? Dejarme de simuladores y montarlo sobre un Arduino real con su shield ethernet(sin duda, me muero de ganas de que llegue este momento!), el problema es que me encuentro estudiando por unos meses en el otro lado del mundo y no tengo aquí mis juguetes para llevarlo acabo, y como imagino os pasará igual, durante la cuarentena por el coronavirus me ha picado el gusanillo, en mi caso estoy descubriendo la domótica "low cost". No puedo comprar nada porque están todas las tiendas cerradas y con todo el tiempo libre estoy tratando de ir avanzando un poquito. (Todo esto no es relevante pero lo cuento para poneros en situación, disculpad.)
Mi actual objetivo es tratar de hacer la simulación de un pulsador conectado al arduino que envía al servidor MQTT una señal de HIGH al ser pulsado.
El Arduino lo estoy conectando a la red con el módulo ENC28J60.
He realizado varias pruebas y he podido hacer funcionar un servidor web en local mediante la libreria EtherCard.h de Arduino, pero el problemilla es que esta librería no es compatible con la del MQTT (PubSubClient.h).
Después de investigar he descubierto que se puede usar la libreria de Arduino de PubSubClient.h con EtherCard.h, asique me he puesto manos a la obra a trabajar con esta librería y ahora viene lo divertido!!
En mi caso trabajo con Proteus 8.8 SP1 y para conocer el código he abierto el ejemplo (file->Open Sample Proyect) "Arduino with ENC28J60 Ethernet Shield". En mi equipo tengo instalado WINPCAP, VMware, VirtualBox... e inicialmente no me funcionaba. Revise la configuración de las tarjetas de red, y dado que la IP que da por defecto (192.168.95.6) no estaba en mi rango (192.168.0.X), agregue manualmente una segunda IP al adaptador. Shit... seguia sin funcionar. Después de pelearme un montón descubrí que solo me funciona si deshabilito la tarjeta de red del WIFI al momento de lanzar la simulación. Primera batalla superada!
Y ahora si que sí viene lo más divertido!! He conseguido lanzar el ejemplo y funciona! Mi siguiente objetivo es cambiar la IP una del rango 192.168.0.X y al cambiarla resulta que ya no consigo llegar haciendo PING. Mi siguiente idea es hacer un cambio menor por si el problema esta en la red y decido hacer un cambio muy sencillo a 192.168.95.7. Al cambiarla veo que sigo sin llegar asique ya empiezo a sospechar que esto no iba a ser tan fácil... En el "source code" que se carga al Arduino viene inicialmente un texto simplemente describiendo que hacen los pines y decido borrar un carácter para hacer la prueba y... tachán!! sigue fallando!
En este punto me doy cuenta que el fallo viene cuando modifico cualquier cosa del archivo. Cuando lo abres por primera vez coge una compilación del archivo que ya tiene guardado Proteus, pero si modificas algo necesita compilar nuevamente y es ahí cuando ya no me funciona.
Buscando por Internet localice un BLOG que justo hace el ejemplo que estoy tratando de probar
https://anibalismo.wordpress.com/2016/05/19/arduino-y-enc28j60-en-proteus-isis-con-foticos/ y leo que le funciona perfectamente! Decido descargarme la prueba que el ha compartido y como esperábamos, funciona! Afortunadamente nos ha incluido el .ino, así que decido hacer la prueba de modificarlo y compilarlo con compilador de Arduino para cargar el archivo .hex que genera en mi equipo y nuevamente vuelve a fallar
En este punto ya no entiendo nada. He probado a programar las placas de arduino haciendo otro tipo de pruebas de encender pines, servidor web, mover motores etc y todas funcionan perfecto, por lo que el compilador funciona correctamente y la configuración de la placa para la que se programa tambien funciona...
Con todo esto ya si que estoy atascado...
Pido disculpas por la "chapa" que os he pegado, pero como veis es un tema un poco complejo de exponer.
Mil gracias a todos!!