Графічний замок на дисплеї Nextion HMI

Нещодавно мені попав в руки класний дисплей Nextion Enhanced HMI (NX8048K070_011C) діагоналлю 7 дюймів та ємнісним тачскрином. Нижче я привів коротку таблицю з характеристиками та фотографію дисплея. Посилання на дисплей: https://www.itead.cc/nextion-nx8048k070-011r-011c.html

Діагональ екрану, дюйми 7
Розмір внутрішньої пам'яті, МБ 32
Розмір оперативної пам'яті, байт 8192
Розмір EEPROM пам'яті, байт 1024
Роздільна здатність дисплея 800х480
Виводи, шт 8GPIO
Виводи ШІМ, шт 4
Тип сенсора ємнісний

Однак мені дісталася не просто екран, а повноцінна збірка в зручному пластиковому корпусі для вбудовування куди-небудь. Хочеться відзначити якісний підхід у виготовленні корпусу, навіть не забули додати гумову прокладку для більш плавного та герметичного з'єднання. І першим ділом я, звичайно ж, розібрав його і подивився всередину.

Тут все за стандартною схемою для екранів Nextion. ПЛІС, мікроконтролер на ARM мікросхеми пам'яті, годинники тощо. Схема вивірена до дрібниць і це приємно, за що дякую!

І так, я вже якось розповідав про дисплеї Nextion ось у цьому відео: http://youtu.be/gNqT4LRnNC4

Проте все це були загальні слова. Сьогодні я хочу показати вам процес створення графічного інтерфейсу для замка на конкретному прикладі. В кінці статті буде прикріплено ролик. У ньому я також розповім, що і як я робив, але і ще там ви зможете побачити демонстрацію роботи пристрою. Отже, яка моя основна думка в наступному.

В Інтернеті гуляє безліч електричних схем, заснованих на використанні електрозамків від автомобілів. Це дуже цікаво і класно, але я не хочу відкривати двері через Wifi, а хочу використовувати для цього щось красиве та зрозуміле. Тут я згадую про дисплеї Nextion. Далі склалася концепція. Дисплеї Nextion мають виводи GPIO, значить, при правильних маніпуляціях користувача на одному з цих виводів буде з'являтися логічна одиниця, яка відкриває двері або ще щось. В додаток з 8 GPIO виводів 4 є ШІМ виводами з регульованою частотою та скважністю. Залишилося придумати інтерфейс.

У пошуках натхнення я згадав невиконувану для мене в дитинстві загадку з першої частини гри Silent Hill, в якій потрібно було вводити кодову послідовність на піаніно (внизу шматок скріншота з гри).

Я почав шукати і знайшов проект одного хлопця, який, використовуючи ШІМ вивід дисплея, зробив сенсорне піаніно. Ось посилання, кому цікаво ознайомитися: http://support.iteadstudio.com/support/discussions/topics/11000008626 Справа в тому, що ШІМ виводи у дисплеїв Nextion мають можливість змінювати частоту в діапазоні від 1 Гц до 65536 Гц. На основі цього для кожної ноти зуммер буде пищати зі своєю частотою. Я швидко переглянув його проект і в моїй голові склалася концепція графічного інтерфейсу. Відкриття дверей буде виконуватися при одночасному зажатті 4-х запрограмованих клавіш на піаніно. І тут криється ще один плюс використовуваного дисплея - мультитач. Тепер, коли все продумано, можна приступати до роботи.

Першим кроком потрібно було переробити піаніно під більше роздільну здатність. Скачуємо Nextion Editor, встановлюємо та створюємо проект нашого дисплея. Підгружаємо в проект зображення клавіш піаніно для зручності роботи і підключаємо його на фон сторінки. Далі, у нас є з десяток клавіш. Білі та чорні. Нам необхідно створити потрібну кількість сенсорних зон. Частина цих зон буде на задньому плані, і це будуть білі клавіші. Друга частина буде спереду, і це будуть чорні клавіші.

З чорними все зрозуміло. Створюються сенсорні області прямокутної форми і заливаються чорним кольором, при натисканні зафарбовуються сірим для індикації натискання. А от з білими все складніше. Кожна клавіша буде малюватися з двох прямокутників спеціальними функціями малювання. Над цим довелося трохи попотіти. Нижче я схематично показав поділ клавіш на області. При цьому сенсорна область натискання білої клавіші залишається квадратною, але через те, що білі клавіші нижче чорних на аркуші, реакція на натискання не плутається.

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

Відтворення звуку реалізовано дуже цікаво. У функцію передається номер клавіші, далі йде розрахунок частоти ноти. Отримана частота задає частоту ШІМ виводів. Поки натиснута клавіша, пищить зуммер. Со скважністю ШІМ сигналу можна пов експериментувати, щоб досягти більш приємного вашому вуху звуку. Нижче я привів код відтворення звуку за допомогою 7 GPIO, налаштованого на ШІМ вивід. Я вирішив використовувати слайдер для налаштування скважності ШІМ.

nnote.val=sys0
sys2=b[nnote.val+26].val/65536
pwm7=h0.val  // Set our duty cycle
cfgpio 7,3,0   // enable pwm on IO7
pwmf=b[sys0+26].val%65536*3 // set our pwm frequency
n0.val=b[sys0+26].val%65536*3  // Display our pwm freq in n0
n1.val=h0.val   // Display out Duty cycle in n1
n2.val=sys0   // Display our Key Number in n2
n3.val=b[sys0+26].val%65536 // Display our base note in n3

В результаті у мене вийшла заготовка для моєї ідеї - робоче піаніно. Я підключив до дисплея спеціальну платку розширення, на якій стоїть зуммер і почав випробування.

Все працює. Отриманий проект для Nextion Editor я прикріпив до статті.

Тепер вибираємо 4 випадкові клавіші (можна п’ять, шість кому як зручно), після створюємо глобальну числову змінну, при натисканні потрібних клавіш ця змінна збільшується на одиницю, при відпусканні зменшується на одиницю. Функція відтворення звуку перевіряє, чи дорівнює ця змінна 4, якщо так, то відбувається перехід на сторінку відкриття замка.

На сторінці відкриття дверей вставляємо код в події завантаження сторінки - виставляємо на одному з GPIO логічну одиницю і загоряється світлодіод. Однак треба додати кілька корисних функцій цієї конструкції. По-перше, треба додати час, тому що у дисплея є вбудовані годинники, і гріх ними не користуватися. Далі режим очікування з пониженим енергоспоживанням. І, власне, режим установки на охорону.

Почнемо з останнього. На сторінці відкриття дверей створюємо кнопку "Закрити двері". У обробнику натискання на кнопку виставляємо на GPIO логічний нуль і переходимо на сторінку з піаніно. Дістаємо з закромів батарейку для дисплея і синхронізуємо за допомогою Nextion Editor час на дисплеї. Після цього на другій сторінці додаємо індикацію годин і дати. Час зберігається в системних змінних rtc0-rtc6. Синхронізувати час можна в режимі Debug в Nextion Editor. Тепер залишилося розібратися з енергозберігаючим режимом. Під час написання програми я постійно користувався зручним довідником по командам середовища Nextion Editor: http://www.itead.cc/wiki/Nextion_Instruction_Set Налаштовуємо вихід з режиму сну по торканню екрану і запускаємо режим сну через хвилину бездіяльності користувача. Для цього в обробник таймера вставляємо дві стрічки:

thup=1
sleep=1

Наш графічний інтерфейс для замка готовий. Залишилося підключити до GPIO виходу реле та електрозамок, але в цьому мало цікавого.

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

Прикреплені файли:

Top