유튜브 구독자 카운터 장치 만들기 / 배선도 & 소스코드 / Youtube Google Api


안녕하세요~ 디바이스마트 입니다.


이번 시간엔 저희 디바이스마트에서 새로 출시된 DIY 키트 제품! 

아두이노(ESP-12E) 구독자 카운터 키트를 
통해 유튜브 구독자 카운터 장치를 만들어 볼려고 합니다.


그럼 곧 바로 시작해볼까요?!



유튜브 구독자 카운터 장치를 만들기 위한 구성품 입니다.

ESP-12E(아두이노)를 통해 MAX7219 매트릭스로 여러가지 정보를
출력 시키는 방법으로 만들어 볼 예정입니다.

출력 시킬 정보는 총 5가지로 현재 시간(Time), 요일(Week), 유튜브 채널명,
실시간 구독자 수, 총 조회수를 번갈아 가며, 도트매트릭스에 출력 시키도록
소스 코드를 짜봤습니다!


자세한 사항은 제품페이지 매뉴얼을 통해 확인하세요!
(아두이노(ESP-12E) 구독자 카운터 키트)



「 배선도 


 

5핀 케이블을 통해 위 배선도와 같이 연결 시켜 줍니다.



「 라이브러리 

구독자 카운터 장치에 필요한 라이브러리는 총 5가지로 다음과 같습니다.

                ArduinoJson.h

                MD_MAX72xx.h

                MD_Parola.h

                NTPClient

                YoutubeApi


위 5가지 라이브러리를 각각 설치한 후 코드 업로드가 가능합니다.


Arduino ide 실행 후 툴 > 라이브러리 관리에 접속해 위 라이브러리를
검색한 후 모두 설치합니다.




위 라이브러리를 모두 설치하셨다면 ESP-12E 보드 인식을 위해 보드 매니저를
설치해야 합니다.



「 ESP8266 보드 설치  


Arduino IDE :환경설정 (파일(File) → 환경설정(Preferences)) 으로 접속합니다.



환경설정의 추가 보드 관리자 URL에 다음 행을 추가 합니다.

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


확인 후

Arduino IDE :툴(Tools)→보드(Board)→보드매니저(Boards Manager) 접속 합니다.

보드 매니저에서 ESP8266을 검색한 후 설치합니다.




「 보드 간 PC연결 및 툴 설정 


USB 케이블을 통해 보드와 PC를 서로 연결합니다.


연결 이후 포트가 활성화 됩니다. (포트 인식이 안된다면 CH340 Driver 설치)

https://sparks.gogo.co.nz/ch340.html  (CH430 Driver)


(툴 정보)




「 소스 코드 

#if defined(ESP8266)
  #include <ESP8266WiFi.h>
#elif defined(ESP32)
  #include <WiFi.h>
#endif

#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <WiFiClientSecure.h>
#include <YoutubeApi.h>
#include <ArduinoJson.h>

// ---------------------------------------------

const char *ssid     = "WIFI_ID"; 
const char *password = "WIFI_PASSWORD";
#define API_KEY "Your_Google_Api_Key"     //구글 API 키 코드 입력      
#define CHANNEL_ID "Youtube_channal_ID"   //블로그 참조 
#define YoutubeChannelName "Youtube_channal_NAME" // 채널명

//----------------------------------------------

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW // 매트릭스 타입 지정
#define MAX_DEVICES 8  // 도트 매트릭스 숫자
#define CS_PIN D8     // CS - D8
MD_Parola Display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); // 디바이스 설정

WiFiUDP ntpUDP;  // NTP 라이브러리 지정
NTPClient timeClient(ntpUDP, "pool.ntp.org");

WiFiClientSecure client;
YoutubeApi api(API_KEY, client); //API 불러오기

//Week Days
String weekDays[7]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

//-------------------------------------------

//float subscriber; // 구독자 수 소수점 2째 자리까지 표기
float view;   // 뷰어 수 소수점 2째 자리까지 표기

int subscriber;  // 구독자 수 소수점 표기 X
//int view;      // 뷰어 수 소수점 표기 x

//-------------------------------------------

void setup() {
  Serial.begin(115200);
  Display.begin();
  Display.setIntensity(8); // 밝기조정
  Display.displayClear(); // 초기화
  
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  
  // 와이파이 연결
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Display.setTextAlignment(PA_CENTER); // 매트릭스 센터 출력
    Display.print("Loading..."); // Loading... 출력
    Serial.print(".");
  }
  delay(500);
  timeClient.begin();
  timeClient.setTimeOffset(32400);
  
  #ifdef ESP8266
  // Required if you are using ESP8266 V2.5 or above
  client.setInsecure();
  #endif
  if(api.getChannelStatistics(CHANNEL_ID)){
    subscriber = api.channelStats.subscriberCount;
    view = api.channelStats.viewCount;
  }
}

void loop() { 
  timeClient.update();
  time_t epochTime = timeClient.getEpochTime();
  
  if(api.channelStats.subscriberCount != 0 && api.channelStats.viewCount !=0){
    subscriber = api.channelStats.subscriberCount;
    view = api.channelStats.viewCount;
    MATOUTPUT();
  }else{
    subscriber = subscriber;
    view = view;
    MATOUTPUT();
  }
}
  
