Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Вт июн 06, 2023 19:06:32



VFD дисплей Futaba M202MD10C. Часы на ESP8266 в среде Arduino.
Библиотекой не оформлял (пока лень разбираться))
Скетч прилагаю. В нём надо вписать имя вашей сети и её пароль.

Спойлер
Код:
// serialesp8266clock.ino
//
// Libraries needed:
//  Time.h & TimeLib.h:  https://github.com/PaulStoffregen/Time
//  Timezone.h: https://github.com/JChristensen/Timezone
//  NTPClient.h: https://github.com/arduino-libraries/NTPClient
//  ESP8266WiFi.h & WifiUDP.h: https://github.com/ekstrand/ESP8266wifi
//  Вывод на VFD дисплей Futaba M202MD10C, выравнивание текста, кириллицу и анимацию прикрутил abomin


#include <ESP8266WiFi.h>
#include <WifiUDP.h>
#include <String.h>
#include <Wire.h>
#include <NTPClient.h>
#include <Time.h>
#include <TimeLib.h>
#include <Timezone.h>

// Define NTP properties
#define NTP_OFFSET   60 * 60      // In seconds
#define NTP_INTERVAL 60 * 1000    // In miliseconds
#define NTP_ADDRESS  "ca.pool.ntp.org"  // change this to whatever pool is closest (see ntp.org)

// Set up the NTP UDP client
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);

const char* ssid = "SSID";   // insert your own ssid
const char* password = "PASSWORD";              // and password
String date;
String t;
const char * days[] = {"Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"} ;
const char * months[] = {"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"} ;
const byte CYR_init_string[7] = {0x00, 0x01, 0x02, 0x0A, 0x14, 0x04, 0x20}; // кодовая страница СР-866, курсор выключить, яркость 20%
const int dispStringSize = 20; // сколько символов в строке дисплея
const int kadr = 60;   // задержка для смены спрайта

