http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

Главная Новости

Дисплей Nextion HMI. Работа с китайской версией TJC

Опубликовано: 24.08.2018

Как уже известно из предыдущих уроков, к Ардуино можно подключить множество разных дисплеев. Для самых простых проектов пригодится символьный ЖК дисплей 1602, который мы уже изучили на одном из уроков . Для вывода простейшей монохромной графики можно использовать дисплей от телефона Nokia 5110 , либо более современный OLED дисплей . Ресурсов Ардуино хватает даже на цветные дисплеи с TFT матрицей.

Однако, чем сложнее дисплей, тем тяжелее приходится нашей Ардуино. Несмотря на самые изощренные и быстрые библиотеки, ресурсов микроконтроллера Atmega328 едва хватает для работы с цветной TFT матрицей. Для полезного кода остается менее половины флеш-памяти контроллера. Что делать в такой ситуации?

1. Технология HMI

Выход есть. Собственно, первое что приходит на ум — это наделить графический дисплей собственным микроконтроллером, который бы выделил весь свой вычислительный ресурс на обработку графики. Такой готовый модуль можно бы было подключать к Ардуино по одному из стандартных интерфейсов, и обмениваться с ним унифицированным командами.

Именно такой модуль мы и разберем на этом уроке. Называется этот графический модуль — Nextion HMI . Сокращение HMI означает Человеко-Машинный Интерфейс. Разработчики этого модуля предполагают, что именно такие устройства будут использоваться в элементах «умного дома», и разного рода гаджетах.

Существуют версии Nextion с различной диагональю, а также с версии с тачскрином. В нашем уроке мы используем самый простой дисплей с диагональю 2.2 дюйма и разрешением 320×240, без тачскрина.

2. Создание интерфейса

Как уже было сказано, дисплей Nextion имеет свой собственный контроллер, который отвечает за отрисовку графики. Чтобы этому контроллеру было что рисовать, мы должны заранее создать графические образы, связать их с командами, и загрузить всё это в память дисплея. Для этих целей мы воспользуемся специальным редактором интерфейсов, который был разработан командой Nextion. Скачать редактор можно на официальном сайте .

Для русификации редактора следует заменить файл cs.lang в папке с редактором. Переведенный файл можно взять тут:

http://git.robotclass.ru/download/NextionEditor

Наша задача будет состоять в том, чтобы сделать графический интерфейс для отображения показаний акселерометра. Соответственно, нам понадобится создать какой-то красивый фон, разместить на нем поля для вывода чисел. Также хотелось бы добавить и какие-нибудь компоненты для визуализации показаний, например шкальные индикаторы.

Итак, запускаем редактор. Перед нами появляется главная форма.

1) Первое что мы сделаем — создадим новый проект. Жмем меню «Файл/Новый», выбираем папку где будет храниться файл проекта и его имя, например, test.hmi . Затем выбираем в появившемся окне подходящий формат и ориентацию дисплея.

2) Теперь добавим фон нашего интерфейса. Жмем кнопку «Добав.» (Add) в разделе Изображения .

В появившемся окне выбираем файл картинки с разрешением 320×240. Для урока мы нарисовали свой фон, в виде трех оранжевых прямоугольных областей.

3) Добавляем в интерфейс компонент «Изображение».

По-умолчанию, компонент размещается в левом верхнем углу. Не будем его никуда двигать, и перейдем к настройкам компонента.

4) Ассоциируем компонент и ранее добавленную картинку. Для этого, в разделе настроек компонента жмем на параметр  pic,  и выбираем единственную в списке картинку.

5) Аналогичным образом, добавляем компонент «Индикатор выполнения» . Обычно этот блок служит для отображения статуса загрузки данных, но мы используем его для визуализации показаний с нашего датчика.

Параметры bco и pco задают цвет фона элемента и цвет, которым заполняется индикатор. В нашем случае фон белый, и сам индикатор синий. Параметр val  определяет степень наполнения индикатора, и варьируется от 0 до 100. Именно этот параметр мы и будем менять с помощью Arduino. Кстати, можно менять любой параметр, отмеченный зеленым цветом.

