desktop

Control de Arduino desde e-mail

Buenas camaradas:

Estoy haciendo un programa que funciona una parte, por ejemplo, recibir e-mail del quien yo quiera y comandos para enviarlos al puerto serie.

Por ejemplo, desde mi móvil, envío un correo electrónico que en el asunto ponga, Luz_ON, mi ordenador o PC lo detecta y envía datos al puerto serie en el cual lo muestra en el Led 13 y lo indica en el LCD 16x2 de Arduino. (En el futuro pondré un LCD más grande y mejor, ahora estoy de pruebas).

Lo único que me falta es poder enviar mensaje como lo hace al enviar al puerto serie, que en estos momentos estoy con ello. Así sabrás que realmente se ha ejecutado tus comandos.

Aunque ahora estoy trabajando en modo consola, este programa me vale para ponerlo a la Raspberry Pi y conectarlo al puerto serie de Arduino. Ya se hará programas en modo gráfico para PC en el futuro.

Básicamente lo que hace es controlar Arduino para poder encender y apagar luces sea interiores o exteriores de la vivienda, abrir y cerrar persianas de las ventanas, ventiladores o lo que se te ocurra.

Todo controlado desde su propio gestor de e-mail sea gmail, hotmail o el que te guste. Por supuesto, desde la versión de PC se hará un gestor de escritorio y desde el móvil, me gusta más, pero esto, ya es otra historia.

¿Qué les parece la propuesta?

Si quieren les paso los códigos de C# para que prueben, les funciona a la primera. Tienes que descargar Visual Studio Community 2022 y tener Arduino UNO, que es el que uso por ahora. Si nunca lo han usado, me preguntan. Ya verás que funciona y mola.
 

Adjuntos

  • WhatsApp Image 2023-02-11 at 11.19.32.jpeg
    WhatsApp Image 2023-02-11 at 11.19.32.jpeg
    122.9 KB · Visitas: 9
Si lo pones en la raspberry activas un pin y te ahorras el Arduino.
No me interesa usar los pines de la Raspberry Pi por ahora. Ya que prefiero que Raspberry Pi se comporte como servidor y Arduino como actuador, ya que Raspberry Pi es un sistema operativo y si se apaga de repente, puede estropear algún archivo que me ha pasado hasta con PC y tienes que reconfigurar todo otra vez, sin embargo, Arduino, tiene Firmware y no le pasa eso.

A parte de eso, que Arduino se puede colocar en otros PC, sea de sobre mesa, portatil o raspberry Pi independiente del sistema operativo, que es la idea principal.

Saludos.
 
Última edición:
ya que Raspberry Pi es un sistema operativo
Raspberry Pi es una placa SBC (Single Board Computer), Raspbian es uno de los sistemas operativos basados en Linux.

y si se apaga de repente, puede estropear algún archivo que me ha pasado hasta con PC y tienes que reconfigurar todo otra vez
Tengo entendido que si no está grabando en memoria, no pasa nada, ya viene preparado para tal efecto.

Ahora estoy haciendo dedo para volver a casa, que por eso no entendi, pero podrías volver a explicar tu idea?
 
Hola @DJ T3

El MicroSD graba cosas con el tiempo por el sistema operativo y muchos de otros programas, es un riesgo, siempre hay quejas en este caso y enlos actuales Pc ocurre lo mismo. Si tienes un buen SAI / UPS es otro cantar.

Lo que estoy haciendo es controlar dispositivos desde el móvil, fuera de tu casa. Cualquier aparato, como pueden ser ventiladores, persianas, alumbrado, motores, ventiladores. También saber los estados si has dejado una puerta abierta, etc.

Antes lo hacía con páginas Web pulsando botones y leer los estados, ahora desde gmail o hotmail. Con páginas Web y una base de datos controlado desde C#.

Saludos.
 
Última edición:
No me interesa usar los pines de la Raspberry Pi por ahora. Ya que prefiero que Raspberry Pi se comporte como servidor y Arduino como actuador, ya que Raspberry Pi es un sistema operativo y si se apaga de repente, puede estropear algún archivo que me ha pasado hasta con PC y tienes que reconfigurar todo otra vez, sin embargo, Arduino, tiene Firmware y no le pasa eso.

A parte de eso, que Arduino se puede colocar en otros PC, sea de sobre mesa, portatil o raspberry Pi independiente del sistema operativo, que es la idea principal.

Saludos.
No le veo sentido.

Supongo que supones que al conectar algo a un pin puede entrar ruido y resetear la raspi... El mismo ruido que entra por el USB o por el puerto serie. El mismo que no entra cuando se hacen las cosas bien.

