Domótica remota/local mediante una app Android con Arduino

Buenas tengo una consulta, espero que puedan ayudarme. Soy alguien que se esta iniciando en proyectos de domótica, este es un proyecto personal que he pensado, mi idea es hacer una app para android con la que pueda controlar: el encendido/apagado de 5 luces (focos) y un ventilador (1 luz por habitación, sólo 1 ventilador en una de las habitaciones), la intensidad de una de las luces (del ventilador no), que me muestre la temperatura actual de una de las habitaciones de mi casa y la activación on/off de 2 "perfiles predefinidos (por ejemplo que uno de ellos sea el apagado de todas las luces, el otro perfil aún no lo he pensado)" usando Arduino (y sí, si ya lo adivinaron, la habitación donde se controlará la intensidad y me mostrará la temperatura actual será la mía :slight_smile: ) ya sea local (estando en mi casa, conexión lan) y remota (para cuando no esté en mi casa, que la conexión sea por internet).
He estado buscando información al respecto en varios lugares donde mencionan recurrentemente que la mejor opción para un proyecto de este tipo es usar el software XAMPP, pero no estoy seguro si usar este método sin antes seguir buscando otras opciones que tal vez sean mejores, las pase por alto y luego me arrepienta.
Hasta ahora lo que entendí es que primero obviamente debo hacer las conexiones y el código en el IDE de Arduino para los sensores y actuadores, luego crear una base de datos (asumo que la mejor opción es MySQL) en un servidor web para la gestión de los datos que: se envíen desde Arduino hacia la app (las lecturas del sensor de temperatura para mi cuarto) y sean recibidos por Arduino (cuando desde la app quiera controlar el on/off de las luces y el ventilador, la intensidad de la luz de mi cuarto y el on/off de los 2 perfiles), asumo que para estas tareas de enviar/recibir datos debo hacerlo creando dos archivos en php; y para el diseño de la app pensaba hacerlo en Android Studio, porque ya lo tengo instalado en mi computadora (uso Windows 10 si es que sirve de algo este dato) y quisiera aprovecharlo.
Ahora en lo que necesito que me brinden su apoyo es en decirme cuál es el camino que debería seguir para realizar este proyecto, es decir si en pleno 2018 me conviene usar XAMPP o si ya existe un método más efectivo para este tipo de proyecto que me parece se le conoce como una aplicación del Internet de las Cosas; les agradeceré me puedan orientar en decirme cada uno de los procesos que debo seguir y así pueda seguir buscando información más precisa sobre lo que debo realizar.

Primero tendrás que instalar alguna conectividad a tu Arduino: WiFi, Ethernet, Bluethooth (BLE) o GSM.

Luego si lo que quieres es controlar objetos implementados en Arduino desde Android, te recomiendo usar la app gratuita Blynk, es muy fácil de configurar. Esta documentada y tiene una comunidad detrás que te puede ayudar.

Incluso te puede almacenar algunos pocos datos historicos.

Si lo que necesitas al almacenamiento masivo de datos recién piensa en otro método, pero yo empezaria por grabar en una SD localmente en el propio Arduino antes de pensar en entrar con MySQL (XAMPP)

Gracias por la respuesta.
Bueno para empezar yo tengo la plaquita Ethernet Shield de Arduino que usé en otro proyecto pero no sé si me sirva para éste en donde quiero controlar las luces y el ventilador tanto desde mi casa (conexión wifi) como desde cualquier otro lugar fuera de ella (conexión por internet) con una app Android.
Con respecto a esta app, el tema va en que yo preferiría hacer algo propio y no trabajar con algo que ya existe (ya sabe, el sentimiento de haber desarrollado algo propio y que funcione es indescriptible

programar una aplicacion para android que sea minimamente compleja implica conocer java,objetos y sus respectivos metodos y eventos,entornos de desarrollo,funcionamiento de los ciclos de vida de una aplicacion mobil,etc,etc.Tambien puedes usar app inventor o similares mas sencillos pero son muy limitados,asi que piensate bien si vale la pena reinventar la rueda.

Les comento algunos previos que he estado experimentando y logré que funcionaran para encender/apagar 2 leds (disculpen al no haberlo mencionado antes):
En conexión LAN:

  • Por bluetooth: Arduino Uno + Ethernet Shield + HC-05 + UI en App Inventor
  • Por wifi: Arduino Uno + Ethernet Shield + UI en IP local (que defino en el sketch del IDE de Arduino) en navegador web
    En conexión WAN (por internet, lo probé conectándome a mis datos móviles): Arduino Uno + Ethernet Shield + plataforma IoT Cayenne + (las 2 formas: tanto en su app propia Cayenne y en su página web)

Ahora que logré hacer esto, quiero dar un paso más y hacer algo más personalizado: programar mi propia app que me permita controlar lo que quiero esté o no en mi casa.
Como lo comenté antes, quiero hacer esta app en Android Studio porque ya la tengo instalada y ya entiendo algunos procesos de la programación en java y xml que requiero (actualmente sigo aprendiendo más sobre esto).
Pero el mayor problema que tengo ahora mismo es ¿cómo hago la conexión entre Arduino y la app Android tanto para recibir y enviar datos de los sensores?
Espero que ustedes con mayor experiencia en estos temas puedan orientarme respecto a esto. Gracias de antemano por su pronta respuesta.

Yo uso php como intermediario de las dos interfaces y almaceno en una bd de mysql los valores de cada dispositivo, modificándolos desde Android y únicamente leyéndolos desde Arduino.

hgsiabato ¿lo hiciste usando un servidor apache para manejar mysql y php, o se pueden usar por separado para hacer lo mismo?

Si, puedes crear un servidor web en tu computadora pero tendrás que abrir y mapear puertos o puedes usar un hosting web gratis o de pago. Uso php y mysql.

Ahora que voy leyendo más sobre el tema veo que si creo un servidor en mi computadora, necesariamente voy a tener que mantenerla encendida todo el día para poder acceder a la base de datos con la información de los sensores, yo quiero evitar el depender de una computadora encendida 24/7 así que ¿qué opciones tendría? ¿usar un hosting web gratis es una de ellas?

Así es si quieres un servidor en tu computadora debes manteeneral encendida y abrir los puertos del router para que se puedan conectar desde el exterior, lo otro es que debes contratar con tu proveedor de internet una ip fija o usar un servicio web para dirigir el tráfico a tu ip dinámica. Yo prefiero usar un webhost preferiblemente de pago, pero para hacer pruebas puedes usar las versiones gratis que no están mal.