// 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);
}
}
17.6) При публикации обзора необходимо использовать тэг
Какие есть аналоги кроме nextion ов?
Нынче БУшный 7-дюймовый планшет можно раза в 2 дешевле сабжа купить. А уж простенькую веб-страничку, не перегруженную современными новомодными фреймворками с мегабайтами скриптов — любой из них потянет.
Да, решение получится хэнд-мэйдное, со своими особенностями, тут уж кто что умеет.
Боюсь правда в ответственных задачах web применить — вдруг планшет накроется в неподходящий момент.
А дальше, к сожалению, только hard core, hard code… Мне оказалось проще/гибче писать HTML напрямую
Как-то так сложилось что «симпатизирует» многими воспринимается как «нравится».
Культурная безграмотность.)
(минус вам не я поставил)
доставка 1300
Русскоязычный форум
Каталог продукции 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
На тот момент русскоязычной инфы было ноль.
Форум кстати не гуглится. По какому запросу поисковика нашли?
Если будет чтото типа HTML, то потребуются более мощные чипы, а это увеличит цену конечного дисплея.
Зачем оно? Каков функционал?
Если это проц + экран + управление, то:
-чем хуже малина + LVDS матрица + тач?
-чем хуже OLED-дисплей + однокристаллка + джойстик?
-чем хуже TFT + тач/кнопки + контроллер + I2C/SPI?
Зачем разбираться с каким-то непонятным проприетарным г-ном?
Зачем вообще все это, когда можно сделать интерфейс и открывать его через веб хоть со смарта, хоть с планшта, хоть с ББ?
Одни загадки, вобщем )
Например, здесь регулярно проскакивает, унитазы в виде новых лабораторных блоков питания и usb тестеров и даже паяльных станций, где экраны напоминают панель управления самолетом, редактировать такие экраны — то еще удовольствие.
Термин HMI пришел в том числе и промышленной автоматизации где такое дело на каждом шагу, и проприетарного там по самое не балуйся, и wifi там много почему противопоказан, правда есть ethernet и web, а уж языки программирования там такие что разбираться и разбираться. Малины однакож втречаються. Ну и унитазы… посложнее…
Рисуете картинку, размечаете ее на функциональные зоны, рисуете точно такую-же, но с активными зонами.
При обновлении нужно считать с SD-карты (или из памяти) первую картинку и закинуть на экран, затем считать картинку с активными зонами, и зная, какие зоны в данный момент активны, закинуть на экран поверх первой картинки п/у куски со второй картинки, которые соответствуют текущим режимам.
Это самый простой случай, для сложных просто итераций больше.
С этим справится даже ATTINY, и, собственно, для 85 у меня так для OLED и сделано.
Вполне работает, даже без бэкбуфера.
Эм… а причем здесь WiFi? Или веб-интерфейс только по WiFi возможен? )))
Вобщем, если интерфейс прост — то простой OLED/TFT с тачем/кнопками.
Если сложен — то ставить малину с этим-же делом + веб-интерфейс: локальный (отображается встроенным браузером) + автоматом возможность открыть его по сети. Работать будет четче, надежней, без проприетарщины + поддерживать все это в разы проще и удобней + на HTML сейчас хоть в 3D можно сделать.
Нет, народ наизобретал себе проблем и теперь доблестно с ними борется. Донкихотство 21 века, ага.
Головы еще и все управление синхронизируют с выводом на экран и отправляют сами команды на внутренний контроллер.
Тут-то совершенно другое, как я понимаю — только отображение.
Когда, как было сказано справится тинька, так кто то таки должен отмечать эти зоны и писать код для этого. И главное, следить чтобы малеший чих не привел к переписыванию кучи кода.
Почему бы и не сделать утилитку которая позволит мышкой разметить эти самые зоны, нарезать картинки, сгенереровала типовой код, да упаковала бы заодно все в файл который без sd бы влез. И не изобретать проблем, а решить.
А доблесная борьба начинается как раз с этой светлой идеи все делать через одно место, и типа экономить на экране.
wifi я упомянул потому что вообще то были предложены старые смартфоны/планшеты которые кроме wifi умеют от силы 3G 4G.
Что подразумевает некую сетевую инфраструктуру, что в случае автономного прибора — избыточно.
И для решения этой «задачи» как раз появляются малины, роутеры, облака, привлекаются солидные вычислительные ресурсы чтобы кнопки красиво нарисовать.
Ну а использовать сетевую технологию для локальной работы это как раз опофигей современности. Изза таких вот «упростителей» мы сейчас и имеем что даже калькулятор в браузере запускается и занимает пару сотен мегабайт. windows наглядный тому прммер.
HMI модуль это по сути девайс который берет на себя гемор по отображению графики, анимаций и прочей
фигникрасоты.Например если использовать RPI+...+… то упрёмся сразу в цену этого добра и производительность. + если это серийная партия, то это всё нужно собрать — много ручного труда, от чего цена растёт.
Если это промышленное назначение, то продукт должен быть не уникальный, а простой как топор и модульный — если сломается: выкинули, новый поставили, залили прошивку, продолжили работу.
Производительность RPI падает когда работают всякие там GUI.
По сути это и есть TFT/OLED + тач + контроллер + DC/DC и прочая обвязка на одной плате и готовым софтом.
Умельцы даже свои прошивки пишут собирая тулченй в Keil.
По поводу веба полностью согласен. Но опять таки зависит от применения. Если залагает планшет в умном доме это одно. А если планшет залагает в теплице и кучу растений/труда/бабла стухнет или засохнет? Или в ЧПУ станке с 10кВт шпинделем?
Модель что у меня самостоятельно может разве что фотки показывать(фоторамка).
Но есть модели типа такой с более чем 20-ю GPIO.
Что она умеет, к сожалению, не знаю.
В целом яркость приличная.
Почему так много не знаю