const byte userDefinedSymbol[] = {0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1C, 0x1D, 0x1E};
const byte fromL2R[] = {0x1D, 0x1C, 0x1A, 0x19, 0x1A, 0x1C, 0x1D, 0x1D};
const byte fromR2L[] = {0x18, 0x17, 0x16, 0x15, 0x15, 0x16, 0x17, 0x18};
const byte sprite[][8] = {
  {0x00, 0x70, 0xE8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 1, user defined symbol #15
  {0x00, 0x70, 0xE8, 0xF8, 0xE0, 0x70, 0x00, 0X00}, // Pacman 2, user defined symbol #16
  {0x00, 0x70, 0xF8, 0xC0, 0xE0, 0x70, 0x00, 0X00}, // Pacman 3, user defined symbol #17
  {0x00, 0x70, 0xE0, 0xC0, 0xC0, 0x60, 0x00, 0X00}, // Pacman 4, user defined symbol #18
  {0x00, 0x70, 0xB8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 5, user defined symbol #19
  {0x00, 0x70, 0xB8, 0xF8, 0x38, 0x70, 0x00, 0X00}, // Pacman 6, user defined symbol #1A
  {0x00, 0x70, 0xF8, 0x18, 0x38, 0x70, 0x00, 0X00}, // Pacman 7, user defined symbol #1C
  {0x00, 0x70, 0x38, 0x18, 0x18, 0x30, 0x00, 0X00}, // Pacman 8, user defined symbol #1D
  {0x00, 0x70, 0xA8, 0xF8, 0x88, 0x70, 0x00, 0X00} // Pacman 9, user defined symbol #1E
};
// Перекодировка русского текста для вывода в serial
char* RUS(char* StrIn)
{
  char* StrOut=StrIn; // сначала выходную строку приравниваем к входной
  uint8_t i[4]={0,0,StrIn[0],StrIn[1]}; // создаём "рабочий" байтовый массив из 4-х членов: 0-счётик нечётных байтов входной строки, 1-счётик чётных байтов входной строки, 2-нечётный байт, 3-чётный байт
  while(i[2]>0&&i[0]<255) // проверяем, что не конец массива (тогда нулевой байт) и ограничиваем длину строки в 254 символов
   {
   if(i[2]==0xd0&&i[3]>0x8F&&i[3]<0xC0) // проверка - кирилица? от "А" до "п"?
    {
    StrOut[i[1]]=i[3]-0x10;i[0]++; // переводим в СР-866
    }
      else if(i[2]==0xd0&&i[3]==0x81) // проверка - кирилица? "Ё"?
      {
      StrOut[i[1]]=0xF0;i[0]++; // меняем на Ё СР-866
      }
        else if(i[2]==0xd1&&i[3]>0x7F&&i[3]<0x90) // проверка - кирилица? от "р" до "я"?
        {
        StrOut[i[1]]=i[3]+0x60;i[0]++; // переводим в СР-866
        }
          else if(i[2]==0xd1&&i[3]==0x91) // проверка - кирилица? "ё"?
          {
          StrOut[i[1]]=0xF1;i[0]++; // меняем на ё СР-866
          }
            else
            {
            StrOut[i[1]]=i[2];
            }
    i[0]++;
    i[1]++;
    i[2]=StrIn[i[0]];
    i[3]=StrIn[i[0]+1];
    }
  StrOut[i[1]]='\0';
  return StrOut;
}
// п-п печати спрайта
void printSprite(byte a, int b, int c) {
        Serial.write(0x10); // задать вывод символа
        Serial.write(b); // в b-е знакоместо
        Serial.write(a); // вывод спрайта a
        delay (c); 
        }

// п-п очистки (забоя) последнего символа
void backspace() {       
        Serial.write(8); // backspace
        Serial.write(32); // space
        }

//  п-п задания след. позиции вывода символа слева вверху
void goLeftUpCorner() {
    Serial.write(0x10); // задать вывод символа
    Serial.write(0x00); // в нулевое знакоместо   
    }
         
// Выравнивание строки по центру
String centerJustify(String inputString)
  {
    int needSpaces = (dispStringSize - inputString.length()) / 2;
    String outputString = "";
    for(int i = 0; i < needSpaces; i++)
    outputString += ' ';
    outputString += inputString;
    for(int i = 0; i < (needSpaces - 1); i++)
    outputString += ' ';
    return outputString;
  }
//
 
void setup ()
{
  Serial.begin(9600); // most ESP-01's use 115200 but this could vary
  timeClient.begin();   // Start the NTP UDP client
 
// инициализировать дисплей
  for(int i=0; i<7; i++)
    Serial.write(CYR_init_string[i]);
   
// набиваем пользовательские символы:
  for(int j=0; j<9; j++) {    // девять пользовательских символов
  Serial.write(03);
  Serial.write(userDefinedSymbol[j]);
  for(int i=0; i<8; i++)    // 8 байт на символ
    Serial.write(sprite[j][i]);}
   
  // Connect to wifi
  Serial.println("");
  Serial.print(RUS("Подключаюсь к WiFi"));
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print(RUS("Подключено к WiFi at "));
  Serial.print(WiFi.localIP());
  delay(1000);
  Serial.println("");
  Serial.println("");
}

void loop()
{
  if (WiFi.status() == WL_CONNECTED) //Check WiFi connection status
  {   
    date = "";  // clear the variables
    t = "";
   
    // update the NTP client and get the UNIX UTC timestamp
    timeClient.update();
    unsigned long epochTime =  timeClient.getEpochTime();

    // convert received time stamp to time_t object
    time_t local, utc;
    utc = epochTime;

    // Then convert the UTC UNIX timestamp to local time
    TimeChangeRule MSK = {"MSK", Second, Sun, Mar, 2, +120};  //UTC - 5 hours - change this as needed
//    TimeChangeRule usEST = {"EST", First, Sun, Nov, 2, -360};   //UTC - 6 hours - change this as needed
    Timezone tMSK(MSK, MSK);
    local = tMSK.toLocal(utc);

 // now format the date variables into string with proper names for month, day etc
    date += day(local);
    date += " ";
    date += months[month(local)-1];
    date += " ";
    date += year(local);

// сформировать выровненную по центру строку даты
    char dateChar[date.length()+1];
    date.toCharArray(dateChar, sizeof(dateChar));
    String dateString = centerJustify(RUS(dateChar));   

// format the time
    if(hour(local) < 10)  // add a space if hour is under 10
      t += " ";
    t += hour(local);
    t += ":";
    if(minute(local) < 10)  // add a zero if minute is under 10
      t += "0";
    t += minute(local);

// сформировать выровненную по центру строку времени и дня недели
    String dayNow = days[weekday(local)-1];
    char dayChar[23];
    dayNow.toCharArray(dayChar, 23);
    String timeDayChar866 = t + ' ' + RUS(dayChar);
    String timeDayString = centerJustify(timeDayChar866);

    // Display the date and time
    goLeftUpCorner();
    Serial.println(timeDayString);
    Serial.print(dateString);

    delay (5000);

// анимация Pacman
     
    for(int i=38; i>19; i--) {  // нижняя строка
      for(int k=0; k<8; k++)
        printSprite(fromR2L[k], i, kadr);
        backspace(); }
     
    for(int i=0; i<20; i++) { // верхняя строка
      for(int k=0; k<8; k++)
        printSprite(fromL2R[k], i, kadr);
        backspace(); }
       
    printSprite(0x1E, 19, 1000);   
    backspace();
    goLeftUpCorner();
  }
  else // attempt to connect to wifi again if disconnected
  {
    WiFi.begin(ssid, password);
    delay(1000);
  }
   
//  delay(10000);    //Send a request to update every 10 sec (= 10,000 ms)
}

Благодарю! Крайне полезная информация. В ближайшее время планирую доделать библиотеку для работы с этим дисплеем, в общий доступ, разумеется, выложу. И подобный нигде и никак не документированный функционал мне крайне полезен! Напишите, как вас в коде библиотеки упомянуть, если вы не против, конечно :solder:


Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал. Уже доступна на гитхабе вместе с тестовыми скетчами: https://github.com/SNMetamorph/FutabaVfdM202MD10C
А также, в течение пары дней библиотека уже должна быть доступна в ардуиновском менеджере библиотек.


Ещё по поводу этой библиотеки, мне требуется помощь неравнодушных (если такие вообще есть), нужно определить какой кодовой странице в дисплее какая кодировка текста соответствует. Для некоторых страниц у меня это получилось сделать самому, но вот с остальными я успеха не возымел. По ссылке более подробная информация и прикреплены изображения с таблицами символов для всех неизвестных кодовых страниц: https://github.com/SNMetamorph/FutabaVf ... C/issues/1

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Вт июн 06, 2023 19:39:58

номер 6 иврит
8 арабский
11 греческий
3 PC858: Euro
бывают просто многоязычные типа португалия, польша, северные страны там, гермашка
все это смешано в одну

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сб июн 10, 2023 00:05:13

список команд для индикаторов epson dm101 dm 110
ESC/POS® Command Reference epson dm101 dm 110
Command Reference epson customer display

https://reference.epson-biz.com/modules ... ntent_id=1

еле нашел его, так что пусть из гугла сюда приходят все 8)

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Вт июн 20, 2023 05:18:11

пишу на шарпе
вот завелся :)))
кажется я спалил железный ком порт и пришлось взять усб

