#include // Оболочка для API YouTube для Arduino (работает на ESP8266) #include // Wi-Fi библиотека для ESP8266 #include // Вариант WiFiClient с поддержкой TLS #include // Эта библиотека предназначена для управления дисплеем TM1637 #include // ------- Замените на свои! ------ // char ssid[] = "XXXXXX"; // SSID (имя) char password[] = "XXXXXXXX"; // ключ сети #define API_KEY "AIzaSyBNabchapXXXXXXXXXXXXXXXXXXXXXmNbY" // google apps API Token #define CHANNEL_ID "UCR0wao7J3htf9DjuVJ2uzUw" // url канала // ------------------------------------- // WiFiClientSecure client; YoutubeApi api(API_KEY, client); unsigned long api_mtbs = 120000; // Среднее время между запросами API - измените на 5 минут unsigned long counter = 0; // Счетчик, который увеличивается каждые 10 миллисекунд // Контакты для подключения модуля (цифровые контакты) #define CLK1 D3 #define DIO1 D2 #define CLK2 D1 #define DIO2 D0 #define CLK3 D5 #define DIO3 D4 #define CLK4 D6 #define DIO4 D7 TM1637Display display1(CLK1, DIO1); TM1637Display display2(CLK2, DIO2); TM1637Display display3(CLK3, DIO3); TM1637Display display4(CLK4, DIO4); long viewsLeft = 0; long viewsRight = 0; long subLeft = 0; long subRight = 0; long OLDsub = 0; // Настройка зуммера int frequency = 1000; // Specified in Hz int buzzPin = D8; int timeOn = 500; // Specified in milliseconds int timeOff = 500; // Specified in milliseconds // Настройка светодиодов int BlueLED = D9; int WhiteLED = D10; int LEDblinker = 0; void setup() { Serial.begin(115200); // Установите светодиоды //pinMode(D9, OUTPUT); //pinMode(D10, OUTPUT); //digitalWrite(D9, HIGH); // Очистить дисплей display1.setBrightness(0x0f); display1.showNumberDec(0, false, 4, 0); display2.setBrightness(0x0f); display2.clear(); display3.setBrightness(0x0f); display3.showNumberDec(0, false, 4, 0); display4.setBrightness(0x0f); display4.clear(); // Установите WiFi в режим станции и отключитесь от точки доступа, если она была ранее подключена WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); // Попытаться подключиться к сети Wi-Fi: 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() { counter = counter + 10; if (counter > api_mtbs) { if(api.getChannelStatistics(CHANNEL_ID)) { Serial.println("---------Stats---------"); Serial.print("Subscriber Count: "); Serial.println(api.channelStats.subscriberCount); Serial.print("View Count: "); Serial.println(api.channelStats.viewCount); Serial.print("Video Count: "); Serial.println(api.channelStats.videoCount); Serial.println("------------------------"); // Display the view count viewsRight = api.channelStats.viewCount % 10000; // Value on the right viewsLeft = (api.channelStats.viewCount - viewsRight) / 10000; // Value on the left display1.showNumberDec(viewsRight, false, 4, 0); display2.showNumberDec(viewsLeft, false, 4, 0);viewsRight= 114; if(viewsLeft > 0) { // Zero-padding to avoid a gap between the Left and Right displays if(viewsRight < 10) display1.showNumberDec(000, false, 3, 0); else if(viewsRight < 100) display1.showNumberDec(00, false, 2, 0); else if(viewsRight < 1000) display1.showNumberDec(0, false, 1, 0); } // Display the subscribers count subRight = api.channelStats.subscriberCount % 10000; // Value on the right subLeft = (api.channelStats.subscriberCount - subRight) / 10000; // Value on the left display3.showNumberDec(subRight, false, 4, 0); display4.showNumberDec(subLeft, false, 4, 0); if(subLeft > 0) { // Zero-padding to avoid a gap between the Left and Right displays if(subRight < 10) display3.showNumberDec(000, false, 3, 0); else if(subRight < 100) display3.showNumberDec(00, false, 2, 0); else if(subRight < 1000) display3.showNumberDec(0, false, 1, 0); } // Включить зуммер, если добавился новый подписчик if ( api.channelStats.subscriberCount > OLDsub ) { // Добавился новый подписчик tone(buzzPin, frequency); delay(timeOn); noTone(buzzPin); delay(timeOff); OLDsub = api.channelStats.subscriberCount; LEDblinker = 1; } } counter = 0; // Сброс счетчика после отображения данных } // Мигаем светодиодами if ( LEDblinker == 1 ) { if( counter == 10 || counter == 400 || counter == 800 || counter == 1200 || counter == 1600 || counter == 2000 ){ digitalWrite(BlueLED, LOW); // Turn off the Blue LED digitalWrite(WhiteLED, HIGH); // Turn on the White LED } else if ( counter == 200 || counter == 600 || counter == 1000 || counter == 1400 || counter == 1800 ){ digitalWrite(BlueLED, HIGH); // Turn on the Blue LED digitalWrite(WhiteLED, LOW); // Turn off the White LED } else if ( counter == 2200 ) { LEDblinker = 0; // Reset the blinker counter } } else { digitalWrite(BlueLED, HIGH); // Turn on the Blue LED digitalWrite(WhiteLED, LOW); // Turn off the White LED } delay(10); }