Programación en Android Studio.
Es para desarrollar una aplicación móvil, con lo cual se va a controlar el LED RGB.
Variables
Se puede controlar un led al cambiar el voltaje entre 0 y 255.
Sintaxis
MainActivity.kt
var state: Int
var cycle: Int
val database = Firebase.database
val databaseReference = database.reference
val ledColorPicker: ColorPicker = findViewById(R.id.ledColorPicker )
val ledToggleButton: ToggleButton = findViewById(R.id.ledToggleButton )
val cycleToggleButton: ToggleButton = findViewById(R.id.cycleToggleButton )
Parámetros
state : Estado del led (Apagado/Encendido).
cycle : Estado del ciclo de colores (Activo/Inactivo).
database : Base de datos Firebase.
databaseReference : Índices de los elementos de la base de datos Firebase.
ledColorPicker : Elemento de diseño ColorPicker.
ledToggleButton : Elemento de diseño ToggleButton.
cycleToggleButton : Elemento d diseño ToggleButton.
Lectura de datos Firebase Databse
Es necesario obtener los datos de la base datos Firebase para comprobar el apagado o encendido de un LED RGB , así como para comprobar si está activo la opción para controlar el ciclo de colores.
MainActivity.kt
databaseReference.addValueEventListener(object : ValueEventListener {
@SuppressLint ("SetTextI18n" )
override fun onDataChange (dataSnapshot: DataSnapshot) {
state = dataSnapshot.child("state" ).getValue ()!!
cycle = dataSnapshot.child("cycle" ).getValue ()!!
ledToggleButton.isChecked = state != 0
cycleToggleButton.isChecked = cycle != 0
}
override fun onCancelled (error: DatabaseError) {
Log.w("TAG" , "Failed to read value." , error.toException())
}
})
Obtener valores RGB del Color Picker
Es necesario obtener loa valores RGB del Widget color Picker para enviar a la base de datos y así controlar el LED RGB.
MainActivity.kt
ledColorPicker.listener = object : ColorPicker.Listener{
override fun colorChanged (color: Int) {
val red: Int = Color.red(color)
val green: Int = Color.green(color)
val blue: Int = Color.blue(color)
databaseReference.child("cycle" ).setValue(0 )
databaseReference.child("red" ).setValue(255 -red)
databaseReference.child("green" ).setValue(255 -green)
databaseReference.child("blue" ).setValue(255 -blue)
}
}
Encender o apagar el LED RGB
Se va a encender o apagar el LED a través de un ToggleButton ya que es un componente de tipo interruptor.
MainActivity.kt
ledToggleButton.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
databaseReference.child("state" ).setValue(1 )
} else {
databaseReference.child("state" ).setValue(0 )
}
}
Activar o inactivar el ciclo de colores
Se va a activar o inactivar el ciclo de colores del LED a través de un ToggleButton , como el anterior caso.
MainActivity.kt
cycleToggleButton.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
databaseReference.child("cycle" ).setValue(1 )
} else {
databaseReference.child("cycle" ).setValue(0 )
}
}
Programación en Arduino IDE.
Veamos la programación para controlar el LED RGB el Arduino IDE.
Variables glovales
A continuación, se muestra las variables tanto para la conexión a la base de datos y a un punto de acceso Wifi.
ledrgbesp8266arduino.ino
// Host del Firebase
#define FIREBASE_HOST "fir-dht11esp8266-default-rtdb.firebaseio.com"
// Token del Firebase
#define FIREBASE_AUTH "lsuZM58UWu096zGQiQry3GAboaBRRyNcLmH5i4x1"
// Conexion a punto de acceso wifi
#define WIFI_SSID "end"
#define WIFI_PASSWORD "devend56"
WiFiClient client;
FirebaseData firebaseData;
// Pin rgb de un LED
#define pinR 5
#define pinG 4
#define pinB 2
#define pinS 14
Establecer el tipo de pines
Todos los pines para este caso se deben establecer como OUTPUT que permite controlar y no como INPUT que lee las señales eléctricas.
Controlar el LED RGB
Una vez que se obtiene los datos enviados se debe controlar los colores RGB, el encendido o apagado y el ciclo de colores de un led RGB.
ledrgbesp8266arduino.ino
digitalWrite (pinS, state);
if (cycle == 0) {
analogWrite (pinR, red);
analogWrite (pinG, green);
analogWrite (pinB, blue);
} else {
analogWrite (pinR, random (0,255));
analogWrite (pinG, random (0,255));
analogWrite (pinB, random (0,255));
}
random : Genera números aleatorios entre 0 y 255 permitiendo cada segundo generar un nuevo color (Ciclo de colores).
Diagrama de circuito