Остальные параметры отвечают за положение элемента на дисплее: x и y , а также за его размеры: w и h .

6) Добавляем на дисплей еще два таких же индикатора и настраиваем их. Затем добавляем компонент «стрелка» (gauge).

Стрелка — это что-то вроде стрелки на спидометре автомобиля. Имеет диапазон значений от 0 до 360. Размещаем её в верхней правой части дисплея. Чтобы у стрелки был красивый круглый фон (можно и циферблат нарисовать), мы переключим параметр  sta в режим  crop image . Потребуется заполнить параметр picc;  укажем там ту же картинку, что и для фона. Crop image означает, что фон компонента станет прозрачным, и через него будет просвечивать указанная в параметре picc картинка.

7) Перед тем, как добавить числовые поля, создадим шрифт. У дисплея нет такого же хранилища шрифтов, как в MS Windows, и он не умеет пользоваться стандартными файлами ttf. Чтобы добавить шрифт, нажмем кнопку «Добав.» (Add) в блоке «Шрифты», который находится в левой части редактора.

Задаем высоту шрифта, жирность. Указываем имя шрифта. При изменении каждого параметра, в маленьком черном квадратике будет меняться написание буквы X. Не очень удобная настройка, но что поделать. Наконец, в поле «Имя шрифта» записываем подходящее название латинскими буквами и жмем «Создать шрифт». Генератор пробежится по всем буквам векторного шрифта, и создаст их растровые изображения, который мы потом загрузим в память дисплея вместе с графикой.

8) Добавляем на форму три компонента «Число».

В настройках компонента указываем номер шрифта font.  У нас создан пока только один шрифт, так что его номер будет — 0 . Параметр val отвечает за содержимое поля, его мы будем задавать через Arduino. В примере мы так же поменяли цвет и фон компонента.

9) Последний компонент, который мы разместим на нашем дисплее — «Текст» . Мы не будем менять его содержимое, просто что-нибудь напишем в параметре text .

10) Наконец, скомпилируем все что мы сделали в файл, который затем отправится в память дисплея. Жмем кнопку «Компилировать» (Compile).

Файл имеет расширение tft и хранится в папке, которую можно открыть через меню «Файл/Открыть папку с tft файлами».

С интерфейсом всё, переходим к самой ответственной части.

3. Nextion и TJC

Nextion HMI — марка дисплея для европейского рынка. В Китае существует версия для внутреннего рынка, которая носит название TJC (по названию чипа). С точки зрения электроники, они полностью идентичны. Как это обычно бывает, версия для Европы стоит значительно дороже. Подвох тут в том, что европейский редактор не позволяет загружать прошивку в китайский дисплей. Делать же интерфейс в китайском редакторе, немного неудобно.

Чтобы решить эту проблему, энтузиасты разработали различные варианты программ , которые позволяют загружать любую прошивку в любой дисплей, будь то Nextion или TJC. Одной такой программой, которую мы немного модернизировали, мы и воспользуемся.

4. Загрузка файла интерфейса

1) Скачиваем python-скрипт из репозитория на github: https://github.com/makeitlab/software_tools/tree/master/TJCUpload

2) Чтобы его запустить, потребуется установить интерпретатор  Python 2.7 .

3) После установки python, установим библиотеку для работы с последовательным портом —   pyserial .

4) Скрипт имеет несколько важных параметров, которые хранятся в отдельном файле config.py:

Последовательный порт, через который будет происходить загрузка. Меняем на актуальный:

PORT = ‘COM6’

Загрузка прошивки идет в два этапа, с разной скоростью. Обычно эти параметры менять не следует.

BAUDCOMM = 9600

BAUDUPLOAD = 115200

Идентификатор дисплея, который указан либо на самом дисплее, либо на коробке. В уроке мы использовали TJC3224T022.

CHECK_MODEL = ‘TJC3224T022’

