Espruino:Примеры/Дисплейное регистрирующее устройство при помощи Pixl.js: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 7: Строка 7:
[https://www.youtube.com/watch?v=mnNcMEe7IXw DIY Counting and Graphing with Pixl.js]
[https://www.youtube.com/watch?v=mnNcMEe7IXw DIY Counting and Graphing with Pixl.js]


В этом руководстве мы расскажем, как создать простое устройство, которое будет ежедневно подсчитывать что-то, генерировать график и экспортировать результат. Мы также расскажем, как подключать к этому устройству внешние датчики и дистанционно модифицировать счётчик при помощи Puck.js.
В этом руководстве мы расскажем, как создать простое устройство, которое будет ежедневно подсчитывать что-то, генерировать график и экспортировать результат. Мы также расскажем, как подключать к этому устройству внешние датчики и дистанционно модифицировать счётчик при помощи [[Puck.js]].


Это может пригодиться, к примеру, если вы выращиваете помидоры и хотите вести подсчёт того, сколько плодов собираете ежедневно, или, возможно, вам нужно подсчитать то, сколько раз ваш коллега делает что-то раздражающее.  
Это может пригодиться, к примеру, если вы выращиваете помидоры и хотите вести подсчёт того, сколько плодов собираете ежедневно, или, возможно, вам нужно подсчитать то, сколько раз ваш коллега делает что-то раздражающее.  


Для этого просто возьмите [https://www.espruino.com/Pixl.js Pixl.js], подключитесь к нему при помощи IDE Espruino, скопируйте код ниже в правую часть IDE и нажмите на кнопку загрузки кода.  
Для этого просто возьмите [https://www.espruino.com/Pixl.js Pixl.js], подключитесь к нему при помощи [[IDE Espruino]], скопируйте код ниже в правую часть [[IDE]] и нажмите на кнопку загрузки кода.  


Когда программа будет запущена, просто воспользуйтесь кнопками «Вверх» и «Вниз», чтобы уменьшать и увеличивать значение счётчика. Каждый день в полночь счётчик обнуляется, а к графику добавляется ещё одна полоска.
Когда программа будет запущена, просто воспользуйтесь кнопками ''«Вверх»'' и ''«Вниз»'', чтобы уменьшать и увеличивать значение счётчика. Каждый день в полночь счётчик обнуляется, а к графику добавляется ещё одна полоска.


Чтобы экспортировать данные, снова подключитесь к Pixl.js при помощи Web IDE и напечатайте toCSV() в левой части IDE. Это напечатает в консоли список разделённых запятыми дат и чисел, которые затем можно будет вставить в Excel или какую-то другую электронную таблицу.
Чтобы экспортировать данные, снова подключитесь к [[Pixl.js]] при помощи [[Web IDE]] и напечатайте toCSV() в левой части IDE. Это напечатает в консоли список разделённых запятыми дат и чисел, которые затем можно будет вставить в Excel или какую-то другую электронную таблицу.


== Хранение данных ==
== Хранение данных ==
Строка 23: Строка 23:
== Другие платы ==
== Другие платы ==


Этот код можно легко запустить не только на Pixl.js, но и на других платах Espruino. Нужно лишь, чтобы переменная g содержала экземпляр класса Graphics, через который будет выполняться работа с дисплеем, а BTN2 и BTN3 указывали на контакты, подсоединённые к кнопкам платы.
Этот код можно легко запустить не только на [[Pixl.js]], но и на других платах [[Espruino]]. Нужно лишь, чтобы переменная g содержала экземпляр класса Graphics, через который будет выполняться работа с дисплеем, а '''BTN2''' и '''BTN3''' указывали на контакты, подсоединённые к кнопкам платы.


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
var days = [0];
var days = [0];
var today = days.length-1;
var today = days.length-1;
Строка 82: Строка 82:
== Увеличение значения счётчика ==
== Увеличение значения счётчика ==


В примере выше счётчик запускается лишь кнопками, находящимися на боковой стороне Pixl.js. Но мы можем делать это и при помощи сигнала от внешнего устройства – он вызовет функцию count(1), которая, собственно, и увеличит значение счётчика.
В примере выше счётчик запускается лишь кнопками, находящимися на боковой стороне [[Pixl.js]]. Но мы можем делать это и при помощи сигнала от внешнего устройства – он вызовет функцию count(1), которая, собственно, и увеличит значение счётчика.


[https://www.youtube.com/watch?v=QxQe_WsB44w Remote Logging with Pixl.js]
[https://www.youtube.com/watch?v=QxQe_WsB44w Remote Logging with Pixl.js]
Строка 88: Строка 88:
=== Проводной пироэлектрический датчик движения ===
=== Проводной пироэлектрический датчик движения ===


Просто подключите [https://www.espruino.com/Pyroelectric пироэлектрический датчик движения] к контактам Vin и GND на Pixl.js, а сигнальный провод подключите к любому входному контакту (в примере ниже используется A0).
Просто подключите [https://www.espruino.com/Pyroelectric пироэлектрический датчик движения] к контактам '''Vin''' и '''GND''' на [[Pixl.js]], а сигнальный провод подключите к любому входному контакту (в примере ниже используется '''A0''').


Теперь, чтобы увеличивать значение счётчика при срабатывании датчика, нам надо лишь добавить в код вот эту строчку:
Теперь, чтобы увеличивать значение счётчика при срабатывании датчика, нам надо лишь добавить в код вот эту строчку:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
setWatch(x=>count(1), A0, {repeat:true, edge:"rising"});
setWatch(x=>count(1), A0, {repeat:true, edge:"rising"});
</syntaxhighlight>
</syntaxhighlight>
Строка 98: Строка 98:
=== Беспроводной датчик Puck.js ===
=== Беспроводной датчик Puck.js ===


Для создания беспроводного соединения вам надо запустить на Pixl.js функцию Bluetooth.setConsole(true), чтобы информация о Bluetooth-соединении не печаталась на LCD-дисплее.
Для создания беспроводного соединения вам надо запустить на [[Pixl.js]] функцию Bluetooth.setConsole(true), чтобы информация о Bluetooth-соединении не печаталась на LCD-дисплее.


Затем возьмите [https://www.espruino.com/Puck.js Puck.js] и подключитесь к нему при помощи Web IDE. Код ниже осуществляет подключение к Pixl.js при нажатии на кнопку (не забудьте вписать правильное название Pixl.js вместо Pixl.js 6155).
Затем возьмите [https://www.espruino.com/Puck.js Puck.js] и подключитесь к нему при помощи [[Web IDE]]. Код ниже осуществляет подключение к [[Pixl.js]] при нажатии на кнопку (не забудьте вписать правильное название [[Pixl.js]] вместо ''Pixl.js 6155'').


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
function count() {
function count() {
   LED3.set();
   LED3.set();
Строка 120: Строка 120:
</syntaxhighlight>
</syntaxhighlight>


'''Примечание:''' В данный момент Espruino поддерживает только одно активное соединение одновременно, поэтому вы не можете вызвать count() до завершения предыдущего вызова count(), т.е. до момента пока не погаснет синий светодиод. Чтобы исправить это, можно добавить новую переменную и с её помощью отслеживать, занята ли Espruino или нет.
{{Примечание1|В данный момент [[Espruino]] поддерживает только одно активное соединение одновременно, поэтому вы не можете вызвать count() до завершения предыдущего вызова count(), т.е. до момента пока не погаснет синий светодиод. Чтобы исправить это, можно добавить новую переменную и с её помощью отслеживать, занята ли [[Espruino]] или нет.}}


С помощью этого метода вы можете использовать в Pixl.js внешние сигналы и от других устройств. Или вы можете, к примеру, при помощи кода из [http://wikihandbk.com/wiki/Espruino:Примеры/Сигнал_о_незакрытой_двери_холодильника этого руководства] использовать сигнал от магнетометра.
С помощью этого метода вы можете использовать в [[Pixl.js]] внешние сигналы и от других устройств. Или вы можете, к примеру, при помощи кода из [http://wikihandbk.com/wiki/Espruino:Примеры/Сигнал_о_незакрытой_двери_холодильника этого руководства] использовать сигнал от [[магнетометр]]а.


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
var zero = Puck.mag();
var zero = Puck.mag();
var doorOpen = false;
var doorOpen = false;
Строка 144: Строка 144:
=См.также=
=См.также=


{{ads}}
 


=Внешние ссылки=
=Внешние ссылки=
Строка 150: Строка 150:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 20:46, 22 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Дисплейное регистрирующее устройство при помощи Pixl.js[1]

DIY Counting and Graphing with Pixl.js

В этом руководстве мы расскажем, как создать простое устройство, которое будет ежедневно подсчитывать что-то, генерировать график и экспортировать результат. Мы также расскажем, как подключать к этому устройству внешние датчики и дистанционно модифицировать счётчик при помощи Puck.js.

Это может пригодиться, к примеру, если вы выращиваете помидоры и хотите вести подсчёт того, сколько плодов собираете ежедневно, или, возможно, вам нужно подсчитать то, сколько раз ваш коллега делает что-то раздражающее.

Для этого просто возьмите Pixl.js, подключитесь к нему при помощи IDE Espruino, скопируйте код ниже в правую часть IDE и нажмите на кнопку загрузки кода.

Когда программа будет запущена, просто воспользуйтесь кнопками «Вверх» и «Вниз», чтобы уменьшать и увеличивать значение счётчика. Каждый день в полночь счётчик обнуляется, а к графику добавляется ещё одна полоска.

Чтобы экспортировать данные, снова подключитесь к Pixl.js при помощи Web IDE и напечатайте toCSV() в левой части IDE. Это напечатает в консоли список разделённых запятыми дат и чисел, которые затем можно будет вставить в Excel или какую-то другую электронную таблицу.

Хранение данных

Этот код хранит данные только в RAM-памяти, поэтому при отключении питания они будут утеряны. Вы, впрочем, можете воспользоваться для хранения этих данных модулем Storage, но этот метод плох тем, что данные о текущем времени всё равно будут утеряны.

Другие платы

Этот код можно легко запустить не только на Pixl.js, но и на других платах Espruino. Нужно лишь, чтобы переменная g содержала экземпляр класса Graphics, через который будет выполняться работа с дисплеем, а BTN2 и BTN3 указывали на контакты, подсоединённые к кнопкам платы.

var days = [0];
var today = days.length-1;
var currentDay = (new Date()).getDay();

function count(dir) {
  days[today] += dir;
  if (days[today]<0) days[today]=0;
  draw();
}

function draw() {
  g.clear();
  var mid = 22;
  g.setFontAlign(0,-1);
  g.setFontVector(30);
  g.drawString(days[today],mid,15);
  g.setFontBitmap();
  g.drawString("Count",mid,10);
  g.drawString((new Date()).toString().substr(0,10).trim(),mid,50);
  require("graph").drawBar(g, days, {
    x : mid*2, y : 5,
    miny: 0,
    axes : true,
    gridy : 5
  });
  g.flip();
}

setWatch(x=>count(1), BTN2, {repeat:true});
setWatch(x=>count(-1), BTN3, {repeat:true});

function checkDay() {
  var day = (new Date()).getDay();
  if (currentDay != day) {
    days.push(0);
    today = days.length-1;
    currentDay = day;
    draw();
  }
}
setInterval(checkDay, 1000*60*60);

function toCSV() {
  var start = Date.now() - 1000*60*60*24*(days.length-1);
  for (var i=0;i<days.length;i++) {
    var date = new Date(start + i*1000*60*60*24);
    var dateStr = date.toString().substr(0,10).trim();
    console.log(dateStr + "," + days[i]);
  }
}

draw();

Увеличение значения счётчика

В примере выше счётчик запускается лишь кнопками, находящимися на боковой стороне Pixl.js. Но мы можем делать это и при помощи сигнала от внешнего устройства – он вызовет функцию count(1), которая, собственно, и увеличит значение счётчика.

Remote Logging with Pixl.js

Проводной пироэлектрический датчик движения

Просто подключите пироэлектрический датчик движения к контактам Vin и GND на Pixl.js, а сигнальный провод подключите к любому входному контакту (в примере ниже используется A0).

Теперь, чтобы увеличивать значение счётчика при срабатывании датчика, нам надо лишь добавить в код вот эту строчку:

setWatch(x=>count(1), A0, {repeat:true, edge:"rising"});

Беспроводной датчик Puck.js

Для создания беспроводного соединения вам надо запустить на Pixl.js функцию Bluetooth.setConsole(true), чтобы информация о Bluetooth-соединении не печаталась на LCD-дисплее.

Затем возьмите Puck.js и подключитесь к нему при помощи Web IDE. Код ниже осуществляет подключение к Pixl.js при нажатии на кнопку (не забудьте вписать правильное название Pixl.js вместо Pixl.js 6155).

function count() {
  LED3.set();
  NRF.requestDevice({ filters: [{ name: 'Pixl.js 6155' }] }).then(function(device) {
    return require("ble_simple_uart").write(device, "count(1)\n");
  }).then(function() {
    LED3.reset();
    print('Готово!');
  }).catch(function() {
    LED3.reset();
    digitalPulse(LED1, 1, 1000);
    setTimeout(count, 1000);
  });
}

setWatch(count, BTN, {repeat:true,edge:"rising"});
Примечание

В данный момент Espruino поддерживает только одно активное соединение одновременно, поэтому вы не можете вызвать count() до завершения предыдущего вызова count(), т.е. до момента пока не погаснет синий светодиод. Чтобы исправить это, можно добавить новую переменную и с её помощью отслеживать, занята ли Espruino или нет.

С помощью этого метода вы можете использовать в Pixl.js внешние сигналы и от других устройств. Или вы можете, к примеру, при помощи кода из этого руководства использовать сигнал от магнетометра.

var zero = Puck.mag();
var doorOpen = false;
function onMag(p) {
  p.x -= zero.x;
  p.y -= zero.y;
  p.z -= zero.z;
  var s = Math.sqrt(p.x*p.x + p.y*p.y + p.z*p.z);
  var open = s<1000;
  if (open!=doorOpen) {
    doorOpen = open;
    if (!open) count();
  }
}
Puck.on('mag', onMag);
Puck.magOn();

См.также

Внешние ссылки