Eso sí, si es para otro pc sin pines... Mejor conectas el Arduino a la red y quitas el PC de la ecuación, es más barato, osea Esp32 para wifi, o shield ethernet + Arduino. Aunque esto se complica para acoplarlo a Gmail.
 
En mi caso había pensado en un PC o Raspberry Pi que haga de "servidor", y conectar Arduinos a través de una placa uRF24L01, y asignarle a cada aparato un canal, así no saturo el modem.

Otra opción como te dijeton (y había pensado también), un ESP32 o similar, pero no se si hay librerías para e-mail, y un modem exclusivo en un canal diferente conectado via ethernet al modem principal.

O algún ESP-01 como sensor y control, en la PC o Raspberry Pi un servidor local accesible desde la I.P. asignada por el modem.
 
Para que se corrompa algún archivo, tendría que ser un timing demasiado preciso, que le jalen el enchufe en el instante preciso que está recibiendo los datos. Pero en esta vida todo puede pasar...

En mi humilde opinión pienso que el hecho de colocar una Rasp + un Arduino si es una fuente de posibles errores. Yo también creo que sobra uno de los dos.
Si lo dejas Raspberry Pi siempre con el cable de USB con Arduino, ahí lo entiendo. Si Arduino lo tienes preparado para cualquier PC por USB en cualquier momento, ahí es otro cantar, depende para que lo quieras.

Por ahora me centro en lo que estoy, enviar comandos. Luego les paso los archivos que se puede mejorar tanto de C#, como de Arduino para que hagan pruebas. Y funciona. Solo falta que acuse de recibido, es decir, que devuelva por email el estado de las salidas de Arduino.

Les dejo el código fuente. Lo prueba y comenta si funciona.
 

Adjuntos

  • Led_LCD_cpp.zip
    4.8 KB · Visitas: 7
A pesar de que puede parecer divertido "controlar" el Arduino por mail, hay que reconocer que es una MUY MALA IDEA.
Los e-mails no tienen garantía de tiempo de delivery, y como tal...no hay garantía de cuando se recibe el comando enviado y tampoco hay garantía de recibir la notificación del Arduino.
Me dirán que los mails siempre llegan, y en la actualidad es casi cierto, pero el problema es que el servicio de correo electrónico NO ESTA PENSADO PARA OPERACION EN TIEMPO REAL, así que si el Arduino te manda un mail diciendo que tu casa está en llamas, es posible que te llegue cuando ya se quemó por completo....incluyendo a los vecinos. Ni hablar de que le digas al Arduino que abra el agua para apagar el fuego...

Creo que es mas sensato usar otro mecanismo, como un servidor web dedicado a la interfaz, o usar la API de Telegram y usar ese mensajero para enviar comandos y recibir notificaciones....
 
A pesar de que puede parecer divertido "controlar" el Arduino por mail, hay que reconocer que es una MUY MALA IDEA.
Los e-mails no tienen garantía de tiempo de delivery, y como tal...no hay garantía de cuando se recibe el comando enviado y tampoco hay garantía de recibir la notificación del Arduino.
Que mal pensado, al lado oscuro total. Puede ocurrir pero no te pases tampoco al abismo.
Ni Darth Dader se atrevió a tanto. Xddd.

Por ahora me ha servido y tarda segundos en llegar.
Me dirán que los mails siempre llegan, y en la actualidad es casi cierto, pero el problema es que el servicio de correo electrónico NO ESTA PENSADO PARA OPERACION EN TIEMPO REAL, así que si el Arduino te manda un mail diciendo que tu casa está en llamas, es posible que te llegue cuando ya se quemó por completo....incluyendo a los vecinos.
Arduino no manda e-mail, lo manda C# o el propio PC. Arduino solo recibe comandos desde el e-mail, activa y desactiva salidas. También dependiendo de los estados como sensores que recibe Arduino, envía comandos al PC, y a C#, y desde el programa con C#, es el que envía los e-mail de los estados. Los comandos puedes hacerlo desde vía e-mail. De eso se trata. También quiero hacer el gestor de Escritorio muy versátil y cómodo.
Ni hablar de que le digas al Arduino que abra el agua para apagar el fuego...
¿Por qué no? :ROFLMAO:
Creo que es mas sensato usar otro mecanismo, como un servidor web dedicado a la interfaz, o usar la API de Telegram y usar ese mensajero para enviar comandos y recibir notificaciones....
Pondré en el futuro en marcha el API y Telegram. Es bueno saber muchas formas de hacer las cosas, ya escogerás el mejor. No olvidar que el mundo de las tecnologías, lo que hoy funciona de maravilla, puede dejarlo de hacer y viene otras ideas o posibilidades nuevas.