Наконец, параметр определяющий временную задержку в протоколе обмена. Этот параметр нужно будет изменить только если процедура загрузки не удастся.

BAUDRATE_SWITCH_TIMEOUT = 0.5

5) Загружать прошивку будем через USB-UART мост, например такой:

Схема соединения моста и дисплея:

Nextion/TJC GND VCC RX TX
USB-UART GND +5V TX0 RX1

6) Скопируем скомпилированный файл интерфейса tft в папку со скриптом, и запустим скрипт через командную строку:

c:\путь_к_python\python.exe upload.py test.tft

7) После запуска скрипта на дисплее запустится процедура загрузки с индикатором хода выполнения. Если всё пошло как надо, то дисплей напишет об успешном выполнении процедуры и перезагрузится. Python-скрипт тоже отчитается о проделанной работе:

Если загрузка зависла на 0%, значит следует изменить тот самый временной параметр в настройках. Рекомендую присвоить ему значение 0.05 .

Также предстоит починить прошивку дисплея, иначе он не даст повторить процедуру. Для этого понадобится microSD карта. Загружаем на карту подходящую прошивку из папки со скриптом «TJCUpload/Basic Recovery». Эта прошивка минимальная, и служит лишь для ремонта. Вставляем флешку в дисплей, подаем питание. Ждем несколько секунд, пока прошивка не загрузится автоматически.

После этой процедуры можно повторить загрузку подготовленной ранее прошивки, не забыв изменить указанный параметр в файле настроек скрипта.

5. Программа

Приступим к написанию программы для управления HMI дисплеем. Каждый компонент имеет свой идентификатор. Индикаторы выполнения, размещенные на форме: j0, j1 и j2. Числовые поля: n0, n1 и n2. Компонент «стрелка» получил идентификатор z0.

Чтобы изменить параметр val у компонента, нам нужно передать в последовательный порт команду вида:

j0.val=44

Каждая команда должна завершаться тремя байтами 0xFF. Тестовая программа будет менять значение индикатора j0 в цикле.

void setValueJ(uint32_t number){ char buf[10] = {0}; String cmd; utoa(number, buf, 10); cmd += "j0.val="; cmd += buf; sendCommand(cmd.c_str()); } void sendCommand( const char* cmd ){ Serial.print(cmd); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); } void setup() { Serial.begin(9600); delay(2000); sendCommand( "" ); sendCommand( "page 0" ); } void loop() { for(int i=0; i<100; i++){ setValueJ(i); delay(10); } }

Загружаем программу на Ардуино, и подключаем дисплей по схеме:

Nextion/TJC GND VCC RX TX
Ардуино Уно GND +5V 1 0

Подаем питание на Ардуино и наблюдаем движение самого верхнего индикатора.

Теперь добавим в скетч управление всеми остальными компонентами.

#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_ADXL345_U.h> Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); float acc_lpf[3] = {0,0,0}; void setValueJ(uint8_t jn, uint32_t number){ char buf1[3] = {0}; char buf2[10] = {0}; String cmd; utoa(jn, buf1, 3); utoa(number, buf2, 10); cmd += "j"; cmd += buf1; cmd += ".val="; cmd += buf2; sendCommand(cmd.c_str()); } void setValueN(uint8_t nn, uint32_t number){ char buf1[3] = {0}; char buf2[10] = {0}; String cmd; utoa(nn, buf1, 3); utoa(number, buf2, 10); cmd += "n"; cmd += buf1; cmd += ".val="; cmd += buf2; sendCommand(cmd.c_str()); } void setValueZ(uint8_t zn, uint32_t number){ char buf1[3] = {0}; char buf2[10] = {0}; String cmd; utoa(zn, buf1, 3); utoa(number, buf2, 10); cmd += "z"; cmd += buf1; cmd += ".val="; cmd += buf2; sendCommand(cmd.c_str()); } void sendCommand( const char* cmd ){ Serial.print(cmd); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); } void setup() { Serial.begin(9600); accel.begin(); accel.setRange(ADXL345_RANGE_8_G); delay(2000); sendCommand( "" ); sendCommand( "page 0" ); } void loop() { int r[3]; acc_lpf[0] = acc_lpf[0]*0.7 + accel.getX()*0.3; acc_lpf[1] = acc_lpf[1]*0.7 + accel.getY()*0.3; acc_lpf[2] = acc_lpf[2]*0.7 + accel.getZ()*0.3; r[0] = int((acc_lpf[0]+500+61)/10); r[1] = int((acc_lpf[1]+500+26)/10); r[2] = int(((acc_lpf[2]-1500)+73+500)/10); setValueZ(0, r[0]*3); setValueJ(0, r[0]); setValueN(0, r[0]); setValueJ(1, r[1]); setValueN(1, r[1]); setValueJ(2, r[2]); setValueN(2, r[2]); delay(1); }

