В этой статье мастер расскажет нам, как сделать свой собственный счетчик подписчиков Youtube, используя дисплей электронной книги и Raspberry Pi. Такие дисплеи отлично подходят для такого типа проектов, поскольку они отлично читаются даже при ярком солнечном свете и могут просматриваться практически под любым углом, как бумага.
Дисплей должен обновляться не реже одного раза в день, чтобы предотвратить выгорание дисплея, но мастер установил обновление каждые три часа.
Устройство потребляет очень мало энергии, так как дисплей получает питание только при обновлении, в остальное время он практически выключен. Raspberry Pi Zero W работает постоянно и потребляет около 0,6 Вт в режиме ожидания.
Инструменты и материалы:
-Raspberry Pi Zero W;
-Карта Micro SD;
-Дисплей Waveshare для электронной бумаги HD 7,5 дюймов с контроллером;
-Фоторамка 6×8 » (152 Х 203 мм);
-Паяльные принадлежности;
Шаг первый: подготовка электроники
К Raspberry Pi припаивает штыревые разъемы и устанавливает радиатор.
В проекте мастер использует дисплей Waveshare 7.5 «HD 3 Color E-Paper (модель B). Есть еще двухцветная версию и трехцветную с желтым цветом вместо красного, но красный цвет лучше подходит для кнопки воспроизведения YouTube. Дисплей действительно тонкий, идеально подходит для установки в фоторамку без значительного изменения задней панели.
В упаковке находится контроллер дисплея, который подключается к дисплею шлейфом.
Перед установкой SD-карты нужно загрузить на нее ОС Raspberry Pi. Raspberry подсоединяется к контроллеру напрямую.
Шаг второй: рамка
Рамку нужно немного переделать. Внутри рамки установлен картон с окном под фотографию. Мастер вытаскивает его из рамки и обрезает окно по размеру дисплея. Затем вырезает в картонке, которая будет закрывать заднюю часть, отверстие для кабеля.
Теперь можно собрать рамку.
С дисплея нужно снять защитную пленку. Затем приклеить к нему белую картонную рамку. Устанавливает дисплей в фоторамку и фиксирует картонным листом. К листу крепит электронику.
Шаг третий: программирование и настройка
С помощью утилиты Raspberry Pi нужно установить на SD-карту ОС Raspberry Pi.
При первой загрузке Pi потребуется некоторое время, чтобы настроить операционную систему, подключиться к сети Wi-Fi и установить обновления. Большая часть этих операций выполняется автоматически, и интуитивно понятно.
Перед загрузкой скриптов, нужно будет установить несколько библиотек и выполнить шаги настройки.
Включите интерфейс SPI.
Откройте окно терминала и введите следующую команду:
sudo raspi-config
Выберите: Options -> SPI -> Yes
Возможно потребуется перезагрузить Pi, чтобы изменения вступили в силу.
sudo reboot
После перезапуска Pi снова откройте окно терминала.
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz
cd bcm2835-1.60/
sudo ./configure
sudo make
sudo make check
sudo make install
Установите библиотеки WiringPi:
sudo apt-get install wiringpi
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
Установите библиотеки Python2:
sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-pil
sudo apt-get install python-numpy
sudo pip install RPi.GPIO
sudo pip install spidev
Установите библиотеки Python3:
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo pip3 install RPi.GPIO
sudo pip3 install spidev
Чтобы скрипт Python мог получить текущее количество подписчиков и количество просмотров он-лайн, необходимо добавить идентификатор канала и ключ API YouTube.
Вот как сгенерировать свой ключ API:
Перейдите на веб-страницу Google API, войдя в свою учетную запись Google, связанную с вашим каналом YouTube — https://console.developers.google.com
Перейдите на панель инструментов и нажмите «Создать проект», выберите имя для своего проекта и нажмите «Создать».
Затем нажмите «Включить API и службы» и введите — Youtube Data API v3 — в поле поиска. Включите его и нажмите «Создать учетные данные».
На следующей странице вы должны увидеть ссылку для создания ключа API, нажмите на эту ссылку.
Затем нажмите «Ограничения API» и выберите «API данных YouTube v3».
Нажмите «Создать», после чего вам будет предоставлен ключ API, который вам нужно будет скопировать в основной скрипт Python ниже.
Также понадобится ваш идентификатор канала. Его можно найти в разделе «Расширенные настройки» вашей учетной записи канала. Щелкните изображение своего профиля в правом верхнем углу, затем перейдите в «Настройки», дождитесь загрузки страницы и затем нажмите «Дополнительные настройки» в меню слева.
Вы можете проверить свой ключ API и идентификатор канала, перейдя по следующему адресу в своем браузере, заменив YourChannelID и YourAPIKey только что полученными:
https://www.googleapis.com/youtube/v3/channels?part=statistics&id=YourChannelID&key=YourAPIKey
Дальше переходим к скрипту Python
Этот скрипт во многом основан на примере скрипта Waveshare с парой дополнений и изменений для получения информации с Youtube:
Показать / Скрыть текст#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
import requests
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
sys.path.append(libdir)
import logging
from waveshare_epd import epd7in5b_HD
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
from datetime import date
today = str(date.today())
logging.basicConfig(level=logging.DEBUG)
# Set up the structure of the API request URL
URL = "https://www.googleapis.com/youtube/v3/channels"
type = "statistics"
channelid = "******"
apikey = "******"
PARAMS = {('part', type), ('id',channelid), ('key',apikey)}
#Get API results
r = requests.get(url = URL, params = PARAMS)
data = r.json()
subscribers = int(data['items'][0]['statistics']['subscriberCount'])
totalviews = int(data['items'][0]['statistics']['viewCount'])
#Convert results to a string and format numbers with commas
noViews = 'Views: ' + f"{totalviews:,d}"
noSubs = 'Subscribers: ' + f"{subscribers:,d}"
#Update the display
try:
logging.info("Updating display")
epd = epd7in5b_HD.EPD()
logging.info("initialising and clearing display")
epd.init()
epd.Clear()
font12 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 12)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font32 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 32)
logging.info("Drawing new image")
blackImage = Image.new('1', (epd.width, epd.height), 255)
redImage = Image.new('1', (epd.width, epd.height), 255)
draw_blackImage = ImageDraw.Draw(blackImage)
draw_redImage = ImageDraw.Draw(redImage)
draw_blackImage.text((312, 360), 'Michael Klements', font = font32, fill = 0)
draw_blackImage.text((200, 435), noViews, font = font24, fill = 0)
draw_blackImage.text((475, 435), noSubs, font = font24, fill = 0)
draw_blackImage.text((800, 500), today, font = font12, fill = 0)
bmp = Image.open(os.path.join(picdir, 'youtubeIcon.bmp'))
redImage.paste(bmp, (265,80))
epd.display(epd.getbuffer(blackImage),epd.getbuffer(redImage))
#To delay before clearing, if used
#time.sleep(20)
#To clear the display afterwards
#logging.info("Clear…")
#epd.init()
#epd.Clear()
logging.info("Putting display to sleep")
epd.sleep()
epd.Dev_exit()
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
logging.info("ctrl + c:")
epd7in5b_HD.epdconfig.module_exit()
exit()
Скопируйте корневую папку в домашний каталог / pi /, чтобы ваш скрипт находился в /home/pi/SubCount/SubCount/subCount.py
Вам также может потребоваться включить шрифт, использованный в примере Waveshare , вставить этот шрифт в папку pic вместе с youtubeIcon.bmp.
Затем мы используем Youtube API, чтобы запросить количество подписчиков и количество просмотров. Не забудьте обновить их в своем скрипте перед его запуском, просто замените ****** своим собственным идентификатором и ключом.
Затем подключаемся к дисплею, чтобы обновить его. Дальше нужно заменить название канала «Michael Klements» на свое собственное название канала в этой части кода.
Затем сценарий снова переводит дисплей в режим сна с низким энергопотреблением до следующего обновления.
Также нужно будет запустить сценарий setup.py, входящий в состав вышеупомянутой загрузки кода, один раз перед запуском фактического сценария:
Показать / Скрыть текстimport sys
from setuptools import setup
setup(
name='waveshare-epd',
description='Waveshare e-Paper Display',
author='Waveshare',
package_dir={'': 'lib'},
packages=['waveshare_epd'],
Дальше пробуем запустить сценарий, и через несколько секунд дисплей начинает обновляться. Полное обновление дисплея занимает довольно много времени, примерно 30 секунд на Raspberry Pi Zero.
Мерцание является нормальным для этих контроллеров и сделано для предотвращения выгорания дисплея. Сначала он будет мигать черным и белым, затем загрузит черно-белую версию изображения и, наконец, заменит часть черного на красный в соответствии с настройками.
После того, как скрипт заработал нужно запланировать его автоматический запуск с помощью crontab. Waveshare рекомендует обновлять дисплей не реже одного раза в 24 часа, чтобы предотвратить выгорание. Мастер решил обновлять его каждые 8 часов.
При настройки он следовал этому руководству scottkildall, чтобы crontab автоматически запускал скрипт в 6, 14 и 22 часа.
По сути, нужно создать сценарий launcher.sh в той же папке, что и сценарий Python:
#!/bin/sh
# launcher.sh
# navigate to home, then script directory, then execute, then back home
cd /
cd home/pi/SubCount/SubCount/
sudo python3 subCount.py
cd /
Этот сценарий дает команду Raspberry Pi сменить каталог на домашний каталог, затем перейти к своему сценарию, затем запустить сценарий с помощью python3 и снова вернуться в домашний каталог.
Создав сценарий запуска, откройте crontab, открыв окно терминала и введя команду:
crontab -e
Затем отредактируете crontab для запуска сценария launcher.sh, добавив строки:
0 22 * * * /home/pi/SubCount/SubCount/launcher.sh
0 6 * * * /home/pi/SubCount/SubCount/launcher.sh
0 14 * * * /home/pi/SubCount/SubCount/launcher.sh
Сохраните изменения, и теперь ваш Raspberry Pi должен быть настроен на автоматическое обновление в 06:00, 14:00 и 22:00. Вы можете изменить минуты и часы в строках выше, на нужное вам.
Устройство готово к использованию. Просто нужно подключить его к источнику питания USB и установить в нужное место.
Весь процесс по его сборке и настройке можно посмотреть на видео.
Источник (Source)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник: