NodeMCU en español
NodeMCU - Juan Antonio Villalpando
-- Tutorial de NodeMCU en español --
Volver al índice del tutorial NodeMCU
____________________________
83.- Dos botones en el móvil, al pulsarlos se incrementará/decrementará iluminación en un LED del NodeMCU. Bluetooth. LCD.
- En el móvil tenemos dos Botones "Incrementa" y "Decrementa". Al pulsar sobre ellos enviaremos por Bluetooth la palabra "suma" o "resta", según el Botón pulsado.
- El NodeMCU recibirá esa palabra. Si es suma incrementará en 20 la variable pwm, si es resta decrementará 20.
- La variable pwm establecerá una cierta anchura de pulso PWM en el LED que encenderá más o menos según esa anchura de pulso.
- Consulta:
78.- PWM y LED. Dos pulsadores para incrementar/decrementar la iluminación de un LED. Pantalla LCD.
___________________________________________________
1.- Conexiones.
- Los terminales D1 y D2 los necesita la pantalla LCD para funcionar con el bus I2C.
- El LED está conectado al terminal D3 del NodeMCU, que corresponde al GPIO0.
- En la pantalla LCD saldrá el número correspondiente a PWM. (La palabra "enciende" no sale en este ejemplo)
___________________________________________________
5.- Código para enviar la palabra "suma" o "resta" desde el móvil al NodeMCU por Bluetooth y que éste ilumine más o menos un LED por PWM. LCD.
Código
Nodemcu_ilumina_LED_BT_LCD.ino |
// Juan Antonio Villalpando
// KIO4.COM
// Incrementa/Decrementa LED desde el móvil. PWM.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int LED0 = 0; // Es el terminal D3 de NodeMCU
int pwm = 500;
void setup() {
lcd.begin(16,2); // Columnas y filas de LCD
Serial.begin(9600);
pinMode(LED0, OUTPUT);
}
void loop(){
byte guardados[10];
int caracteres;
String palabra;
while(1){
if ((caracteres=(Serial.available()))>0){
lcd.clear(); // Borra pantalla
// Esto por si vinieran varios caracteres.
for (int i=0; i<caracteres; i++){
guardados[i]=char(Serial.read());
}
}
guardados[caracteres]=0; // Fin de caracteres.
palabra = (char*)guardados;
delay(300);
if (palabra == "suma"){
pwm = pwm + 20;
}
if (palabra == "resta"){
pwm = pwm - 20;
}
analogWrite(LED0, pwm);
lcd.setCursor(0,0); // Inicio del cursor
lcd.print(pwm);
}
} |
___________________________________________________
- App Inventor.
___________________________________________________________
9J.- Código para enviar la palabra "suma" o "resta" desde el móvil al NodeMCU por Bluetooth y que éste ilumine más o menos un LED por PWM. LCD.
p9J2_ilumina_LED_Nodemcu.aia
- Escribimos una palabra o frase (menor de 16 caracteres) en el CampoDeTexto y la enviamos por Bluetooth al NomeMCU.
- Si escribimos la palabra enciende o apaga, se encenderá o apagará el LED.
_________________
- Diseño.
_________________
- Bloques.
_________________
- Comentarios.
- Es importante el delay en el código para dar tiempo a escribir en la LCD.
- Esta aplicación se podría haber realizado de otra manera: poner una variable pwm en el código de App Inventor, según pulsemos un botón u otro se incremente o decremente esa varible y se envíe ese valor por Bluetooth al NodeMCU para crear el ancho PWM en el LED.
______________________________________________________________
10.- Otro código más sencillo.
- En vez del código anterior del NodeMcu, podemos poner este otro.
Código
Nodemcu_ilumina_LED_BT_LCD.ino |
// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int LED0 = 0; // Es el terminal D3 de NodeMCU
int pwm = 125;
char caracter;
String palabra;
void setup()
{
lcd.begin(16,2);// Columnas y filas de LCD
Serial.begin(9600);
pinMode(LED0, OUTPUT);
}
void loop() {
if(Serial.available())
{
caracter = Serial.read();
palabra = palabra + caracter;
if (caracter == '*') {
Serial.println(palabra);
palabra = palabra.substring(0, palabra.length() - 1); // Quita último caracter *
delay(400);
// LED0
if (palabra == "suma"){ pwm = pwm + 20; }
if (palabra == "resta"){ pwm = pwm - 20; }
analogWrite(LED0, pwm);
lcd.clear();
lcd.setCursor(0,0); // Inicio del cursor
lcd.print(pwm);
palabra = "";
}
}
}
|
- Este código irá recibiendo caracteres hasta que llegue el asterisco, este indica fin del mensaje.
- Cuando termine el mensaje se muestra en la LCD y se actúa sobre el LED0.
- Para ello debemos hacer una pequeña modificación en el código de App Inventor:
- En la aplicación p9J2_ilumina_LED_Nodemcu.aia
- cambiar esto, es decir que la palabra enviada siempre termine en asterisco *
______________________________________________________
________________________________
|