Библиотеки для работы с акселерометром можно скачать отсюда:

https://github.com/adafruit/Adafruit_ADXL345

https://github.com/adafruit/Adafruit_Sensor

Загружаем скетч на дисплей, и крутим акселерометр вокруг осей.

Ну и небольшое видео, если у вас не грузится анимированный gif:

Заключение

На этом уроке мы разобрали работу Nextion/TJC дисплея с разрешением 320×240 без тачскрина — это самый простой вариант из линейки. Разумеется, гораздо интереснее будет поработать с компонентами, отвечающими за реакцию тачскрина. На следующем уроке мы изучим именно такой продвинутый вариант дисплея, и попробуем поработать со слайдбарами и кнопками.  Также построим график с помощью специального компонента, разберемся с таймером и переменными. Успехов!

uk

Як уже відомо з попередніх уроків, до Ардуїно можна підключити безліч різних дисплеїв. Для найпростіших проектів знадобиться символьний РК дисплей 1602, який ми вже вивчили на одному з уроків. Для відображення найпростішої монохромної графіки можна використовувати дисплей від телефону Nokia 5110 або більш сучасний OLED дисплей. Ресурсів Ардуїно вистачає навіть на кольорові дисплеї з матрицею TFT.

Однак, чим складніше дисплей, тим важче доводиться нашій Ардуїно. Незважаючи на найвитонченіші та найшвидші бібліотеки, ресурсів мікроконтролера Atmega328 ледве вистачає для роботи з кольоровою TFT матрицею. Для корисного коду залишається менше половини флеш-пам'яті контролера. Що робити у такій ситуації?

1. Технологія HMI

Вихід є. Власне, перше що спадає на думку — це наділити графічний дисплей власним мікроконтролером, який би виділив весь свій обчислювальний ресурс на обробку графіки. Такий готовий модуль можна було б підключати до Ардуїно по одному зі стандартних інтерфейсів, і обмінюватися з ним уніфікованим командами.

Саме такий модуль ми розберемо на цьому уроці. Називається цей графічний модуль - Nextion HMI. Скорочення HMI означає «Людино-Машинний Інтерфейс». Розробники цього модуля припускають, що саме такі пристрої будуть використовуватися в елементах «розумного дому» та різного роду гаджетах.

Існують версії Nextion з різною діагоналлю, а також версії з тачскрином. У нашому уроці ми використовуємо найпростіший дисплей з діагоналлю 2.2 дюйма та роздільною здатністю 320×240, без тачскріну.

2. Створення інтерфейсу

Як уже було сказано, дисплей Nextion має свій власний контролер, який відповідає за відображення графіки. Щоб цьому контролеру було що малювати, ми повинні заздалегідь створити графічні образи, зв'язати їх з командами, і завантажити все це в пам'ять дисплея. Для цього ми скористаємося спеціальним редактором інтерфейсів, який був розроблений командою Nextion. Завантажити редактор можна на офіційному сайті.

Для русифікації редактора слід замінити файл cs.lang у папці з редактором. Перекладений файл можна взяти тут:

http://git.robotclass.ru/download/NextionEditor