Saludos.
 
Te iba a decir lo mismo que el Doc, pero lo tomé por el lado didáctico, NO de uso final ni real.

Con Telegram hice un programa en la PC con base de datos MySQL y PHP, y hasta paginaba los resultados de búsquedas (10 por página), resaltaba el texto buscado, impedía usar el bot fuera de un grupo específico, y un etc...

No lo llevé a la práctica, porque no tengo un PC encendido las 24 horas que exigía el sistema, y al ser datos muy delicados, desistí por el momento.
 
Te iba a decir lo mismo que el Doc, pero lo tomé por el lado didáctico, NO de uso final ni real.
O uso didactico, o uso alternativo si en otras vías a lo mejor no puedes por cualquier motivo. Por eso es bueno tener varias tecnologías a mano en el mismo programa y cual escoges el más que necesite o te guste.
Con Telegram hice un programa en la PC con base de datos MySQL y PHP, y hasta paginaba los resultados de búsquedas (10 por página), resaltaba el texto buscado, impedía usar el bot fuera de un grupo específico, y un etc...
El PHP y MySQL lo hice hace años primero con PIC escrito en asm y usando directamente el puerto serie puro y duro. Me funcionaba de maravilla.
No lo llevé a la práctica, porque no tengo un PC encendido las 24 horas que exigía el sistema, y al ser datos muy delicados, desistí por el momento.
Por eso una buena Raspberry Pi, bajo coste, no consume mucha luz a pagar al mes, hasta tiene su propia SAI / UPS dedicada a ello de bajo coste.

Ya que nombran mucho la API con Telegram, (ver vídeo) pues con el tiempo me meteré a ello si da notificaciones por ahí. ¿Se puede hacer lo mismo con Whatsapp?

Es bueno saber de todo un poco. ;)
 
Última edición:
Se el método que sea, por MySQL mediante PHP, que si por e-mail, que si por telegram, que no falta incluido el gestor desde el escritorio Windows y Linux como hice hace años con este.

fsdafasdfsad-jpg.126348
 
¿Se puede hacer lo mismo con Whatsapp?
No. Por eso tuve que decantarme por Telegram.

Whatsapp creo que tiene una API, pero es para empresa y paga.

Había creado un script en javascript (inyeccion), que se ejecutaba desde el navegador, pero no podia acceder al localhost para leer la base de datos, cuando pude hacerlo, perdí el acceso al cuadro de texto de mensajes de Whatsapp (que no es un input común), así que desistí
 
Por supuesto que me meteré en Telegram, nunca lo he hecho y no lo sabía hasta que lo contaron por aquí. Se puede recibir notificaciones dijeron, pero no se si enviar comandos. Ya me dirás si se puede hacer.

En estos momentos estoy traquiniando con lo de enviar e-mail como acuse de recibo, saber los estados de lo que haz hecho. Cuando lo logre, me meto con Windows Form, luego con MUAI que es una interfaz para dispositivos móviles o teléfonos inteligentes para poder enviar comandos con pulsadores en la pantalla, no escribir en el asunto que eso ya es más molesto, ejjejej. Al final haré un buen tutorial en PDF como suelo hacer. Sí, está bien lo de usar email para comunicarse con Arduino a distancia, este método está bien como dijeron arriba, para uso didáctico o como alternativa para escapar si algún momento te falla la red del Telegram, cosas así.

Aún así, recopilaré todo sobre Telegram desde hoy mismo, ya que los vídeos que he visto fue crear un bot, para poder recibir notificaciones por ahí. Lo que no se sabe si se puede hacer. Voy a investigar en paralelo el Telegram y muchas gracias.

Cuando acabe con Telegram, Ya me meteré en otras tecnologías sobre comunicaciones con Arduino a distancia, aunque sea solo para uso didáctico.

Espero los códigos que dices.

Y sigo pensando que le has dado hasta las últimas en conseguir lo que quieres, ejjejejeje. Eso está muy bien. ;)
 
Última edición:
Espero los códigos que dices
Perfecto. Dejame buscar lo que había hecho, y subo lo que tengo.

Te aviso que puedes usar de diferentes formas la API de Telegram, en mi caso usaba GET con un id para leer lo último NO leído y de paso borrar lo que ya leí, y esto cada X tiempo, ya que para que te notifique automaticamente Telegram, tienes que tener montado una web que pueda recibir GET o POST, aunque sería lo ideal, tienes que tener la web primero...

