HMI модуль DWIN DGUS. Первый опыт

  • Цена: 2100 руб + доставка 1300 руб

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


Чем мне понравился этот дисплей:
1. Есть в наличии т.к. производитель имеет свои чипы, а это значит исключен дефицит из-за стороннего кризиса. Как это случилось у Nextion при кризисе/дефиците чипов STM32.
2. Цена в 2-4 раза ниже чем nexion.

Дизайны-прошивки создаются в специальной бесплатной проге DGUS.

Потребление энергии:
Дисплей 7" dmg80480c070
Замерил потребление при питании от USB порта: 4,72-4,88 В
0,6А при 100% яркости
0,45А при 80% яркости
0,41А при 75% яркости
0,39А при 70% яркости
0,34А при 60% яркоcти
0,29А при 50% яркости
0,25А при 40% яркости
0,20А при 30% яркости
0,17А при 20% яркости

Первое от чего хочу предостеречь это конфигурационный .CFG файл. Редактировать в нём можно только разделы System Configuration, Backlight Sleep и при только при боооольшом желании Buzzer.
Отметил зелёным которые можно:

Остальные настройки трогать нельзя! Иначе дисплею придёт «кирдык».

Второе это UART режим. 100% что вы захотите сделать UART связь с ардуино или с МК посерьёзней.
Для этого нужно перевести HMI модуль в режим UART. С завода модуль в режиме RS232, а чтобы включить UART нужно запаять перемычку с обратной стороны модуля.




В общем пока писал эту статью набрёл на целый сайт где уже разжёвано то что я хотел написать. Аж руки опустились и муза отступила… Смысла пересказывать не вижу: dwin.pro/
Но чего там нет, так это кода!
Ардуино можно подключать напрямую к дисплею. Т.к. входы дисплея выдерживают 5 В.
Вот мой код для ардуино
// 9 пин на TX дисплея, 10 пин на RX дисплея. Не забываем припаять перемычку у дисплея сзади.
#include <SoftwareSerial.h> 

SoftwareSerial DWIN_serial(9, 10); // RX, TX

uint8_t hmi_cmd = 0;

void HMI_send(uint8_t cmd, uint16_t address, uint8_t *data, uint16_t in_size )
{   
    uint16_t msg_len = in_size +3;

    uint8_t msg[ 16 ] = { 0x5A, 0xA5, msg_len, cmd, address >> 8, address };

    if(cmd == 0x83)
        msg[6] = data;
    else
        for (uint8_t i = 0; i < in_size ; i++) msg[6+ i] = data[i];

    for (uint16_t i = 0; i < msg_len +3; i++) DWIN_serial.write( msg[i] );
}
// запись переменной
void HMI_VP_write( uint16_t address, uint16_t word ){
    hmi_cmd = 0;
    uint8_t tmp[2] = { (word >> 8) & 0xFF, word & 0xFF };
    HMI_send(0x82, address, tmp, sizeof(tmp) );
};
// чтение переменной
void HMI_VP_read( uint16_t address ){
    hmi_cmd = 2;
    HMI_send(0x83, address, 1, 1 );
};
// перезагрузить
void HMI_reboot(){
    hmi_cmd = 0;
    uint8_t tmp[4] = {0x55, 0xAA, 0x5A, 0xA5};
    HMI_send(0x82, 0x04, tmp, 4 );
}
// Узнать версии
void HMI_version_read(){
    hmi_cmd = 1;
    HMI_send(0x83, 0x0F, 1, 1 );
}
// Узнать текущую картинку
void HMI_pic_read(){
    hmi_cmd = 1;
    HMI_send(0x83, 0x14, 1, 1 );
}
// установить картинку по ID
void HMI_pic_set(uint16_t id){
    hmi_cmd = 0;
    uint8_t tmp[4] = {0x5A, 0x01,id>>8, id};
    HMI_send(0x82, 0x84, tmp, 4 );
}
// установить яркость
void HMI_led(uint8_t on, uint8_t off, uint16_t timer){
    hmi_cmd = 0;
    uint8_t tmp[4] = {on, off, timer>>8, timer};
    HMI_send(0x82, 0x82, tmp, 4);
}

