Ir al contenido principal
Todas las coleccionesTutoriales de proyectos IoT
Crear un piano digital con Ubidots y un NodeMcu
Crear un piano digital con Ubidots y un NodeMcu

Construye un piano digital simple utilizando un NodeMcu, un zumbador y Ubidots.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana

Si pudieras hacer tu propio piano digital conectado a Internet, ¿qué tocarías? En esta publicación te enseñaremos cómo programar un zumbador usando un NodeMCU y Ubidots.

Esto puede sonar difícil al principio, pero con Ubidots, es bastante simple. Usaremos un NodeMcu conectado a Ubidots y estableceremos algunos tonos a unos pocos zumbadores conectados a Ubidots. ¡Ahora hagamos algo de música!

Descripción general

En esta publicación aprenderás cómo usar el NodeMcu con un zumbador y Ubidots. El NodeMcu es un dispositivo IoT con GPIO, PWM, IIC, 1-Wire y ADC todo en una sola placa, y se conecta a través de Wi-Fi. Es fácil de aprender y prototipar, y con el Arduino IDE, programar es muy sencillo.

Requisitos

Primero, necesitas lo siguiente:

Configuración

  1. Primero, acopla el NodeMcu a su base y conecta el zumbador al pin D1. Consulta la foto a continuación como referencia:

2. A continuación, ve al Arduino IDE, haz clic en Archivos -> Preferencias y busca "http://arduino.esp8266.com/stable/package_esp8266com_index.json" en el campo de URLs adicionales del gestor de placas. Puedes agregar múltiples URLs, separándolas con comas si es necesario.

3. Luego abre "Gestor de placas" desde Herramientas -> Menú de placas e instala la plataforma "esp8266".

3a. No olvides seleccionar tu placa NodeMCU 1.0 desde el menú Herramientas > Placa después de la instalación.

4. Si aún no lo has hecho, descarga la biblioteca UbidotsESPMQTT y haz clic en Sketch -> Incluir biblioteca -> Agregar biblioteca .ZIP

6. Selecciona el archivo .ZIP de Ubidots ESPMQTT y luego “Aceptar” o “Elegir” para todas las bibliotecas. Si no puedes agregar la biblioteca, intenta agregarla manualmente descomprimiendo el rar / zip descargado y copia la carpeta de la biblioteca a la ruta C:\Users\ubidots\Documents\Arduino\libraries

7. Reinicia el Arduino IDE.

Configurando Ubidots

  1. Agrega una nueva fuente de datos llamada "piano".

2. Agrega una nueva variable para cada nota musical. Comienza con una variable llamada "do", y luego "re", "mi", "fa", "so", "la", "ti".

3. Verifica que la etiqueta de la fuente de datos y las variables sean las mismas que el nombre. Esto permite la comunicación entre Ubidots y el NodeMcu.

4. Crea los botones/interruptores que te permitan tocar cada nota musical. Para hacer esto, ve a Dashboard y en la parte superior derecha de la página haz clic en Agregar widget. Selecciona Control > Interruptor > piano (fuente de datos) > do (variable) > finalizar. No olvides hacer lo mismo para cada nota musical. Cuando termines, se verá así:

Programa el ESP NodeMcu

Una vez que todo esté conectado correctamente, iremos al IDE y pegaremos el siguiente código.

