안녕하세요~ 디바이스마트 입니다.
이번 시간엔 저희 디바이스마트에서 새로 출시된 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 댓글