void setup() {
	Serial.begin(115200);
    Serial.println("serial ok.");
    DWIN_serial.begin(115200);

    delay(100);
    while (DWIN_serial.available()) DWIN_serial.read(); // сброс входящего буфера UART

    delay(500);

    HMI_reboot(); // перезагрузить HMI
    delay(1000);

    HMI_led(40, 20, 1000); // 40% в активном режиме, 20% в спящем режиме, переход в спящий режим через 10 секунд.

    HMI_pic_set(1); // установить картинку с ID 1
    delay(1000);

    HMI_pic_set(2); // установить картинку с ID 2
    delay(1000);

    HMI_pic_set(3); // установить картинку с ID 3
    delay(1000);

    HMI_pic_read();
    HMI_VP_write(0x5000, 0x1234);
    
    delay(100);
    
    while (DWIN_serial.available()) DWIN_serial.read(); // сброс входящего буфера UART
}

uint32_t timeDelay = 1000;
uint8_t test = 0;
void loop() {
    if (DWIN_serial.available()) {
        uint8_t buf[20];
        uint8_t bufi = 0;

        while (DWIN_serial.available())
        {   
            buf[ bufi++ ] = DWIN_serial.read();
            if(bufi == 20) {
                while (DWIN_serial.available()) DWIN_serial.read();
                Serial.println("hmi error: big packet!");
                break;
            }
        }

        if( buf[0] == 0x5A && buf[1] == 0xA5){
            
            // Serial.flush();
            // for (size_t i = 0; i < buf[2]+3; i++) Serial.write( buf[i] ); Serial.write( "\r\n" );
            
            if(hmi_cmd == 0) // ответ записи
            {
                if(buf[4] == 0x4F && buf[5] == 0x4B){
                    Serial.println("hmi write: ok.");
                }
            }else
            if(hmi_cmd == 1) // ответ чтения параметров
            {
                Serial.println("hmi read: ok.");
                if(buf[5] == 0x0F){ // HMI_version_read
                    uint8_t os = buf[7];
                    uint8_t c8051 = buf[8];

                }else if (buf[5] == 0x14) // HMI_pic_read
                {
                    uint16_t pic_current = (buf[7]<<8)|buf[8];
                    Serial.print("pic_current:");
                    Serial.println(pic_current);
                }
            }else
            if(hmi_cmd == 2) // ответ чтения VP
            {
                uint16_t addr = (buf[4]<<8)|buf[5];
                uint16_t value = (buf[7]<<8)|buf[8];
                Serial.print("hmi read: ok, addr: ");
                Serial.print(addr, HEX);
                Serial.print(", value: ");
                Serial.println(value, HEX);
            }
        }else{
            Serial.println("hmi error: header not find!");
        }
    }

    if(millis()-timeDelay >= 2000UL){
        timeDelay = millis();
        
        switch (test++)
        {
            case 0: HMI_pic_read(); break;
            case 1: HMI_version_read(); break;
            case 2: HMI_VP_read(0x5000); break;
        }
        if(test >2) test= 0;
        // HMI_pic_read();
        // HMI_version_read();
        // HMI_VP_read(0x5000);
    }
}



Официальный интернет магазин DWIN на ali: aliexpress.ru/store/911127255
Официальный сайт DWIN где есть русский язык, там-же есть даташиты на дисплеи ru.dwin-global.com/
Даташиты можно переводить через гугл переводчик документом целиком. Но перевод несколько корявый получается.
Официальный форум DWIN(англ) Хорошо что он появился. Раньше был только китайско язычный форум.

Update: перечитав правила площадки с десяток раз я так и не понял про купоны. Сначала написано что купоны нельзя выкладывать, потом написано что это хорошо. На том злополучном сайте есть один:
Купон aliexpress дающий до $8 скидки при заказе в официальном магазине: DWIN38COUP
Планирую купить +19 Добавить в избранное +38 +50
+
avatar
  • ABATAPA
  • 25 февраля 2022, 11:56
+1
Поставьте CUT.
17.6) При публикации обзора необходимо использовать тэг который должен отделять первые 2-3 предложения от остального текста обзора. Ссылки, выделение текста, фотографии, рисунки, скриншоты, видео следует размещать ниже тэга .
+
avatar
  • mir546
  • 25 февраля 2022, 12:02
0
Да точно. Поставил. Впервые с cut-ом столкнулся
+
avatar
  • penzet
  • 25 февраля 2022, 12:07
+5
Кроме производителя это сырое поделие никому особо не нужно.
+
avatar
  • mir546
  • 25 февраля 2022, 12:15