Изображение

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Вт июн 20, 2023 10:54:37

То что завелся это хорошо но не удивительно..
Библиотеку для эпсон протокола уже делал и вылажывал на стр3
К сожалению колба у тебя с большим разрывом меж строк (у меня таких штук шесть тоже есть), а самое не очень это широченная плата..
Но если область применения не для часов в мелком корпусе то это не помеха.
Я вот сижу жду когда придут панельки plcc44 чтоб проц на место впихнуть после перепрошивки где заменены не используемые кодовые страницы на знаки для больших циферок или для вертикального градусника.
Откорректированные дампы любезно предоставил devicepro, они для проца синкмос sm5964
Вот бы найти вариант залития их без снятия проца.. не то чтоб я ленивый и жаль 15 минут на снятие и прошивку, но не у всех есть программатор под это дело.
Как окажусь за компом солью обязательно в облако. На телефоне лень пальцы ломать.

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Вт июн 20, 2023 21:10:57

так для эпсонов прог же есть DM-DFlash.exe
там можеш создать фонты и залить в юзерскую кодовую таблицу
только дтр вывод замкнуть с ртс вроде надо, там документацию смотри

я замыкал, но что-то не определяет прога и она видит только аппаратные порты
усб не видит

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

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Ср июн 21, 2023 09:44:31

