viernes, 17 de marzo de 2017

Cuadro Contador de suscriptores de Youtube





Hola todos,

En este tutorial vamos a ver como podemos hacer un bonito cuadro que cuenta los suscriptores que tenemos en nuestro canal de YouTube.

Es un proyecto que he rescatado de Instructables.com (Proyecto Original)

El proyecto está basado en la placa de prototipado ESP8266, que viene a ser como un arduino pero lleva Wifi incorporado. 

En este caso, vamos a programar este controlador, para que se conecte a internet y mediante una API deYoutube nos devuelve una serie de datos en tiempo real de nuestro canal.

En cuanto a hardware vamos a necesitar las siguientes cosillas.


- Un Micro ESP8266
- Display 8 Dígitos (Max7219)
- Cablecillos para conectarlo todo
- Una Batería externa
- Un marco de fotos (el tamaño es al gusto).

Por ultimo yo he usado un botón de YouTube impreso en 3D Pero podemos imprimir uno en papel ya solo es decorativo.

Estas son las conexiones que debemos realizar:

Es hora de empezar a programar, pero antes de abrir el IDE de Arduino os pongo una lista de las cosillas que hay que descargar y algunas cosas de las que necesitamos.

Lo primero son las librerías de arduino necesarias para que el código funcione correctamente.

Librería para MAX7219
API YouTube
ArduinoJson
Driver CP2102 (para que nuestro PC reconozca la placa).

Aparte vamos a necesitar los siguintes datos, que son los que identificaran tu canal y tu WiFI.

Channel ID de tu Canal
- Google API KEY, os dejo un video para ver como se consigue. A mi me tardó unas 24 horas en estar activa.
- SSID y password de vuestra wifi.

Video API KEY



 Primero debemos instalar el driver y una vez instalado abrimos el IDE de arduino.

Este IDE por defecto no tiene instaladas las placas Así que debemos ir a Archivo / Preferencias y donde pone "Gestor de URLs Adicionales de Tarjetas añadimos la siguiente dirección:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Pulsamos Ok y ahora vamos a Herramientas/Placa/Gestor de tarjetas nos desplazamos hasta el final que estará la ESP8266 y un botón para instalar, lo pulsamos; dejamos que instale y cerramos. Nos os preocupéis que al final os dejaré un vídeo con todos los pasos que he seguido.

Ya estamos listos para copiar el código. Como he usado un display con más dígitos he modificado el código para que use el MAX7219. En el proyecto Original solo contaba hasta 9999 suscriptores y espero que este cuente más al contar con más dígitos, pero hasta que no supere esa cifra no sabré si funciona correctamente.

       

            // YouTube Subscriber Counter

//Proyecto Original de Becky Stern 2017
//Modificado Por SrFerrete. 

// based on library sample code by:
//   Giacarlo Bacchio (Gianbacchio on Github)
//   Brian Lough (witnessmenow on Github)
//   Adafruit (adafruit on github)

// Displays your current subscriber count on a seven-segment display
// This version supports up to 9999 subscribers

// He modificado el codigo y usado otro display para obtener una cifra mayor a 9999

// requires the following libraries, search in Library Manager or download from github):
#include                   // installed by default
//#include           // https://github.com/adafruit/Adafruit-GFX-Library
//*#include "Adafruit_LEDBackpack.h"  // https://github.com/adafruit/Adafruit_LED_Backpack
#include             // https://github.com/witnessmenow/arduino-youtube-api
#include            // https://github.com/bblanchon/ArduinoJson
/*------------- necesarios para el MAX7219------------------*/

#define PIN_CS_MAX7219 0 // Pin de Arduino al que se ha conectado el pin CS/SS del MAX7219
#define DIGITOS_DISPLAY_LED 8 // El display LED que se ha usado tiene 8 dígitos
#include "MAX7219.h"//Librería para manejar el display
#include "SPI.h"

MAX7219 pantalla(PIN_CS_MAX7219,DIGITOS_DISPLAY_LED);
//long valor_entero=0;

/*----------------------------------------------------------------*/
#include 
#include 

//------- Replace the following! ------
char ssid[] = "Nombre del WiFi"; // your network SSID (name)
char password[] = "Password WiFi";   // your network password

// google API key
// create yours: https://support.google.com/cloud/answer/6158862?hl=en
#define API_KEY "Api kay de google"