+4
У вас эти дисплеи тоже крови попили? А почему сырое?
Какие есть аналоги кроме nextion ов?
+
avatar
+2
Я отскочил в сторону web интерфейса. Теперь старым планшетам и даже КПКшкам работа нашлась ;-)
+
avatar
  • rexen
  • 25 февраля 2022, 13:24
0
Поддерживаю коллега!
Нынче БУшный 7-дюймовый планшет можно раза в 2 дешевле сабжа купить. А уж простенькую веб-страничку, не перегруженную современными новомодными фреймворками с мегабайтами скриптов — любой из них потянет.
Да, решение получится хэнд-мэйдное, со своими особенностями, тут уж кто что умеет.
+
avatar
  • mir546
  • 25 февраля 2022, 13:31
+1
Мне вот тоже web симпатизирует. А с какого боку зашли? Какой-то фреймворк, как разметку делаете?
Боюсь правда в ответственных задачах web применить — вдруг планшет накроется в неподходящий момент.
+
avatar
  • drv
  • 25 февраля 2022, 14:01
0
Тоже в свое время намучился с подобными модулями (разные варианты в связке с мегой, esp32, малинкой/апельсинкой). Кроме неадекватной цены получаем кучу проблем и достаточно ограниченный функционал. В итоге весь интерфейс автоматизации переехал на тонкого клиента(WEB) и любой доступный планшет + сервер автоматизации, например HA. Есть возможность настроить интерфейс под любые нужды и сделать кастомизацию под любое место установки планшета. А затащить в современный сервер умного дома элементы автоматизации вообще не проблема.
+
avatar
0
Заход с любого примера формирования HTML документа.
А дальше, к сожалению, только hard core, hard code… Мне оказалось проще/гибче писать HTML напрямую
+
avatar
  • myskuter
  • 26 февраля 2022, 06:36
+1
Мне вот тоже web симпатизирует.
Правильно: «Я вот тоже web-у симпатизирую.» или «Мне вот тоже web симпатичен.».
+
avatar
  • mir546
  • 26 февраля 2022, 13:01
+2
Согласен. Однако в контексте и так понятно, да и я не литератор чтобы шлифовать каждую фразу.
Как-то так сложилось что «симпатизирует» многими воспринимается как «нравится».
Культурная безграмотность.)
+
avatar
+1
гуманитарии в технической теме?
+
avatar
  • myskuter
  • 26 февраля 2022, 18:16
+1
Просто (элементарно) грамотному человеку подобные выражения «режут слух». Кстати, среди нас ещё остались одинаково хорошо развитые люди как в гуманитарном, так и в техническом отношении.

(минус вам не я поставил)
+
avatar
+1
Я для аналогичной задачи использую wallpanel.app/ — ставится на любой Android-планшет, прячет системные панельки и открывает любой URL. У меня просто в локальной сети крутится nginx и mqtt-брокер с поддержкой websocket. nginx отдаёт статику, где на javascript без всяких фреймворков поднимается вебсокет до mqtt и рисуются кнопки.
+
avatar
0
с гугл.плей только ее снесли походу
+
avatar
+1
Хорошо, что есть альтернативы и главное мануалы на читаемом языке
+
avatar
  • al-open
  • 25 февраля 2022, 12:53
0
>2100 руб

доставка 1300
+
avatar
  • mir546
  • 25 февраля 2022, 13:03
0
Спасибо, поправил
+
avatar
  • Buzzard
  • 25 февраля 2022, 14:19
+1
инфы крайне мало, а та что есть это кривой перевод с китайского на английский.
Первый же поиск гуглом Тыц
Русскоязычный форум
Каталог продукции DWIN на русском языке
Инструкция по работе с дисплеями T5L_DGUSII
DWIN Display 480x272 Project + DGUS Arduino Library
Телеграм-канал t.me/dwin_russia
Телеграм-чат t.me/dwin_russia_chat
Каналы на YouTube
Atakan BEKAR
White Electronics
Victor Vision
+
avatar
  • boris112
  • 25 февраля 2022, 14:45
0
Можете подсказать, какого типа дисплей используется в 3д принтере Ender v2?
+
avatar
  • Mihael
  • 25 февраля 2022, 18:35
0
Этот самый )
+
avatar
  • mir546
  • 25 февраля 2022, 19:03
