Ребятушки всем Привет. Решил запилить хардварный счетчик подписчиков для YouTube канала. А зачем это все нужно, спросите вы? Конечно можно зайти на страницу канала и посмотреть статистику. Есть куча виджетов, приложений для смартфона, сайтов для анализа посещаемости. Но все это не интересно. Хочется создать hardware решение из имеющихся железок под рукой. Прокачать знания в программировании ESP и Arduino. И поделиться интересным решением для начинающих разработчиков, ибо на сегодняшний момент, такого решения в сети я не видел. Ну что поехали…
Техническое задание
-
- Разработать счетчик подписчиков YouTube канала на Arduino или ESP8266.
-
- Выводить информацию на внешний дисплей и в консоль разработчика.
-
- Устройство должно быть портативным и по возможности автономным.
- Выводить как можно больше информации. Количество подписчиков, просмотров, комментариев и т.д.
Железо. ESP8266 Node MCU. Nextion HMI.
И так. Исходя из техзадания необходимо выбрать платформу для разработки. Raspberry Pi отбросил сразу, т.к. мощности ее избыточны. Основной выбор стал между Arduino и ESP8266. Т.к. всетаки необходимо обращаться за данными в интернет и исходя из того, что устройство должно быть автономным, выбор пал на ESP8266. При этом у ESP8266 работа с сетью доступна из «коробки», а к Arduino еще необходимы дополнительные шилды. Выводить информацию будем в консоль порта для отладки проекта и на дисплей Nextion HMI 7″ Разработку будем вести в Arduino IDE.
Софт. Среда разработки.
Разработку будем вести в среде Arduino IDE. Скачиваем и накатываем если еще этого не сделали. Далее добавляем ESP менеджер в среду Arduino IDE. Те кто уже работали с ESP и знают с чем его едят – переходим к следующему пункту.
Прежде чем мы перейдем к написанию кода, мы должны подготовить среду IDE Arduino с библиотеками, а также ядром для платформы разработки Node MCU. Чтобы установить Node MCU c ядром модуля ESP8266, необходимо:
- Скопируйте и вставьте эту строку в URL-адреса менеджера дополнительных плат:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Откройте вкладку Файл – Настройка , в строке Дополнительный менеджер плат добавить ссылку как показано на скриншоте.Откройте вкладку Файл – Настройки , в строке Дополнительные ссылки для Менеджера плат добавить ссылку как показано на скриншоте.
Теперь заходим в Инструменты – вкладка Платы – Менеджер плат… => Прописываем в строке поиска ESP8266. Жмем установить.
После подключения платы к компьютеру устанавливаем драйвера для платы ch340. Выбираем в менеджере план Node MCU V1.0 => COM порт и скорость соединения.
YouTube API KEY. ID YouTube Канала.
Перед тем как приступить к написанию кода, необходимо получить API KEY YouTube. Для этого:
1. Переходим по этой ссылке. И если вы не авторизованы в сервисе – авторизуйтесь.
2. Далее на открывшейся странице в списке ищем «YouTube Data API v3» и кликаем по нему.
3. На открывшейся странице нажимаем «Включить».
4. Затем перед нами открывается новая страница, где в правом верхнем углу мы жмем «Создать». В форме выбираем «YouTube Data API v3», «Веб-сервер (например, node.js, Tomcat)» и «Общедоступные данные».
И жмем «Выбрать тип учетных данных».
После этого у вас появится ваш API KEY, который вы сохраняете к себе в удобное для вас место и жмете – «Готово».
На этом получение ключа доступа к сервису YouTube окончено. Теперь узнаем ID YouTube канала. Открываем YouTube в браузере и переходим на страницу канала. В адресной строке браузера копируем ID канала. Как показано на скриншоте.
Пишем код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
/******************************************************************* * Read YouTube Channel statistics from the YouTube API * * * * By Pavel V. Hladkikh aka EU4DGC * * http://qsy.by * * https://www.youtube.com/channel/UCJSjwbCZ5R5CGY8qzjd203w * * * *******************************************************************/ #include <YoutubeApi.h> // YoutubeApi библиотека доступа к API YouTube. Спасибо говорим @Witnessmeno #include <ESP8266WiFi.h> #include <WiFiClientSecure.h> #include <ArduinoJson.h> // Этот скетч технически не нужен, но без него не работает //------- Заменить на свои значения ------ char ssid[] = "SSID"; // Имя точки доступа char password[] = "PASSWORD"; // Пароль от точки доступа #define API_KEY "API KEY" // API KEY выданный Google #define CHANNEL_ID "ID CANNEL" // ID YouTube канала const char *t0h = "t0.txt=\""; // Решил не заморачиваться const char *t1h = "t1.txt=\""; // и отправлять данные в порт const char *t2h = "t2.txt=\""; // без использования библиотек для Nextion byte ter[4] = {0x22, 0xff, 0xff, 0xff}; // Массив данных необходимый для работы с дисплеем WiFiClientSecure client; YoutubeApi api(API_KEY, client); unsigned long api_mtbs = 60000; // Время между запросами к API unsigned long api_lasttime; //Переменная последнего запроса к API long subs = 0; void setup() { Serial.begin(115200); // Скорость подключения к ESP для отладки проекта Serial1.begin(115200);// Скорость подключения к Nextion Serial.flush(); Serial1.flush(); client.setInsecure(); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); // Подключаемся к Wifi: 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("---------Статистика---------"); Serial.print("Кол-во Подписчиков: "); Serial.println(api.channelStats.subscriberCount); Serial.print("Кол-во Просмотров: "); Serial.println(api.channelStats.viewCount); Serial.print("Кол-во Комментариев: "); Serial.println(api.channelStats.commentCount); Serial.print("Кол-во Видео: "); Serial.println(api.channelStats.videoCount); Serial.println("------------------------"); Serial1.print(t0h); Serial1.println(api.channelStats.subscriberCount); Serial1.write(ter, 4); Serial1.print(t1h); Serial1.println(api.channelStats.viewCount); Serial1.write(ter, 4); Serial1.print(t2h); Serial1.println(api.channelStats.commentCount); Serial1.write(ter, 4); } api_lasttime = millis(); } } |
Друзья. Я надеюсь, что довольно детально прокомментировал код. Однако есть пару нюансов которые все таки стоит проговорить еще раз. Вводим свои полученные данные API KEY и ID канала. А также Имя и Пароль от WiFi сети.
Нажимаем кнопку Загрузка или сочетание клавиш Ctrl+U и прошиваем ESP. После завершения загрузки скетча в память ESP, открываем монитор порта и проверяем, что все работает правильно.
Nextion HMI.
С выводом в консоль Arduino IDE я думаю разобрались. Кстати по сути данные можно выводить в любую программу для мониторинга COM порта. Первое, что приходит на ум это Putty. Теперь приступим к выводу данных на дисплей Nextion HMI 7″ Описание работы со средой разработки Nextion Editor, выходит за рамки этой статьи, однако ознакомиться с интерфейсом и правилами разработки можно в этой статье. Еще один пример проекта разработанного в Nextion Editor для дисплея Nextion доступен по этой ссылке.
Для тех, кто не знаком с дисплеями от Nextion и поленился про них почитать выше по ссылке, вкратце опишу проект. К сожалению одной из больших проблем Nextion Editor, является отсутствие хороших, качественных шрифтов. Поэтому в любом удобном графическом редакторе создаем подложку с логотипом канала. Добавляем текстовые элементы в которые выводим информацию с ESP.
1 2 3 4 |
const char *t0h = "t0.txt=\""; const char *t1h = "t1.txt=\""; const char *t2h = "t2.txt=\""; byte ter[4] = {0x22, 0xff, 0xff, 0xff}; |
Этот кусок кода описывает три переменные в которые выводиться информация о подписчика, просмотрах и комментариях. Для Arduino и ESP существует специальная библиотека по работе с дисплеями от Nextion, однако в таком простом проекте использовать ее не целесообразно. Последняя строчка, массив посылаемый в порт для инициализации работы с дисплеем.
1 2 3 4 5 6 7 8 9 |
Serial1.print(t0h); Serial1.println(api.channelStats.subscriberCount); Serial1.write(ter, 4); Serial1.print(t1h); Serial1.println(api.channelStats.viewCount); Serial1.write(ter, 4); Serial1.print(t2h); Serial1.println(api.channelStats.commentCount); Serial1.write(ter, 4); |
Эта часть кода, отвечает непосредственно за отправку данных в дисплей. Я думаю все интуитивно понятно. Библиотека YouTube API поддерживает еще несколько команд для вывода информации. Поэтому в проект можно добавить еще поля для вывода информации.
А вот, что в итоге получилось.
Ну что друзья. Надеюсь данная статья была интересна и полезна для вас. Ниже прилагаю все файлы и исходники. Если вам понравилась статья, поделитесь ей в социальных сетях или поддержите проект монеткой на странице Donate. И конечно подписывайтесь на YouTube канал.
Ссылка на все файлы на GitHub