Por el lado de la app, con botfather configuras los comandos que se acceden a traves del texto "/comando", o del menú que aparece como "[/]"
 
Aquí está las referencias y ejemplos (algo confuso en partes): Bots: An introduction for developers

Para acceder a través de la web, usa el formato:
Código:
https://api.telegram.org/bot[TOKEN]/[COMANDO]
Donde "[TOKEN]" es el token que te da BotFather, y [COMANDO] son los comandos para acceder al bot, por ejemplo "getUpdates", y quedaría:
Código:
https://api.telegram.org/bot12345678901:abcdefghijklmnopqrstuvwxyz123456789/getUpdates
Y la respuesta está en JSON (creo que se puede cambiar el comportamiento), y sería similar a:
JSON:
{
    "ok":true,
    "result":[{
        "update_id":12345678,
        "message":{
            "message_id":123,
            "from":{
                "id":12345678900,
                "is_bot":false,
                "first_name":"Carlos",
                "last_name":"Silva",
                "username":"JuCAS_Music",
                "language_code":"es"
            },
            "chat":{
                "id":12345678900,
                "first_name":"Carlos",
                "last_name":"Silva",
                "username":"JuCAS_Music",
                "type":"private"},
            "date":1676288125,
            "text":"/ayuda",
            "entities":[{
                "offset":0,
                "length":6,
                "type":"bot_command"
            }]
        }
    }]
}

- Donde el "update_id" es el ID desde dónde comienza a leer, si le pasas el ID mas uno (ID + 1, o sea "12345678 + 1" = 12345679), al comando anterior como "getUpdates?offset=ID", obtendrás todo lo nuevo (si hay) enviado al bot, y eliminará todo lo anterior.

- En "message -> from" y "chat" obtienes quién envía datos al bot (con el ID puedes responderle a esa persona o bot).

- Y en "entities" tienes el tipo de mensaje, en este caso envié desde Telegram un comando que se escribe en el cuadro de texto como "/ayuda", por eso figura como "type:bot_command", y en el "text" = "/ayuda", pero si escribes mas cosas, también aparecerá en "text".

En cada COMANDO luego del TOKEN, tienes muchas mas opciones, incluso puedes enviar archivos (con cierta limitación de tamaños), fotos, videos, audio, pdf, incluso stickers, emotíconos (un poco engorroso), etc...

Tienes buena cantidad de caracteres a usar, pero en mi caso eran muchos datos, así que creé un sistema de paginación agregando del lado de la aplicación, un botón con la leyenda "Cargar más...".

Las posibilidades es infinitas, incluso podes realizar juegos...

Tengo un framework realizado para QT (está en github), pero es fácilmente transcribible en cualquier lenguaje, lo malo que tuve que re-escribir algunas cosas, porque estaba incompleto o erróneo...

PD: Añado fotos del botón incorporado y del menú que se crea automaticamente (se configura desde BotFather).
Donde dice "/ver451@nombredelbot", esto es generado a traves de una respuesta del bot con un enlace al comando "/ver451" pero cuando estas en un grupo se añade al final el "@" seguido del nombre del bot, ya que dentro de un mismo grupo, pueden convivir mas de un bot.

PD2: También se aprecia el archivo PDF pedido con el comando anterior.

PD3: Puedes agregar el "escribiendo..." y el "subiendo..." o algo asi...
 

Adjuntos

  • Screenshot_20230213-090137.jpg
    Screenshot_20230213-090137.jpg
    117.4 KB · Visitas: 3
  • IMG_20230209_085146653.jpg
    IMG_20230209_085146653.jpg
    89.6 KB · Visitas: 3
Última edición:
Buenísimo.

Se nota que lo manejas al dedillo. Lo que no entiendo porqué Whatsapp no lo hace. Da igual, al menos este funciona. Haré pruebas para arriba y para abajo.

Por cierto, me estoy peleando para entender bien JSON, ya que con ello en general quiero aprenderlo bien para guardar archivos de configuración desde C#, antes lo hacía con XML, ahora me toca lo más moderno y eficaz.

Una pregunta.

¿Puedes hacer una interfaz propia tuya aplicación para móviles y que envíe comandos por botones?

El contenido de los comandos va incluido en el interior de los botones, y los botones en un formulario aunque sea tipo Web.

Encontré este enlace por casualidad, pero es bueno tenerlo presente para tus proyectos.

Muchísimas gracias.
 
Atrás
Arriba