+2
Прошу прощения. Я не указал что купил модуль в сентябре. А все эти сайты появились только в этом месяце.
На тот момент русскоязычной инфы было ноль.
Форум кстати не гуглится. По какому запросу поисковика нашли?
+
avatar
  • Zardek
  • 25 февраля 2022, 14:59
0
Они свою ОС хоть как-то улучшили? Или это по прежнему вывод слепков экрана?
+
avatar
  • mir546
  • 25 февраля 2022, 19:08
0
Изображение формируется из картинок, если вы об этом. Насколько мне известно nextion по такому-же принципу работает.
+
avatar
  • mir546
  • 25 февраля 2022, 19:42
0
И если я правильно понял получить низкую цену модулей на других принципах невозможно.
Если будет чтото типа HTML, то потребуются более мощные чипы, а это увеличит цену конечного дисплея.
+
avatar
  • Zardek
  • 25 февраля 2022, 21:13
0
Ну, к примеру, затенение фонового изображения, когда выводится какой-нибудь диалог. Это по прежнему требует вывода отдельной картинки, на которой всё это пререндерено?
+
avatar
  • mir546
  • 26 февраля 2022, 13:06
0
К сожалению сразу не отвечу т.к. не юзал диалоги. Но постараюсь накопать инфу, точно помню в демке был этот эффект.
+
avatar
+1
Чето я никакой инфы про HMI найти не могу. Что это? Google говорит что это Human-Machine-Interface :D

Зачем оно? Каков функционал?

Если это проц + экран + управление, то:
-чем хуже малина + LVDS матрица + тач?
-чем хуже OLED-дисплей + однокристаллка + джойстик?
-чем хуже TFT + тач/кнопки + контроллер + I2C/SPI?

Зачем разбираться с каким-то непонятным проприетарным г-ном?

Зачем вообще все это, когда можно сделать интерфейс и открывать его через веб хоть со смарта, хоть с планшта, хоть с ББ?

Одни загадки, вобщем )
+
avatar
  • Nuts_
  • 25 февраля 2022, 17:06
+3
Такие штуки хороши когда нужно сделать красивые кнопки на точ интерфейсе для управления скажем, смывом унитаза. Малина и вебнтерейесы для такой задачи могут быть излишни, wifi может быть противопоказан, но вот рисовать эти кнопочки «вручную» дело довольно нудное.
Например, здесь регулярно проскакивает, унитазы в виде новых лабораторных блоков питания и usb тестеров и даже паяльных станций, где экраны напоминают панель управления самолетом, редактировать такие экраны — то еще удовольствие.
Термин HMI пришел в том числе и промышленной автоматизации где такое дело на каждом шагу, и проприетарного там по самое не балуйся, и wifi там много почему противопоказан, правда есть ethernet и web, а уж языки программирования там такие что разбираться и разбираться. Малины однакож втречаються. Ну и унитазы… посложнее…
+
avatar
+1
но вот рисовать эти кнопочки «вручную» дело довольно нудное
Почему?

Рисуете картинку, размечаете ее на функциональные зоны, рисуете точно такую-же, но с активными зонами.
При обновлении нужно считать с SD-карты (или из памяти) первую картинку и закинуть на экран, затем считать картинку с активными зонами, и зная, какие зоны в данный момент активны, закинуть на экран поверх первой картинки п/у куски со второй картинки, которые соответствуют текущим режимам.

Это самый простой случай, для сложных просто итераций больше.

С этим справится даже ATTINY, и, собственно, для 85 у меня так для OLED и сделано.
Вполне работает, даже без бэкбуфера.

wifi может быть противопоказан
Эм… а причем здесь WiFi? Или веб-интерфейс только по WiFi возможен? )))

Вобщем, если интерфейс прост — то простой OLED/TFT с тачем/кнопками.
Если сложен — то ставить малину с этим-же делом + веб-интерфейс: локальный (отображается встроенным браузером) + автоматом возможность открыть его по сети. Работать будет четче, надежней, без проприетарщины + поддерживать все это в разы проще и удобней + на HTML сейчас хоть в 3D можно сделать.

Нет, народ наизобретал себе проблем и теперь доблестно с ними борется. Донкихотство 21 века, ага.
+
avatar
  • gamebox
  • 25 февраля 2022, 17:42