void MATOUTPUT(){   // 시간, 요일, 채널명, 구독자 수, 조회 수 차례차례 출력
  int Hour = timeClient.getHours();
  int SetHour = 0;
  int Minute = timeClient.getMinutes();
  String weekDay = weekDays[timeClient.getDay()];
  String mm;
  String APM = "";
  String subs = "";
  String views = "";
  
  if(Hour > 12){SetHour = Hour - 12;}else{SetHour = Hour;}
  if(Hour > 11){APM = "PM";}else{APM = "AM";}
  if(Minute < 10){mm = ":0";}else{mm = ":";}

  if (subscriber > 999999){
    subscriber = subscriber / 1000000.0;
    subs = "M Subs";
    }
  else if(subscriber > 9999 && subscriber < 999998){
    subscriber = subscriber / 1000.0;
    subs = "K Subs";
    }
  else if(subscriber < 10000){
    subscriber = subscriber;
    subs = " Subs";
    }

  if(view > 999999999){
    view = view / 1000000000.0;
    views = "G Views";
    }
  else if (view > 999999){
    view = view / 1000000.0;
    views = "M Views";
    }
  else if(view > 9999 && view < 999998){
    view = view / 1000.0;
    views = "K Views";
    }
  else if(view > 1.0){
    view = view;
    views = " Views";
    }

  Serial.println(String("") + SetHour + mm + Minute + " " + APM);
  Display.setTextAlignment(PA_CENTER); 
  Display.print(String("") + SetHour + mm + Minute + " " + APM);
  MATfor();

  Serial.println(weekDay);
  Display.setTextAlignment(PA_CENTER); 
  Display.print(weekDay);
  MATfor();

  Serial.println(YoutubeChannelName);
  Display.setTextAlignment(PA_CENTER); 
  Display.print(YoutubeChannelName);
  MATfor();
 
  Serial.println(String("") + subscriber + subs);
  Display.setTextAlignment(PA_CENTER); 
  Display.print(String("") + subscriber + subs);
  MATfor();

  Serial.println(String("") + view + views);
  Display.setTextAlignment(PA_CENTER); 
  Display.print(String("") + view + views);
  MATfor();
}

void MATfor(){     //밝기 조정 0~15~0
    for(int i = 0 ; i < 16 ; i++){
      Display.setIntensity(i);
      Serial.println(i);
      delay(100);
    }
    for(int i = 15 ; i > -1 ; i--){
      Display.setIntensity(i);
      Serial.println(i);
      delay(100);
  }
}
소스 코드 다운로드 (링크)


소스 코드가 꽤~~ 기네요 ㅠㅠ
위 소스 코드는 라이브러리를 통해 각종 정보를 받아온 후 도트매트릭스에
출력시키는 코드인데요!

업로드를 위해선 몇 가지를 기재해주셔야 할 것들이 있습니다.
위 코드에 빨간 색으로 칠해진 부분이 있는데 이 부분들 총 5가지를 기재해주셔야 합니다.

const char *ssid     = "WIFI_ID"; 
const char *password = "WIFI_PASSWORD";
#define API_KEY "Your Google Api Key"     //구글 API 키 코드 입력      
#define CHANNEL_ID "Youtube_channal_ID"   //블로그 참조 
#define YoutubeChannelName "Youtube_channal_NAME" // 채널명



WIFI_ID: 본인이 사용하시는 와이파이 아이디 작성
WIFI_PASSWORD: 와이파이 비밀번호 작성
Your Google Api Key: 구글 API 키 작성
Youtube_channal_ID: 유튜브 채널 고유 ID 작성
Youtube_channal_NAME: 유튜브 채널 명 작성


구글 API 키, 유튜브 채널 고유ID 에 경우 아래 블로그를 참조하시면 됩니다.
(유튜브 채널ID 추출하기 / Python Crawling(크롤링) / 유튜브 API 키 발급)

해당 블로그의 API 매뉴얼 Explorer 이용하기 / YouTube API KEY 발급 과정
순서를 통해 확인 가능합니다 !


본인 환경에 맟도록 모두 기재하신 후 업로드 버튼을 눌러주면 끝입니다!

(디바이스마트 유튜브 정보 불러오기)


소스 코드 다운로드 (링크) - 구독자 카운터 키트


NTP 라이브러리를 통해 현재 시간과 요일을 불러왔으며,
YoutubeApi 라이브러리를 통해 유튜브 구독자 수, 조회 수를 불러왔습니다.


기존에  https://socialgenius.io 해당 링크를 통해
타 사에서 제공한 API로 유튜브 정보를 출력 해서 나타내는
코드로 구독자 카운터 장치를 만들려 했으나 ... API가 너무 불안정해서
24시간 중 12시간이 안되더라구요 ㅠㅠ

그래서! 구글 API를 통해 정보를 받아와 매트릭스로 출력 시키도록 새롭게 짠 코드 입니다 !!

구글 API는 절때~~ 안정해서 끊기지 않더라구요!!


키트 케이스에 넣고 사용하면 요런 느낌입니다 ..

도트 매트릭스에 맞게 나온 케이스가 아무리 찾아도 없더라구요 ,,ㅠ
케이스는 아쉬운 대로 제작하셔서 사용하시는 것을 추천합니다 ㅎㅎ ㅠ


그리고!!


소스 코드 다운로드 (링크) - Clock


위와 같이 코드만 변경해주면 전자시계로도 사용이 가능합니다.

꼭 시계가 아니더라도 위 코드를 응용하면 여러가지 정보나 텍스트를 자유자재로
출력 시켜 다양한 용도로 사용이 가능하겠죠?!


지금 까지 구독자 카운터 장치를 만드는 과정이였습니다.





▼제품 확인하러가기▼

댓글 쓰기

0 댓글