Наше завдання полягає в тому, щоб зробити графічний інтерфейс для відображення показань акселерометра. Відповідно, нам знадобиться створити якесь гарне тло, розмістити на ньому поля для виведення чисел. Також хотілося б додати і якісь компоненти для візуалізації показань, наприклад шкальні індикатори.

Отже, запускаємо редактор. Перед нами постає головна форма.

1) Перше, що ми зробимо — створимо новий проект. Тиснемо меню «Файл/Новий», вибираємо папку де зберігатиметься файл проекту та його ім'я, наприклад, test.hmi . Потім вибираємо у вікні відповідний формат і орієнтацію дисплея.

2) Тепер додамо тло нашого інтерфейсу. Тиснемо кнопку «Добав.» (Add) у розділі Зображення .

У вікні вибираємо файл картинки з роздільною здатністю 320×240. Для уроку ми намалювали свій фон, у вигляді трьох помаранчевих прямокутних областей.

3) Додаємо в інтерфейс компонент «Зображення».

За замовчуванням компонент розміщується в лівому верхньому кутку. Не будемо його нікуди рухати і перейдемо до налаштувань компонента.

4) Асоціюємо компонент і раніше додану картинку. Для цього, в розділі налаштувань компонента тиснемо на параметр pic, і вибираємо єдину в списку картинку.

5) Аналогічно додаємо компонент «Індикатор виконання» . Зазвичай цей блок служить для відображення статусу завантаження даних, але ми використовуємо його для візуалізації показань з нашого датчика.

Параметри bco та pco задають колір фону елемента та колір, яким заповнюється індикатор. У нашому випадку фон білий і сам індикатор синій. Параметр val  визначає ступінь наповнення індикатора, і варіюється від 0 до 100. Саме цей параметр ми змінюватимемо за допомогою Arduino. До речі, можна змінювати будь-який параметр, позначений зеленим кольором.

Інші параметри відповідають за положення елемента на дисплеї: x та y, а також за його розміри: w і h .

6) Додаємо на дисплей ще два такі ж індикатори і налаштовуємо їх. Потім додаємо компонент "стрілка" (gauge).

Стрілка - це щось на зразок стрілки на спідометрі автомобіля. Має діапазон значень від 0 до 360. Розміщуємо її у верхній правій частині дисплея. Щоб у стрілки був красивий круглий фон (можна і циферблат намалювати), ми перемкнемо параметр sta в режим crop image . Потрібно заповнити параметр picc; вкажемо там ту саму картинку, що й для фону. Crop image означає, що фон компонента стане прозорим, і через нього просвічуватиме вказана в параметрі picc картинка.

7) Перед тим, як додати числові поля, створимо шрифт. У дисплея немає такого ж сховища шрифтів, як у MS Windows, і він не вміє користуватися стандартними файлами ttf. Щоб додати шрифт, натисніть кнопку «Додати». (Add) у блоці «Шрифти», розташованому в лівій частині редактора.

Задаємо висоти шрифту, жирність. Вказуємо ім'я шрифту. При зміні кожного параметра, в маленькому чорному квадратику змінюватиметься написання літери X. Не дуже зручне налаштування, але що вдієш. Нарешті, у полі «Ім'я шрифту» записуємо відповідну назву латинськими літерами і тиснемо «Створити шрифт». Генератор пробіжиться всіма буквами векторного шрифту, і створить їх растрові зображення, який ми потім завантажимо в пам'ять дисплея разом з графікою.

8) Додаємо на форму три компоненти «Число».

У налаштуваннях компонента вказуємо номер шрифту font. У нас створено лише один шрифт, так що його номер буде — 0 . Параметр val відповідає за вміст поля, його ми будемо задавати через Arduino. У прикладі ми також змінили колір і тло компонента.

9) Останній компонент, який ми розмістимо на нашому дисплеї — «Текст» . Ми не змінюватимемо його вміст, просто що-небудь напишемо в параметрі text .