+3
По HMI могу сказать, что они существуют для того, чтобы осуществлять работу с дисплеем, хранить всю графику, отображать данные с контроллера и обеспечивать ввод данных. На предприятиях это сплошь и рядом, правда там не ардуинки и стм, а сименсы. Такой принцип модульности позволяет раскидать оборудование как угодно и обеспечить обмен данными по profibus или profinet, а основному ПЛК предоставить управление оборудованием, не отвлекаясь на графику. К тому же разработка графического интерфейса в специализированных средах гораздо проще, ежели всё прописывать ручками в коде.
+
avatar
0
Про предприятия, и головы фонук/бош/сименс я знаю.
Головы еще и все управление синхронизируют с выводом на экран и отправляют сами команды на внутренний контроллер.

Тут-то совершенно другое, как я понимаю — только отображение.
+
avatar
  • Nuts_
  • 25 февраля 2022, 20:15
+4
а теперь подумаем детальнее:
Когда, как было сказано справится тинька, так кто то таки должен отмечать эти зоны и писать код для этого. И главное, следить чтобы малеший чих не привел к переписыванию кучи кода.
Почему бы и не сделать утилитку которая позволит мышкой разметить эти самые зоны, нарезать картинки, сгенереровала типовой код, да упаковала бы заодно все в файл который без sd бы влез. И не изобретать проблем, а решить.

А доблесная борьба начинается как раз с этой светлой идеи все делать через одно место, и типа экономить на экране.
wifi я упомянул потому что вообще то были предложены старые смартфоны/планшеты которые кроме wifi умеют от силы 3G 4G.
Что подразумевает некую сетевую инфраструктуру, что в случае автономного прибора — избыточно.
И для решения этой «задачи» как раз появляются малины, роутеры, облака, привлекаются солидные вычислительные ресурсы чтобы кнопки красиво нарисовать.

Ну а использовать сетевую технологию для локальной работы это как раз опофигей современности. Изза таких вот «упростителей» мы сейчас и имеем что даже калькулятор в браузере запускается и занимает пару сотен мегабайт. windows наглядный тому прммер.
+
avatar
  • mir546
  • 25 февраля 2022, 19:26
+3
К предыдущим авторам добавлю свои 5 копеек.
HMI модуль это по сути девайс который берет на себя гемор по отображению графики, анимаций и прочей фигникрасоты.
Например если использовать RPI+...+… то упрёмся сразу в цену этого добра и производительность. + если это серийная партия, то это всё нужно собрать — много ручного труда, от чего цена растёт.
Если это промышленное назначение, то продукт должен быть не уникальный, а простой как топор и модульный — если сломается: выкинули, новый поставили, залили прошивку, продолжили работу.
Производительность RPI падает когда работают всякие там GUI.

По сути это и есть TFT/OLED + тач + контроллер + DC/DC и прочая обвязка на одной плате и готовым софтом.
Умельцы даже свои прошивки пишут собирая тулченй в Keil.

По поводу веба полностью согласен. Но опять таки зависит от применения. Если залагает планшет в умном доме это одно. А если планшет залагает в теплице и кучу растений/труда/бабла стухнет или засохнет? Или в ЧПУ станке с 10кВт шпинделем?
+
avatar
  • mir546
  • 26 февраля 2022, 12:58
+1
Перечитав правила площадки с десяток раз я так и не понял про купоны. Сначала написано что купоны нельзя выкладывать, потом написано что это хорошо. На том злополучном сайте есть один:
Купон aliexpress дающий до $8 скидки при заказе в официальном магазине: DWIN38COUP
+
avatar
  • andruxxx
  • 26 февраля 2022, 15:22
+1
забавная штуковина. а что там за CPU? насколько она самостоятельно может работать, без внешнего CPU?
+
avatar
  • mir546
  • 26 февраля 2022, 19:46
+1
Чип собственной разработки DWIN, серии T5L, вроде два ядра 8051. Запрогать его можно через keil, но я далёк от этого.
Модель что у меня самостоятельно может разве что фотки показывать(фоторамка).
Но есть модели типа такой с более чем 20-ю GPIO.
Что она умеет, к сожалению, не знаю.
+
avatar
  • mir546
  • 26 февраля 2022, 19:46
0
del
+
avatar
  • figvam
  • 27 февраля 2022, 08:45
0
0,6А при 100% яркости
Хмм, почему так много? Вроде для 7" должно быть скромнее. Какой там дисплей, TFT? Яркость подсветки очень большая?
+
avatar
  • mir546
  • 27 февраля 2022, 18:03
0
Display Type: TN, Brightness: 250nit
В целом яркость приличная.
Почему так много не знаю