Espruino:Примеры/Счетчик YouTube-просмотров: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показано 5 промежуточных версий 2 участников) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Счетчик YouTube-просмотров<ref>[https://www.espruino.com/YouTube+View+Counter www.espruino.com - YouTube View Counter]</ref>= | ||
[https://www.youtube.com/watch?v=NLYScs3R488 DIY YouTube View Counter] | |||
== Нам понадобятся == | |||
* Плата [https://www.espruino.com/WiFi Espruino WiFi] | |||
* Светодиодный дисплей [https://www.espruino.com/MAX7219 MAX7219] (32x8 пикселей) | |||
== Подсоединение == | |||
Просто подключите устройства друг к другу следующим образом: | |||
{| class="wikitable" | |||
|- | |||
! [[MAX7219]] !! [[Espruino]] | |||
|- | |||
| VCC || VUSB или 3.3v | |||
|- | |||
| GND || GND | |||
|- | |||
| DOUT || B3 | |||
|- | |||
| CS || B4 | |||
|- | |||
| CLK || B5 | |||
|} | |||
{{Примечание1|Расположение контактов на плате дисплея [[MAX7219]] и цвета проводов кабеля, идущего в комплекте с ним, могут вызвать путаницу, из-за которой вы можете случайно поменять местами линии '''VCC''' и '''GND''', так что будьте осторожны.}} | |||
Плату [[MAX7219]] нужно питать ''от 3.3 или 5 вольт''. Использование 5-вольтового напряжения увеличит яркость экрана, а также снизит нагрузку на 3.3-вольтовую линию (которая также используется для [[WiFi]]). | |||
Мы используем программную [https://www.espruino.com/SPI SPI], так что для [[MAX7219]] можно использовать любые свободные GPIO-контакты. | |||
== Код == | |||
Скопируйте этот код в правую часть [[Web IDE]], не забудьте поменять [[WiFi-настройки]] (пароль и название WiFi-сети), '''ID''' для видео и API-ключ в самом верху кода. О том, как получить рабочий API-ключ, смотрите в видео. | |||
<syntaxhighlight lang="javascript"> | |||
var WIFI_NAME = "espruino"; | |||
var WIFI_OPTIONS = { password : "testtest" }; | |||
var VIDEO_ID = "aZ4MKhqvz2w"; | |||
var API_KEY = ""; | |||
var disp; | |||
var g = Graphics.createArrayBuffer(32, 8, 1); | |||
g.flip = function() { disp.raw(g.buffer); }; | |||
require("Font4x8Numeric").add(Graphics); | |||
g.setFont4x8Numeric(); | |||
var wifi; | |||
var count = 0; | |||
var lastCount = 0; | |||
var interval; | |||
function drawCount() { | |||
g.clear(); | |||
var c = count.toString(); | |||
g.drawString(c, g.getWidth()-g.stringWidth(c)); | |||
g.flip(); | |||
} | |||
function updateCount(newCount) { | |||
if (interval) clearInterval(interval); | |||
interval = undefined; | |||
var diff = newCount - lastCount; | |||
if (lastCount===0 || diff<=0) { | |||
lastCount = newCount; | |||
count = newCount; | |||
drawCount(); | |||
return; | |||
} | |||
lastCount = count; | |||
count = newCount; | |||
drawCount(); | |||
interval = setInterval(function() { | |||
count++; | |||
drawCount(); | |||
}, 60000/diff); | |||
} | |||
function getPage() { | |||
require("http").get("https://www.googleapis.com/youtube/v3/videos?part=statistics&id="+VIDEO_ID+"&key="+API_KEY, function(res) { | |||
var data = ""; | |||
res.on('data', function(d) { data += d; }); | |||
res.on('close', function() { | |||
var json = JSON.parse(data); | |||
updateCount(json.items[0].statistics.viewCount); | |||
}); | |||
}); | |||
} | |||
function onInit() { | |||
var spi = new SPI(); | |||
spi.setup({ mosi:B3, sck:B5 }); | |||
disp = require("MAX7219").connect(spi, B4, 4); | |||
wifi = require("EspruinoWiFi"); | |||
wifi.connect(WIFI_NAME, WIFI_OPTIONS, function(err) { | |||
if (err) { | |||
console.log("Ошибка подключения: "+err); | |||
return; | |||
} | |||
console.log("Подключились!"); | |||
// Сразу же обновляем: | |||
getPage(); | |||
// Теперь обновляем каждые 60 секунд: | |||
setInterval(getPage, 60000); | |||
}); | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Примечание1|В этом коде используется шрифт ''4x8'' (он упоминается в видео, но не показывается), который позволяет показать на экране больше цифр (''8'').}} | |||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 19: | Строка 124: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Espruino | {{Навигационная таблица/Портал/Espruino}} | ||
Текущая версия от 15:12, 28 мая 2023
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Счетчик YouTube-просмотров[1]
Нам понадобятся
- Плата Espruino WiFi
- Светодиодный дисплей MAX7219 (32x8 пикселей)
Подсоединение
Просто подключите устройства друг к другу следующим образом:
MAX7219 | Espruino |
---|---|
VCC | VUSB или 3.3v |
GND | GND |
DOUT | B3 |
CS | B4 |
CLK | B5 |
Плату MAX7219 нужно питать от 3.3 или 5 вольт. Использование 5-вольтового напряжения увеличит яркость экрана, а также снизит нагрузку на 3.3-вольтовую линию (которая также используется для WiFi). Мы используем программную SPI, так что для MAX7219 можно использовать любые свободные GPIO-контакты.
Код
Скопируйте этот код в правую часть Web IDE, не забудьте поменять WiFi-настройки (пароль и название WiFi-сети), ID для видео и API-ключ в самом верху кода. О том, как получить рабочий API-ключ, смотрите в видео.
var WIFI_NAME = "espruino";
var WIFI_OPTIONS = { password : "testtest" };
var VIDEO_ID = "aZ4MKhqvz2w";
var API_KEY = "";
var disp;
var g = Graphics.createArrayBuffer(32, 8, 1);
g.flip = function() { disp.raw(g.buffer); };
require("Font4x8Numeric").add(Graphics);
g.setFont4x8Numeric();
var wifi;
var count = 0;
var lastCount = 0;
var interval;
function drawCount() {
g.clear();
var c = count.toString();
g.drawString(c, g.getWidth()-g.stringWidth(c));
g.flip();
}
function updateCount(newCount) {
if (interval) clearInterval(interval);
interval = undefined;
var diff = newCount - lastCount;
if (lastCount===0 || diff<=0) {
lastCount = newCount;
count = newCount;
drawCount();
return;
}
lastCount = count;
count = newCount;
drawCount();
interval = setInterval(function() {
count++;
drawCount();
}, 60000/diff);
}
function getPage() {
require("http").get("https://www.googleapis.com/youtube/v3/videos?part=statistics&id="+VIDEO_ID+"&key="+API_KEY, function(res) {
var data = "";
res.on('data', function(d) { data += d; });
res.on('close', function() {
var json = JSON.parse(data);
updateCount(json.items[0].statistics.viewCount);
});
});
}
function onInit() {
var spi = new SPI();
spi.setup({ mosi:B3, sck:B5 });
disp = require("MAX7219").connect(spi, B4, 4);
wifi = require("EspruinoWiFi");
wifi.connect(WIFI_NAME, WIFI_OPTIONS, function(err) {
if (err) {
console.log("Ошибка подключения: "+err);
return;
}
console.log("Подключились!");
// Сразу же обновляем:
getPage();
// Теперь обновляем каждые 60 секунд:
setInterval(getPage, 60000);
});
}
См.также
Внешние ссылки