10) Нарешті, скомпілюємо все що ми зробили у файл, який потім відправиться в пам'ять дисплея. Тиснемо кнопку «Компілювати» (Compile).

Файл має розширення tft і зберігається в папці, яку можна відкрити за допомогою меню «Файл/Відкрити папку з tft файлами».

З інтерфейсом все, переходимо до найвідповідальнішої частини.

3. Nextion та TJC

Nextion HMI – марка дисплея для європейського ринку. У Китаї існує версія для внутрішнього ринку, яка має назву TJC (за назвою чіпа). З погляду електроніки вони повністю ідентичні. Як це зазвичай буває, версія для Європи коштує значно дорожче. Підступ тут у тому, що європейський редактор не дозволяє завантажувати прошивку в китайський дисплей. Робити ж інтерфейс у китайському редакторі трохи незручно.

Щоб вирішити цю проблему, ентузіасти розробили різні варіанти програм, які дозволяють завантажувати будь-яку прошивку в будь-який дисплей, будь то Nextion або TJC. Однією такою програмою, яку ми трохи модернізували, ми і скористаємося.

4. Завантаження файлу інтерфейсу

1) Завантажуємо python-скрипт з репозиторію на github: https://github.com/makeitlab/software_tools/tree/master/TJCUpload

2) Щоб його запустити, потрібно встановити інтерпретатор Python 2.7 .

3) Після встановлення python, встановимо бібліотеку для роботи з послідовним портом -   pyserial .

4) Скрипт має кілька важливих параметрів, які зберігаються в окремому файлі config.py:

Послідовний порт, через який відбувається завантаження. Змінюємо на актуальне:

PORT = 'COM6'

Завантаження прошивки йде у два етапи, з різною швидкістю. Зазвичай ці параметри міняти не слід.

BAUDCOMM = 9600

BAUDUPLOAD = 115 200

Ідентифікатор дисплея, який вказаний або на самому дисплеї, або на коробці. В уроці ми використали TJC3224T022.

CHECK_MODEL = 'TJC3224T022'

Нарешті, параметр, який визначає тимчасову затримку в протоколі обміну. Цей параметр потрібно змінити тільки якщо процедура завантаження не вдасться.

BAUDRATE_SWITCH_TIMEOUT = 0.5

5) Завантажувати прошивку будемо через USB-UART міст, наприклад такий:

Схема з'єднання моста та дисплея:

Nextion/TJC GND VCC RX TX USB-UART GND +5V TX0 RX1

6) Скопіюємо скомпільований файл інтерфейсу tft в папку зі скриптом, і запустимо скрипт через командний рядок:

c:\шлях_до_python\python.exe upload.py test.tft

7) Після запуску скрипта на дисплеї запуститься процедура завантаження з індикатором ходу виконання. Якщо все пішло як слід, то дисплей напише про успішне виконання процедури та перезавантажиться. Python-скрипт також звітує про виконану роботу:

Якщо завантаження зависло на 0%, то слід змінити цей часовий параметр у налаштуваннях. Рекомендую надати йому значення 0.05 .

Також належить починати прошивку дисплея, інакше він не дасть повторити процедуру. Для цього знадобиться microSD картка. Завантажуємо на карту підходящу прошивку з папки зі скриптом «TJCUpload/Basic Recovery». Ця прошивка мінімальна і служить лише для ремонту. Вставляємо флешку у дисплей, подаємо живлення. Чекаємо кілька секунд, доки прошивка не завантажиться автоматично.

Після цієї процедури можна повторити завантаження підготовленої раніше прошивки, не забувши змінити вказаний параметр у файлі налаштувань скрипта.

5. Програма

Приступимо до написання програми для управління HMI дисплеєм. Кожен компонент має власний ідентифікатор. Індикатори виконання, розміщені на формі: j0, j1 та j2. Числові поля: n0, n1 та n2. Компонент стрілки отримав ідентифікатор z0.

Щоб змінити параметр val у компонента, нам потрібно передати в послідовний порт команду виду:

j0.val=44