kalobyte писал(а):крутой корпус для часов настольных

Интересно будет посмотреть 8) .
вечерком скину код часиков в облако
уже с имплантированный библиотекой эпсон - чуть не допиленный,
но болванка годная кмк - работают на столе уже некоторое время с эпсон протоколом,
до этого он год жил в другом pos - с другим протоколом.
Правда сейчас без батарейки.. чёт лень ее покупать - пофиг - они с вафлей 8266- не особо и нужна по этому.

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Ср июн 21, 2023 10:50:09

индикатор вот этот

Изображение

по сути настольные часы

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Ср июн 21, 2023 22:22:34

ожидал немного другого под словом крутой корпус :o но сам такие тоже пользую ..

всякое разное про часики которые неспешно пилил ВСЕ тут - https://cloud.mail.ru/public/TTe2/Nb5bcKzUs
лень было заворачивать в ifdef - по этому кому нужно либы подключать другие ручками..
код вполне стабилен хоть и не безгрешен в плане мигания разделительными точками..
выкинуто много чего оригинала и не допилено тоже.. например не все pos умеют яркость менять - выпилил нафиг..
но как уж есть ..если что пилите и выкладывайте на радость граждан.

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Чт июн 22, 2023 07:02:32

Energizer-A писал(а):ожидал немного другого под словом крутой корпус

а какой корпус может быть круче этого для настольных часов с таким индикатором?

Energizer-A писал(а):.если что пилите и выкладывайте на радость граждан.

да мы с корешем по приколу пилим на шарпе, кому это надо все?

сейчас подыскиваю апи погоды

надо будет потом под есп8266 переделать

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Чт июн 22, 2023 07:45:14

kalobyte писал(а):пилим на шарпе,

Хорошо, что не на асме :))
kalobyte писал(а):апи погоды

Специально раскорчевал погодные примочки - мне нафиг не упирались датчики всякие.
Мне куда более интересно текстовые будильники, но с заполнением в веб рыле,
а не на флешке.
kalobyte писал(а):какой корпус может быть круче

и я хз, думал ты вдруг Чаво эпичное сбацал,
пока бутылка единственное, что глаз радует алкоголика..

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Чт июн 22, 2023 10:55:06

Изображение Изображение Изображение
Когда-то тоже использовал оригинальные корпуса тех самых LABAU с узкой платой на SM5964. А что, корпус неплохо смотрится.

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Чт июн 22, 2023 17:34:13

devicepro писал(а):А что, корпус неплохо смотрится.

ну дык все настольные часы были в подобных корпусах
ну разве ножка не такая большая была и наклона не было с регулировкой

шрифт норм для больших цифр, но у меня щели большие + там еще курсор есть под знакоместами

Energizer-A писал(а):Хорошо, что не на асме

я в нем нихера не понимаю
Energizer-A писал(а):Мне куда более интересно текстовые будильники, но с заполнением в веб рыле,
а не на флешке.

а чего там сложного в них? у гайкера есть гайвер портал, там легко делается вебморда
хотя я не любитель такого подхода и сделал бы ее отдельно в хтмл, а все настройки хранил бы в джейсоне