/**************************************** * Incluir bibliotecas ****************************************/#include "UbidotsESPMQTT.h"#include <map>/**************************************** * Definir constantes ****************************************/#define TOKEN "..." // Tu TOKEN de Ubidots#define WIFINAME "..." //Tu SSID#define WIFIPASS "..." // Tu contraseña Wifi#define MQTTCLIENTNAME "sdfcvdhjnbvxw" // Tu nombre de cliente MQTT, debe ser único, por lo que recomendamos elegir un nombre ASCCI aleatorio#define MQTTCLIENTNAME2 "sdfcvdhjnbvxw2"#define MQTTCLIENTNAME3 "sdfcvdhjnbvxw3"#define MQTTCLIENTNAME4 "sdfcvdhjnbvxw4"#define MQTTCLIENTNAME5 "sdfcvdhjnbvxw5"#define MQTTCLIENTNAME6 "sdfcvdhjnbvxw6"#define MQTTCLIENTNAME7 "sdfcvdhjnbvxw7"//Constantes del piano#define BUZZER D1 //Pin del zumbadorconst int DO  = 262;const int RE  = 294;const int MI  = 330;const int FA  = 349;const int SOL = 392;const int LA  = 440;const int SI  = 494;int basic_notes[ ] = {DO, RE, MI, FA, SOL, LA, SI};String ubi_switch[ ] = {"do", "re", "mi", "fa", "sol", "la", "si"};Ubidots client(TOKEN, MQTTCLIENTNAME);Ubidots client2(TOKEN, MQTTCLIENTNAME2);Ubidots client3(TOKEN, MQTTCLIENTNAME3);Ubidots client4(TOKEN, MQTTCLIENTNAME4);Ubidots client5(TOKEN, MQTTCLIENTNAME5);Ubidots client6(TOKEN, MQTTCLIENTNAME6);Ubidots client7(TOKEN, MQTTCLIENTNAME7);/**************************************** * Definir valores iniciales ****************************************//**************************************** * Funciones auxiliares ****************************************/void callback(char* topic, byte* payload, unsigned int length) {  Serial.print("Mensaje recibido [");  Serial.print(topic);  Serial.print("] ");  int flag = 0;      for (int i=0;i<length;i++) {    Serial.print((char)payload[i]);  }  if ((char)payload[0]=='1'){    digitalWrite(16, HIGH);    tone(BUZZER, basic_notes[note(topic)]);    delay((1000/4)*1.30);    noTone(BUZZER);  }  else{    digitalWrite(16, LOW);    noTone(BUZZER);  }  Serial.println();  }int note(char* topic){  char * pch;  char * token = strtok(topic, "/");    while (token != NULL){      for (int i=0; i<8; i++){        if(String(token)==ubi_switch[i]){          Serial.println("");          Serial.println(ubi_switch[i]);          Serial.println(basic_notes[i]);          return i;          //tone(BUZZER, basic_notes[i]);          break;        }      }  token = strtok(NULL, "/");  }  }/**************************************** * Funciones principales ****************************************/void setup() {  // pon tu código de configuración aquí, para que se ejecute una vez:  Serial.begin(115200);  client.wifiConnection(WIFINAME, WIFIPASS);  client.begin(callback);  client2.begin(callback);  client3.begin(callback);  client4.begin(callback);  client5.begin(callback);  client6.begin(callback);  client7.begin(callback);  client.ubidotsSubscribe("piano", "do");  client2.ubidotsSubscribe("piano", "re");  client3.ubidotsSubscribe("piano", "mi");  client4.ubidotsSubscribe("piano", "fa");  client5.ubidotsSubscribe("piano", "sol");  //client6.ubidotsSubscribe("piano", "la");  //client7.ubidotsSubscribe("piano", "si");  pinMode(16, OUTPUT);  }void loop() {  //Rutina de envío a Ubidots  if(!client.connected()){      client.reconnect();      client.ubidotsSubscribe("piano", "do");      client2.ubidotsSubscribe("piano", "re");      client3.ubidotsSubscribe("piano", "mi");      client4.ubidotsSubscribe("piano", "fa");      client5.ubidotsSubscribe("piano", "sol");      //client6.ubidotsSubscribe("piano", "la");      //client7.ubidotsSubscribe("piano", "si");     }  client.loop();  client2.loop();  client3.loop();  client4.loop();  client5.loop();  client6.loop();  client7.loop();  }

ver rawDigital_Piano alojado con ❤ por GitHub

Resultados

¡Y eso es todo! Es hora de tocar el piano.

Te hemos mostrado cómo crear un piano digital de bajo costo basado en el Internet de las Cosas (IoT). Ahora es tu turno de intentarlo. ¡Feliz hacking :)

¿Ha quedado contestada tu pregunta?