// youtube channel ID
// find yours: https://support.google.com/youtube/answer/3250431?hl=en
#define CHANNEL_ID "vuestro channel ID"

Adafruit_7segment matrix = Adafruit_7segment();

WiFiClientSecure client;
YoutubeApi api(API_KEY, client);

int api_mtbs = 1000; //mean time between api requests
long api_lasttime;   //last time api request has been done

long subs = 0;

void setup() {

  Serial.begin(115200);
  /*-------- Setup display-----------------*/
    SPI.begin(); // Para no interferir con otro código que utilice SPI, la librería MAX7219 no inicializa SPI y hay que hacerlo desde el programa
    pantalla.inicializar(); // SPI debe estar inicializado antes de inicializar el MAX7219 (que usa SPI)
    pantalla.apagar();
    pantalla.desactivar_modo_prueba();
    pantalla.brillo(15); // Brillo medio (va desde cero hasta 15)
    pantalla.borrar();
    pantalla.encender();
  /*--------------------------------------------*/  
  
  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // Attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);

}

void loop() {

  if (millis() > api_lasttime + api_mtbs)  {
    if(api.getChannelStatistics(CHANNEL_ID))
    {
      Serial.println("---------Stats---------"); //Estas lineas sirven para ver en el monitor serie 
                                                 //de arduino que el sistema funciona
      Serial.print("Subscriber Count: ");
      Serial.println(api.channelStats.subscriberCount);//devuelve el numero de suscriptores
      Serial.print("View Count: ");
      Serial.println(api.channelStats.viewCount); //devuelve el numero de visualizaciones
      Serial.print("Comment Count: ");
      Serial.println(api.channelStats.commentCount); //este no me duvuelve ningun dato
      Serial.print("Video Count: ");
      Serial.println(api.channelStats.videoCount); //devuelve el numero de videos de tu canal
      // Probably not needed :)
      //Serial.print("hiddenSubscriberCount: ");
      //Serial.println(api.channelStats.hiddenSubscriberCount);
      Serial.println("------------------------");
      delay(5000);
      //matrix.print(api.channelStats.subscriberCount, DEC);
      //matrix.writeDisplay();
       
       subs=api.channelStats.subscriberCount; // metemos el numero devuelto en una variable
      
       pantalla.mostrar_cifra(subs--,0,false); //y lo visualizamos en el display 
                                               //está testado con numero metidos a mano
        
    }
    api_lasttime = millis();
  }
}

       
 

Antes de dar a subir el código aseguraros de que habéis configurado correctamente el modelo de placa y el puerto COM correspondiente. Ahora Sí, le podemos dar a subir el código.

Una vez subido Abrimos el monitor serie y a los pocos segundos nos dirá Wifi Conected, nos dará la dirección IP que ha cogido el ESP8266 y empezará a devolver datos de nuestro Canal.

Ya solo queda ponerlo todo en el marco de fotos pero como no quiero aburriros con más parrafadas os dejo el vídeo de todo el montaje.



1 comentario:

  1. Pues a mi no me funciona, he seguido paso a paso todo y no hay manera, aqui dejo el error que me da, a ver si el señor Ferrete me hecha un cable, aqui dejo tambien una captura de pantalla https://drive.google.com/file/d/1A4tE_RiS5hEKjkeoX9S020ydQKHInDB9/view?usp=sharing


    Arduino:1.8.5 (Windows 10), Tarjeta:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    YouTube_Subscriber_Counter:17: error: #include expects "FILENAME" or

    #include // installed by default

    ^

    YouTube_Subscriber_Counter:20: error: #include expects "FILENAME" or

    #include // https://github.com/witnessmenow/arduino-youtube-api

    ^

    YouTube_Subscriber_Counter:21: error: #include expects "FILENAME" or

    #include // https://github.com/bblanchon/ArduinoJson

    ^

    YouTube_Subscriber_Counter:33: error: #include expects "FILENAME" or

    #include

    ^

    YouTube_Subscriber_Counter:34: error: #include expects "FILENAME" or

    #include

    ^

    exit status 1
    #include expects "FILENAME" or

    Este reporte podría tener más información con
    "Mostrar salida detallada durante la compilación"
    opción habilitada en Archivo -> Preferencias.


    ResponderEliminar