Energizer-A писал(а):пока бутылка единственное, что глаз радует алкоголика..

я уже больше 10 лет не употребляю алкогольный яд, так что оригинальный корпус это идеальный корпус

разве что можно там приделать красную кнопку включить/выключить будильник

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сб июн 24, 2023 06:48:52

kalobyte писал(а):а чего там сложного в них?

Веб рыло и сейчас есть но вот по красоте сделать мешает
Незнание html и прочего ..
может усложняю конечно, но была идея вынести обработку срабатывания будильника в модуль часов.
Сомневаюсь имеет ли это смысл - вроде есп шустрая сильно..
Офф
по поводу яда - есть и такая точка зрения не без основательная - думаю что дело в дозировке.
- сам регулярно - почти каждый день и много лет - просто дозу не нарушаю.
Вино коньяк водка все очень люблю и даже пиво иногда..

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сб июн 24, 2023 14:58:20

Energizer-A писал(а):Незнание html и прочего ..

для этого есть готовые фреймворки типа бутстрапа
специально создан для быстрого создания вебморд
в ютубе есть куча роликов
https://github.com/GyverLibs/GyverPortal

Energizer-A писал(а):по поводу яда - есть и такая точка зрения не без основательная - думаю что дело в дозировке.

у ядов дозировки не бывает
бутылка пива и твои мозги на 3 года становятся овощем

нельзя на новый год ходить с друзьями в гей клуб и оправдывать это массажем простаты для здоровья

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Вт июн 27, 2023 21:14:16

Здравствуйте! Приобрел себе 2 дисплея Nixdorf на колбе Futaba m202md25a. Где можно найти прошивку с часами для него?

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Ср июн 28, 2023 10:08:17

Готового бинарника не видел и сам не выкладывал,
а вот исходники лежат в облачной папке -ссылка чуть выше
- вам нужно заменить библиотеку dsp800 на nixdorf и затем собрать
Возможно для сборки потребуются старые библиотеки - они там же
Так же желательно установить в есп крайнее системные обновы..
И можно собрать прошивку.. только не забыть залить файловую тоже ;-)
Иначе веб рыла не будет вообще и настроить не получится.

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Ср июн 28, 2023 12:56:18

Кто какое питание использует для самоделок с VFD-дисплеями? Я планировал сделать питание по USB, но его мощности недостаточно оказалось. В итоге нашёл какой-то импульсный БП на 12 вольт и 1 ампер, воткнул его, все работает нормально. Но хочется какое-то более универсальное решение, в случае с тем же USB, устройство можно питать не только от розетки, а еще и к повербанку присоединить, например.

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Ср июн 28, 2023 19:40:30

а какой преобразователь ты использовал?
у меня при 12в потребляет 100ма
это половина от максимума повышающего преобразователя на мелкой мелкасхеме
такой китайский модуль есть, но я пока не пробовал

я буду делать платы под 12в

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Чт июл 06, 2023 04:46:39

а какой преобразователь ты использовал?
у меня при 12в потребляет 100ма
это половина от максимума повышающего преобразователя на мелкой мелкасхеме
такой китайский модуль есть, но я пока не пробовал

я буду делать платы под 12в

У меня дисплей принимает 12В, поэтому я напрямую на него подаю с блока питания. А для питания микроконтролера беру +5В с самой платы дисплея, там уже есть step-down преобразователь. Но буквально вчера выяснилось, что мощности этой +5В линии на дисплее недостаточно, т.к. помимо ESP8266 у меня на этой линии висят датчики. Поэтому придётся покупать и вешать на 12В понижайку до 5В, и уже от неё отдельно питать МК и датчики.

Провёл небольшие замеры, блок питания + дисплей + ESP8266 + датчики в сумме потребляют 6 Ватт, с периодическими пиками до 7 Ватт в момент обновления датчика MHZ-14A.
Ответить