Кожна команда має завершуватися трьома байтами 0xFF. Тестова програма змінюватиме значення індикатора j0 у циклі.

void setValueJ(uint32_t number){ char buf[10] = {0}; String cmd; utoa(number, buf, 10); cmd += "j0.val="; cmd += buf; sendCommand(cmd.c_str()); } void sendCommand (const char * cmd) { Serial.print(cmd); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); } void setup() { Serial.begin(9600); delay(2000); sendCommand(""); sendCommand( "page 0"); } void loop() { for(int i=0; i<100; i++){ setValueJ(i); delay(10); } }

Завантажуємо програму на Ардуїно та підключаємо дисплей за схемою:

Nextion/TJC GND VCC RX TX Ардуїно Уно GND +5V 1 0

Подаємо харчування на Ардуїно і спостерігаємо рух найвищого індикатора.

Тепер додамо в скетч управління всіма іншими компонентами.

#include #include #include Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); float acc_lpf[3] = {0,0,0}; void setValueJ(uint8_t jn, uint32_t number){ char buf1[3] = {0}; char buf2 [10] = {0}; String cmd; utoa(jn, buf1, 3); utoa(number, buf2, 10); cmd + = "j"; cmd += buf1; cmd +=".val="; cmd += buf2; sendCommand(cmd.c_str()); } void setValueN(uint8_t nn, uint32_t number){ char buf1[3] = {0}; char buf2 [10] = {0}; String cmd; utoa(nn, buf1, 3); utoa(number, buf2, 10); cmd + = "n"; cmd += buf1; cmd +=".val="; cmd += buf2; sendCommand(cmd.c_str()); } void setValueZ(uint8_t zn, uint32_t number){ char buf1[3] = {0}; char buf2 [10] = {0}; String cmd; utoa(zn, buf1, 3); utoa(number, buf2, 10); cmd + = "z"; cmd += buf1; cmd +=".val="; cmd += buf2; sendCommand(cmd.c_str()); } void sendCommand (const char * cmd) { Serial.print(cmd); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); } void setup() { Serial.begin(9600); accel.begin(); accel.setRange(ADXL345_RANGE_8_G); delay(2000); sendCommand(""); sendCommand( "page 0"); } void loop() { int r[3]; acc_lpf[0] = acc_lpf[0]*0.7 + accel.getX()*0.3; acc_lpf[1] = acc_lpf[1]*0.7 + accel.getY()*0.3; acc_lpf[2] = acc_lpf[2]*0.7 + accel.getZ()*0.3; r[0] = int((acc_lpf[0]+500+61)/10); r[1] = int((acc_lpf[1]+500+26)/10); r[2] = int(((acc_lpf[2]-1500)+73+500)/10); setValueZ(0, r[0]*3); setValueJ(0, r[0]); setValueN(0, r[0]); setValueJ(1, r[1]); setValueN(1, r[1]); setValueJ(2, r[2]); setValueN(2, r[2]); delay(1); }

Бібліотеки для роботи з акселерометром можна завантажити звідси:

https://github.com/adafruit/Adafruit_ADXL345

https://github.com/adafruit/Adafruit_Sensor

Завантажуємо скетч на дисплей і крутимо акселерометр навколо осей.

Ну і невелике відео, якщо у вас не вантажиться анімований gif:

Висновок

На цьому уроці ми розібрали роботу Nextion/TJC дисплея з роздільною здатністю 320×240 без тачскріну — це найпростіший варіант з лінійки. Зрозуміло, набагато цікавіше буде попрацювати з компонентами, що відповідають за реакцію тачскріну. На наступному уроці ми вивчимо саме такий просунутий варіант дисплея, і спробуємо попрацювати зі слайдбарами і кнопками. Також побудуємо графік за допомогою спеціального компонента, розберемося з таймером та змінними. Успіхів!

видео Дисплей Nextion HMI. Работа с китайской версией TJC | видеo Дисплей Nextion HMI. Рaбoтa с китaйскoй версией TJC
Карта
rss