¿Puedo usar un ESP8266 como corredor de MQTT?

7

Estoy haciendo un proyecto de automatización del hogar basado en topología en estrella. Lo que estoy tratando de lograr es que uno de los nodemcu / ESP8266 actúa como un servidor accesible para el mundo exterior y otros nodemcu / ESP8266 actúan como clientes que están conectados a relés o sensores.

Al recibir el comando del servidor, los relés deben activarse en consecuencia y actualizar el estado nuevamente al servidor. Leí muchos tutoriales a través de diferentes métodos. MQTT parece bueno, pero no quiero usar ningún corredor de terceros como Adafruit. Quiero alojar el servidor web en mi nodemcu o mi servidor web. La parte triste es que no tengo una Raspberry Pi.

¿Puedo usar uno de mis dispositivos ESP8266 como agente MQTT o existe una alternativa adecuada?

Rohit Mathur
fuente
2
Para usar MQTT necesita un corredor y un esp8266 simplemente no es capaz de actuar como corredor. Necesitas algo "más grande"
hardillb
1
Puede alojar un agente MQTT en su PC / computadora portátil, aunque ejecutarlo 0/24 puede aumentar un poco su factura de electricidad.
Bence Kaulics
1
@hardillb -> ¿algo más grande significa la propia frambuesa pi? o Arduino Mega también podría usarse para el mismo propósito
Rohit Mathur
1
Significa una computadora real, así que no un Arduino Mega, un Pi Zero sería suficiente
hardillb
1
@BenceKaulics -> ¿puedo usar mi alojamiento web en lugar de dejar mi computadora portátil encendida durante toda su vida? Tengo un alojamiento web compartido.
Rohit Mathur

Respuestas:

9

Técnicamente hablando, sí, un ESP8266 podría actuar como un corredor MQTT. De hecho, ¡ alguien ya lo ha intentado ! Al final de su proyecto , afirmaron tener un intermediario que puede conectarse a un intermediario MQTT en la nube, con una interfaz web y una buena cantidad de tiempo de actividad. En los comentarios, dicen que su código es propietario, por lo que no podrá usar su código exactamente, pero sirve como prueba de concepto si realmente desea usar un ESP8266.

Sin embargo, usar un ESP8266 como corredor probablemente sea un gran esfuerzo . Usar un Pi, como lo sugiere MatsK , sería mucho más fácil, y aunque las unidades Raspberry Pi son un poco más caras (entre £ 5 y £ 25 + gastos de envío, dependiendo del modelo que elija), ahorrará mucho tiempo . Con un Pi, puedes usar un corredor establecido como Mosquitto . En un ESP8266, no hay posibilidad de que Mosquitto se ejecute, y probablemente tenga que escribir su propio corredor o usar uno mucho menos confiable.

Alternativamente, puede conectar todos sus ESP8266 directamente a un servicio en la nube como AWS IoT . Esto simplifica su configuración, pero significa que cada solicitud se enruta a través de Internet y que no puede controlar los dispositivos localmente. Si su conexión a Internet se rompe con este enfoque, tampoco tendrá control sobre los dispositivos.

Aurora0001
fuente
1
Recomendaría usar "Node-red", una interfaz web gráfica donde puede crear lógica para la automatización.
MatsK
@ Aurora - Gracias por explicar la cosa con tanta profundidad. Me trajo claridad a mi pensamiento. Entiendo que Pi es necesario para servidores independientes. Pero si quiero llevar esto sobre la nube. ¿Es necesario utilizar los servicios de IoT de terceros? ¿Puedo usar mi servidor web para ello? Si no es muy difícil. Solo tengo 14. Entonces, no tengo mucho conocimiento técnico.
Rohit Mathur
@RohitMathur Sí, podría usar su propio servidor web, dependiendo del tipo de servidor web que tenga, si es algo así como un VPS o un servidor dedicado, sí; si es solo un servidor web tradicional para páginas web solamente, no. Si comparte qué host está utilizando, puedo intentar orientarlo en la dirección correcta. Además, asegúrese de leer ¿Qué debo hacer cuando alguien responde mi pregunta? para que pueda recompensar cualquier respuesta útil que obtenga.
Aurora0001
Tengo un anfitrión compartido Por ahora, creo que tengo que comprometerme con Pi. El costo de VPS es alto. ¿Cuántos nodos se pueden conectar a un Pi como clientes? Al igual que ESP8266 puede gestionar hasta 4 clientes. Mi proyecto puede ser de n no. de nodos Algunos conectados a un relé, algunos con sensores.
Rohit Mathur
@RohitMathur No sé el número exacto, pero me imagino que un Pi probablemente podría manejar cientos de mensajes por segundo, particularmente el Pi 3, que es bastante poderoso. Es casi seguro que no alcanzará el límite de las capacidades de Pi con su caso de uso.
Aurora0001
8

