Espruino Pixl.js — платформа для разработки со встроенным интерпретатором JavaScript. Плата выполнена в формфакторе Arduino R3: с одной стороны расположены контактные колодки для подключения шилдов, а с обраной графический LCD-дисплей.
Мозгом платы является модуль MDBT42Q с чипом Nordic nRF52840, который также обеспечивает беспроводную связь и прошивку по Bluetooth v5.0.
Платформа поддерживает два типа подключения и отладки:
Если у вас на ПК отсутствует Bluetooh-модуль или вы сторонник проводной системы — используйте проводной способ коммуникации с платформой.
Для старта подключите к плате Espruino Pixl.js линию питания и земли. Выберите один из нескольких вариантов:
VIN
и GND
. Диапазон входного напряжения от 3,5 до 16 вольт.Для работы с платой Espruino Pixl.js по беспроводному протоколу Bluetooth добавьте и настройте в Google Chrome среду программирования Espruino Web IDE.
На плате пристутсвтует физический порт USB, но он предназначен только для питания платформы. В итоге, для коммуникации с компьютером нам понадобиться USB-UART преобразователь, а чтобы избавиться от проводов используйте переходник Troyka Slot Shield.
Для работы с платой Espruino Pixl.js добавьте и настройте в Google Chrome среду программирования Espruino Web IDE.
Рассмотрим несколько примеров с платформой Pixl.js.
Во всех традициях DIY, мигнём светодиодом на 13 пине.
Так как на платформе отсутвует встроенный светодиод, используем дополнительную расспыху:
Прошейти платформу скриптом ниже.
// переменная состояния светодиода var state = false; // каждую секунду переключаем светодиод на пине D13 setInterval(function() { state = !state; D13.write(state); }, 1000);
Если вам скучно и неинтересно собирать схемы на макетке, используйте нашу экосистему Troyka-модулей: проапдейтим проект маячок на модулях.
Так как на платформе отсутвует встроенный светодиод, используем дополнительную расспыху:
Прошейти платформу аналогичным скриптом проекта «маячок».
// переменная состояния светодиода var state = false; // каждую секунду переключаем светодиод на пине D13 setInterval(function() { state = !state; D13.write(state); }, 1000);
Платформа Pixl.js может похвастаться встроенным монохромным LCD-дисплеем с разрешением 128×64 пикселя. Разработчики платы также установили на платформу четыре пользовательских кнопки. Весь этот сет даёт возможность создавать простые игры на Pixl.js прямо из коробки без дополнительных комплектующих. Восоздадим игру из поиска Google, которая появляется при отсутсвии интренет соединения.
var BTNL = BTN4; var BTNR = BTN3; var BTNU = BTN1; // Images can be added like this in Espruino v2.00 var IMG = { rex: [ Graphics.createImage(` ######## ########## ## ####### ########## ########## ########## ##### ######## # ##### # ####### ## ########## ### ######### # ############## ############## ############ ########### ######### ####### ### ## ## # # ## `), Graphics.createImage(` ######## ########## ## ####### ########## ########## ########## ##### ######## # ##### # ####### ## ########## ### ######### # ############## ############## ############ ########### ######### ####### ### ## ## ## # ## `), Graphics.createImage(` ######## # ###### # # ###### # ###### ########## ########## ##### ######## # ##### # ####### ## ########## ### ######### # ############## ############## ############ ########### ######### ####### ### ## ## # # # ## ## `), ], cacti: [ Graphics.createImage(` ## #### #### #### #### #### # # #### ### ### #### ### ### #### ### ### #### ### ### #### ### ### #### ### ### #### ### ### #### ### ########### ######### #### #### #### #### #### #### #### #### `), Graphics.createImage(` ## ## # ## ## ## # ## ## # ## ## # ## ## # ##### # #### # ##### #### ## ## ## ## ## ## ## `), ], }; IMG.rex.forEach((i) => (i.transparent = 0)); IMG.cacti.forEach((i) => (i.transparent = 0)); var cacti, rex, frame; function gameStart() { rex = { alive: true, img: 0, x: 10, y: 0, vy: 0, score: 0, }; cacti = [{ x: 128, img: 1 }]; var random = new Uint8Array((128 * 3) / 8); for (var i = 0; i < 50; i++) { var a = 0 | (Math.random() * random.length); var b = 0 | (Math.random() * 8); random[a] |= 1 << b; } IMG.ground = { width: 128, height: 3, bpp: 1, buffer: random.buffer }; frame = 0; setInterval(onFrame, 50); } function gameStop() { rex.alive = false; rex.img = 2; // dead clearInterval(); setTimeout(function () { setWatch(gameStart, BTNU, { repeat: 0, debounce: 50, edge: "rising" }); }, 1000); setTimeout(onFrame, 10); } function onFrame() { g.clear(); if (rex.alive) { frame++; rex.score++; if (!(frame & 3)) rex.img = rex.img ? 0 : 1; // move rex if (BTNL.read() && rex.x > 0) rex.x--; if (BTNR.read() && rex.x < 20) rex.x++; if (BTNU.read() && rex.y == 0) rex.vy = 4; rex.y += rex.vy; rex.vy -= 0.2; if (rex.y <= 0) { rex.y = 0; rex.vy = 0; } // move cacti var lastCactix = cacti.length ? cacti[cacti.length - 1].x : 127; if (lastCactix < 128) { cacti.push({ x: lastCactix + 24 + Math.random() * 128, img: Math.random() > 0.5 ? 1 : 0, }); } cacti.forEach((c) => c.x--); while (cacti.length && cacti[0].x < 0) cacti.shift(); } else { g.drawString("Game Over!", (128 - g.stringWidth("Game Over!")) / 2, 20); } g.drawLine(0, 60, 127, 60); cacti.forEach((c) => g.drawImage(IMG.cacti[c.img], c.x, 60 - IMG.cacti[c.img].height)); // check against actual pixels var rexx = rex.x; var rexy = 38 - rex.y; if ( rex.alive && (g.getPixel(rexx + 0, rexy + 13) || g.getPixel(rexx + 2, rexy + 15) || g.getPixel(rexx + 5, rexy + 19) || g.getPixel(rexx + 10, rexy + 19) || g.getPixel(rexx + 12, rexy + 15) || g.getPixel(rexx + 13, rexy + 13) || g.getPixel(rexx + 15, rexy + 11) || g.getPixel(rexx + 17, rexy + 7) || g.getPixel(rexx + 19, rexy + 5) || g.getPixel(rexx + 19, rexy + 1)) ) { return gameStop(); } g.drawImage(IMG.rex[rex.img], rexx, rexy); var groundOffset = frame & 127; g.drawImage(IMG.ground, -groundOffset, 61); g.drawImage(IMG.ground, 128 - groundOffset, 61); g.drawString(rex.score, 127 - g.stringWidth(rex.score)); g.flip(); } gameStart();
Теперь используя встроенные кнопки на плате Pixl, помогите динозавру Рексу бежать по пустныни и не врезаться в кактусы.
На плате расположен монохромный LCD-дисплей JHD12864-G176BSW с разрешением 128×64 пикселей. Матрица экрана подключена к встроенному чипу ST7567, который занимается отрисовкой и другими параметрами дисплея. С основным контроллером, в нашем случае модуль MQBT42Q, дисплей общается по интерфейсу SPI.
Экран пригодиться для отображения показаний сенсоров и модулей в виде текста, графиков и диаграмм.
Для работы с дисплеем используйте библиотеку Espruino Graphics, в которой собраны примеры отрисовки графики от пикселя до полноценных битовых изображений.
Платформа Espruino Pixl.js выполнена на модуле MDBT42Q, который включает в себя 32-битный микроконтроллер Nordic nRF52840 на архитектуре ARM Cortex-M4 с тактовой частотой 64 МГц, 512 КБ Flash-памяти и 64 КБ SRAM-памяти.
Чип Nordic nRF52840 так же обеспечивает связь Bluetooth v5.0 в диапазоне 2,4 ГГц и поддерживает энергосберегающий протокол Bluetooth Low Energy (BLE). Всё это позволяет прошивать и отлаживать платформу Pixl.js через Espruino Web IDE прямо по воздуху.
На плате расположено четыре кнопки, которые пригодятся для создания и теста простых программ, без подключения дополнительных тактильных сенсоров.
Имя кнопки | Назначение |
---|---|
BTN1 | Пользовательская кнопка подключена к H1 цифровому пину микроконтроллера. Используйте определение BTN1 для работы с кнопкой. |
BTN2 | Пользовательская кнопка подключена к H2 цифровому пину микроконтроллера. Используйте определение BTN2 для работы с кнопкой. |
BTN3 | Пользовательская кнопка подключена к H3 цифровому пину микроконтроллера. Используйте определение BTN3 для работы с кнопкой. |
BTN4 | Пользовательская кнопка подключена к H4 цифровому пину микроконтроллера. Используйте определение BTN4 для работы с кнопкой. |
Кнопка BTN1 также может переводить плату в DFU-режим. Это позволит перепрошить или обновить интерпретатор JavaScript в микроконтроллер без дополнительного программатора. Для перевода в DFU-режим:
Порт micro-USB предназначен для питания платформы Pixl.js через кабель USB (A — Micro USB) с блоком питания на 5 вольт.
Если вы хотите не только питать, но и прошивать плату по кабелю, используйте внешний USB-UART преобразователь. Подробности читайте в разделе проводное подключение платформы Pixl.js.
Линейный понижающий регулятор напряжения MIC5225-3V3 обеспечивает питание дисплея, модуля MDBT42Q и другой логики платы при подключении питания через пин VIN
. Диапазон входного напряжения от 3,6 до 16 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.
На плате расположен отсек для батарейки CR2032, которая обеспечивает работу платформы в портативном режиме. В автономном варианте батарейка сможет протянуть и обеспечить питание платфомы Pixl.js до 20 дней.
Колодки SWD предназначены для подключения программатора и отладчика ST-Link.
Плата Espruino Pixl.js выполнена в формфакторе Arduino R3, что даёт полную совместимость с Arduino Shields.
В отличие от большинства плат Arduino, родным напряжением Espruino Pixl.js является 3,3 В, а не 5 В. Выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Более высокое напряжение может повредить микроконтроллер!
Будьте внимательны при подключении периферии: убедитесь, что она может корректно функционировать в этом диапазоне напряжений.
D0
–D13
и A0
–A5
A0
–A5
, D3
и D4
Каждый пин ввода-вывода платформы поддерживает аппаратные интерфейсы.
Интерфейс | Количество | Назначение |
---|---|---|
I²C | 1 | Используется для общения с периферией по параллельному интерфейсу «I²C». |
SPI | 1 | Для общения с периферией по последовательному интерфейсу «SPI». |
UART/Serial | 1 | Для общения с периферией по интерфейсу «UART». |
Дисплей