Mi sugerencia sería un corredor de mosquitto MQTT en una Raspberry Pi.

Hay un artículo aquí https://tech.scargill.net/a-christmas-script/ donde Peter Scargill ha creado un script que instala todos los componentes y dependencias necesarios.

Echa un vistazo a Node-red. Con él puedes crear lógica para complementar tu proyecto.

Actualizaciones:

Acabo de encontrar un corredor ESP8266 MQTT, disponible gratuitamente. Esto tengo que intentarlo ...

https://www.youtube.com/watch?v=0K9q4IuB_oA

https://github.com/martin-ger/esp_mqtt

MatsK
fuente
Sí, creo que necesito comprar un Pi. Y este artículo fue realmente útil. ¿Puedes por favor compartir más tutoriales para mi proyecto? Los revisaré una vez que obtenga un Pi.
Rohit Mathur
Rui Santos tiene muchos buenos tutoriales, como: randomnerdtutorials.com/… y muchos más, y su libro "domótica" es recomendable.
MatsK
He estado siguiendo un tutorial. randomnerdtutorials.com/… . Raspberry Pi está funcionando absolutamente bien. Pero creo que esp8266 no está recibiendo mensajes. Entonces no puedo controlar el relé cableado con esp8266.
Rohit Mathur
6

Además de las respuestas y los comentarios que recomiendan el uso de una Raspberry Pi debido a los recursos limitados del ESP8266, generalmente tendría sentido usar el ESP32 , el sucesor no oficial del ESP8266. Debido a que tiene doble núcleo + 3 veces más RAM, corrige los problemas de conexión WiFi que aumentaron cuando los programas de usuario aumentaron de tamaño.

En el rango de precios, es solo unos pocos dólares más caro que ESP8266 y significativamente más barato que el de RaspberryPi (al menos hasta que el cero baje de precio). Las otras respuestas deberían tenerlo cubierto en el lado del software.

Moritz
fuente
5

Además de lo que ya han dicho las otras excelentes respuestas, usar un ESP8266 como su agente MQTT es menos que ideal por la simple razón de que carece de los requisitos del sistema para funcionar a la velocidad. Alguien en Github estaba probando una hazaña similar, y le dijeron:

No es imposible pero no tiene mucho sentido. El intermediario necesita algunos recursos como CPU, memoria y número de conexiones TCP (una para cada cliente), tal vez almacenamiento no volátil (para mensajes persistentes), configuración para derechos de acceso de usuario y muchos otros detalles.

Me hago eco de las otras excelentes respuestas: consígase una Raspberry Pi o alguna otra computadora barata para que actúe como su agente. El ESP simplemente carecerá de las especificaciones para funcionar bien.

anónimo2
fuente
1
Si. Ahora está muy claro que necesitaría un Pi para llevar a cabo este proyecto
Rohit Mathur
Esto es principalmente un problema de escalado: en realidad no aparece hasta que crece el número de nodos. El problema que está presente desde el principio es que el software debe reescribirse, probablemente desde cero, para crear la funcionalidad del agente de una manera de recursos mínimos.
Chris Stratton
Entonces, ¿un MCU más grande sería adecuado, pero no sería más barato que un SBC de gama baja?
Sean Houlihane
3

Hay una biblioteca agradable y funcional compatible con Arduino con un pequeño corredor MQTT que se ejecuta en ESP8266:

Joern
fuente
Esta debería ser una respuesta elegida)
podarok
2

Puede usar un ESP8266 como agente MQTT. Admite 20 dispositivos, websockets y conexión de puente a una instancia de MQTT en la nube que proporciona sockets web MQTT y SSL.

En tres minutos puede tener un corredor MQTT completamente funcional. Echa un vistazo a la plataforma iotcentral.eu. Haga una cuenta y ya está listo.

Dan Catalin Batrinu
fuente
gracias por la sugerencia Dan. Pero ahora estoy usando Raspberry Pi como el agente MQTT. pero ahora el problema es con esp8266. A veces se conecta a Wifi, pero a veces solo dice "Conectando ................." y los puntos continúan. Intenté usar una fuente de alimentación externa y no funciona. ¿Alguna idea de cómo hacerlo?
Rohit Mathur