Умный дом (Mega2560+SIM800L+TFT+DS3231+Keyes+датчики температуры, влажности, давления)

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Можно попроще. Ватт на 350 заглаза.

Ровные синусоиды и прочая "красота" ардуине не нужны. Ей для питания достаточно обычного 9В. блока питания за 500 руб. Вопрос только в мощности, да и то она не всем нужна. В моем случае мощность требуется GSM модулю, поэтому я и задался вопросом, откуда брать питание. Излишние навороты и финансовые затраты на них ни к чему.

alex_r61
Offline
Зарегистрирован: 20.06.2012

abarmotovi4 пишет:

Подойдет этот бесперебойник? Вопрос по поводу выходного сигнала, здесь аппроксимированный, а есть еще чистые синусоиды, но такие ИБП дорогие, есть ли какая-нибудь разница для наших систем?

А это к чему? Если к Дуне, то сразу бензогенератор на 1МВт. И мелкие катаклизмы Вам ни почём.

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

Это на всю систему: дуня, циркуляционные насосы, приводы заслонок... Может еще придумаю что повесить. Аккумулятор поставлю автомобильный и будет работать.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

abarmotovi4 пишет:
Это на всю систему: дуня, циркуляционные насосы, приводы заслонок... Может еще придумаю что повесить. Аккумулятор поставлю автомобильный и будет работать.

Чем Вы этот автомобильный аккумулятор будете заряжать? Для его емкости нужно будет отдельный модуль зарядки городить.

Если циркуляционные насосы и приводы заслонок, то долго этот бесперебойник не протянет. Максимум, полчаса. Батарея для контроллера, по сути нужна, чтобы отправить необходимые сообщения, перевести исполнительные механизмы в нужный режим и все. После этого можно отключаться.

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

Иначе весь этот огород не нужен. Обычный блок питания, опять же, при более менее понятном наборе реле / модулей / датчиков блока питания от компа достаточно, плюс, если нужно резервное питание, литиевая батарея или герметичный кислотный АКБ (которые как раз используются в ИБП), если температура в помещении может опускаться ниже 0, и модуль заряда самой батареи. ВСЕ.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Вобщем, вопрос на пол-копейки, а раздули до небес.

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

Автомобильный думал ставить, потому что дешевле, чем родные ибп. А заряжать бесперебойником, с улучшением охлаждения. Но посидел подумал, что проще купить ибп и не мучаться.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Получил на днях датчик атмосферного давления, влажности и температуры BME280. Вчера установил, все работает как надо.

В планах написать алгоритм сбора статистики по давлению и алгоритм прогноза погоды. Код для работы с BME280, если кому надо - выложу.

Anton_Kos87
Offline
Зарегистрирован: 07.03.2014

Выкладывайте попробывал бы у себя в доме, зиму контролировал температуру улицы, дома, септика и скважины, думаю без труда можно будет опробывать ваш скетч

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Anton_Kos87, ок. А датчик то сам есть у Вас?

alex_r61
Offline
Зарегистрирован: 20.06.2012

Тоже недавно получил Nextion, а чуть ранее датчики. Всё уже проверил, чуть освобожусь начну ваять.

Anton_Kos87
Offline
Зарегистрирован: 07.03.2014

в чем отличие от BMP180? с BME280 можно влажность читать???

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Датчик BME280 умеет передавать параметры атмосферного давления, влажности и температуры.

Ниже обещанный код для работы с датчиком.

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016
#include <Wire.h>

// переменные для работы с датчиком BME280

#define BME280_ADDRESS 0x76
unsigned long int hum_raw,temp_raw,pres_raw;
signed long int t_fine;

int temp_act = 0L, press_act = 0L, hum_act=0L;
signed long int temp_cal;
unsigned long int press_cal,hum_cal;

uint16_t dig_T1;
 int16_t dig_T2;
 int16_t dig_T3;
uint16_t dig_P1;
 int16_t dig_P2;
 int16_t dig_P3;
 int16_t dig_P4;
 int16_t dig_P5;
 int16_t dig_P6;
 int16_t dig_P7;
 int16_t dig_P8;
 int16_t dig_P9;
 int8_t  dig_H1;
 int16_t dig_H2;
 int8_t  dig_H3;
 int16_t dig_H4;
 int16_t dig_H5;
 int8_t  dig_H6;


void readTrim()
{
    uint8_t data[32],i=0;
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0x88);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,24);
    while(Wire.available()){
        data[i] = Wire.read();
        i++;
    }
    
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0xA1);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,1);
    data[i] = Wire.read();
    i++;
    
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0xE1);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,7);
    while(Wire.available()){
        data[i] = Wire.read();
        i++;    
    }
    dig_T1 = (data[1] << 8) | data[0];
    dig_T2 = (data[3] << 8) | data[2];
    dig_T3 = (data[5] << 8) | data[4];
    dig_P1 = (data[7] << 8) | data[6];
    dig_P2 = (data[9] << 8) | data[8];
    dig_P3 = (data[11]<< 8) | data[10];
    dig_P4 = (data[13]<< 8) | data[12];
    dig_P5 = (data[15]<< 8) | data[14];
    dig_P6 = (data[17]<< 8) | data[16];
    dig_P7 = (data[19]<< 8) | data[18];
    dig_P8 = (data[21]<< 8) | data[20];
    dig_P9 = (data[23]<< 8) | data[22];
    dig_H1 = data[24];
    dig_H2 = (data[26]<< 8) | data[25];
    dig_H3 = data[27];
    dig_H4 = (data[28]<< 4) | (0x0F & data[29]);
    dig_H5 = (data[30] << 4) | ((data[29] >> 4) & 0x0F);
    dig_H6 = data[31];   
}
void writeReg(uint8_t reg_address, uint8_t data)
{
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(reg_address);
    Wire.write(data);
    Wire.endTransmission();    
}

void setup() {
//версия сборки (номер, версия, подверсия, дата)
version_p = "0.1.9.08032016";
msgSMS = "dr.Lmg";

// прошли setup - статус 1
//startSetup = 1;

//Serial.begin(9600);

// Инициализируем датчик BME280

    uint8_t osrs_t = 1;             //Temperature oversampling x 1
    uint8_t osrs_p = 1;             //Pressure oversampling x 1
    uint8_t osrs_h = 1;             //Humidity oversampling x 1
    uint8_t mode = 3;               //Normal mode
    uint8_t t_sb = 5;               //Tstandby 1000ms
    uint8_t filter = 0;             //Filter off 
    uint8_t spi3w_en = 0;           //3-wire SPI Disable
    
    uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode;
    uint8_t config_reg    = (t_sb << 5) | (filter << 2) | spi3w_en;
    uint8_t ctrl_hum_reg  = osrs_h;
    
    //Serial.begin(9600);
    Wire.begin();
    
    writeReg(0xF2,ctrl_hum_reg);
    writeReg(0xF4,ctrl_meas_reg);
    writeReg(0xF5,config_reg);
    readTrim();       
}

void loop()
{

//Вызывается 1 раз в секунду
  unsigned long currentMillis1 = millis();
if (startSetup == 1) {interval1 = 0;}
else {interval1 = 60000;}

if(currentMillis1 - previousMillis1 > interval1) {
    previousMillis1 = currentMillis1;  

// датчик BME280
    readData();
    
    temp_cal = calibration_T(temp_raw);
    press_cal = calibration_P(pres_raw);
    hum_cal = calibration_H(hum_raw);
    temp_act = temp_cal / 100;
    press_act = (press_cal / 100) * 0.75006375541921; // переводим гектопаскали в ммРтСт
    hum_act = hum_cal / 1024;
    Serial.print("TEMP : ");
    Serial.print(temp_act);
   Serial.print(" DegC  PRESS : ");
    Serial.print(press_act);
    Serial.print(" mmHg  HUM : ");
    Serial.print(hum_act);
    Serial.println(" %");    
    
    delay(1000);
}



void readData()
{
    int i = 0;
    uint32_t data[8];
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0xF7);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,8);
    while(Wire.available()){
        data[i] = Wire.read();
        i++;
    }
    pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4);
    temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4);
    hum_raw  = (data[6] << 8) | data[7];
}


signed long int calibration_T(signed long int adc_T)
{
    
    signed long int var1, var2, T;
    var1 = ((((adc_T >> 3) - ((signed long int)dig_T1<<1))) * ((signed long int)dig_T2)) >> 11;
    var2 = (((((adc_T >> 4) - ((signed long int)dig_T1)) * ((adc_T>>4) - ((signed long int)dig_T1))) >> 12) * ((signed long int)dig_T3)) >> 14;
    
    t_fine = var1 + var2;
    T = (t_fine * 5 + 128) >> 8;
    return T; 
}

unsigned long int calibration_P(signed long int adc_P)
{
    signed long int var1, var2;
    unsigned long int P;
    var1 = (((signed long int)t_fine)>>1) - (signed long int)64000;
    var2 = (((var1>>2) * (var1>>2)) >> 11) * ((signed long int)dig_P6);
    var2 = var2 + ((var1*((signed long int)dig_P5))<<1);
    var2 = (var2>>2)+(((signed long int)dig_P4)<<16);
    var1 = (((dig_P3 * (((var1>>2)*(var1>>2)) >> 13)) >>3) + ((((signed long int)dig_P2) * var1)>>1))>>18;
    var1 = ((((32768+var1))*((signed long int)dig_P1))>>15);
    if (var1 == 0)
    {
        return 0;
    }    
    P = (((unsigned long int)(((signed long int)1048576)-adc_P)-(var2>>12)))*3125;
    if(P<0x80000000)
    {
       P = (P << 1) / ((unsigned long int) var1);   
    }
    else
    {
        P = (P / (unsigned long int)var1) * 2;    
    }
    var1 = (((signed long int)dig_P9) * ((signed long int)(((P>>3) * (P>>3))>>13)))>>12;
    var2 = (((signed long int)(P>>2)) * ((signed long int)dig_P8))>>13;
    P = (unsigned long int)((signed long int)P + ((var1 + var2 + dig_P7) >> 4));
    return P;
}

unsigned long int calibration_H(signed long int adc_H)
{
    signed long int v_x1;
    
    v_x1 = (t_fine - ((signed long int)76800));
    v_x1 = (((((adc_H << 14) -(((signed long int)dig_H4) << 20) - (((signed long int)dig_H5) * v_x1)) + 
              ((signed long int)16384)) >> 15) * (((((((v_x1 * ((signed long int)dig_H6)) >> 10) * 
              (((v_x1 * ((signed long int)dig_H3)) >> 11) + ((signed long int) 32768))) >> 10) + (( signed long int)2097152)) * 
              ((signed long int) dig_H2) + 8192) >> 14));
   v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((signed long int)dig_H1)) >> 4));
   v_x1 = (v_x1 < 0 ? 0 : v_x1);
   v_x1 = (v_x1 > 419430400 ? 419430400 : v_x1);
   return (unsigned long int)(v_x1 >> 12);   
}

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

alex_r61 пишет:

Тоже недавно получил Nextion, а чуть ранее датчики. Всё уже проверил, чуть освобожусь начну ваять.

Какие датчики будете использовать?

alex_r61
Offline
Зарегистрирован: 20.06.2012

"Народных" и тормознутых 18b20 и DHT не будет. SI7021 в туалете и ванной, LM75 в комнатах и один BMP180.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

alex_r61 пишет:

"Народных" и тормознутых 18b20 и DHT не будет. SI7021 в туалете и ванной, LM75 в комнатах и один BMP180.

 

DHT я тоже не доволен, но из за их погрешности и конструктивного исполнения, 18b20 меня вполне устраивают, время замера 750мс у BME280 время замера  1000мс.

Гдето Dimax выкладывал решение как по таймеру собирать данные раз в секунду, мне очень решение понравилось, попробую у себя так же реализовать, ну не по таймеру так еще как нибудь.

Я буду использовать для темепературы снаружи и внутри  18b20, влажности SI7021, давления BMP180.

Пока застрял на записи логов в EEPROM 24c32, при записи блока и смене страницы памяти записать не получается. 

Надо читать мануал.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Я эту проблему уже решил, опрашивать датчики температуры чаще чем раз в минуту для меня смысла нет. При этом, мне нужно было, чтобы по факту срабатывания тревожного сигнала и отправки СМС, следующая СМС отправилась не ранее, чем через 5 минут, даже если тревожное событие на протяжении этого времени повторяется неоднократно. Суть в том, что нужно запомнить время последнего измерения из переменной millis(), и при следующем измерении использовать условие (время millis() - время_последнего_измерения > время_задержки)

Разбирался с ней в этой теме

Датчики температуры 18b20 меня вполне устраивают, купил три штуки для помещения и три в герметичном корпусе из нержавейки, для открытой среды вне помещения. Стоят они копейки, подключение элементарное. Будут глючить - заменю.

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Итак, на сегодня, основная масса функционала, который у меня был реализован на моем предыдущем контроллере CCU825, реализован на меге.

Это управление охраной, контроль датчиков движения и задымления, контроль датчиков температуры, реакция на тревожные события (включение сирены, отправка СМС о тревожных сигналах, отправка СМС о переходе в нормальное состояние), профили температур в доме (эко, нагрев, комфорт и ночь), работа с исполнительными реле, хранение нужных параметров в EEPROM, + модуль реального времени.

Вся необходимая информация выводится на TFT дисплей.

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

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

Сейчас планирую реализовать возможность передачи сообщений по wi-fi (определяюсь с модулями, какой лучше взять), т.к. при отладке на СМС можно разориться :) Далее би-алгоритм отправки сообщений, сналача по wi-fi в интернет, если не удачно (связь у меня там плохая), то тогда СМС.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

alex_r61 пишет:

SI7021 в туалете и ванной

А с какой целью эти датчики? Чтобы вентиляторы автоматически включать?

alex_r61
Offline
Зарегистрирован: 20.06.2012

dr.lmg пишет:

А с какой целью эти датчики? Чтобы вентиляторы автоматически включать?

И для вентиляции тоже. Чтобы не плодить отдельную тему создал папку на Yandex диске https://yadi.sk/d/eKF4ZGLJpfT4g

Там пока скелет для Slave МК с тестом датчиков. Опрос датчиков по таймеру. Для Master задатчиком будут секундные импульсы от RTC.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

А для чего еще, кроме вентиляторов?

alex_r61
Offline
Зарегистрирован: 20.06.2012

Ну это уже в процессе будет видно, ещё планирую "теплый пол" в ванной. Дисплей подключил по витой паре, пока работает. Можно будет как фоторамку повесить,отдельно от МК.

anatoliyrnd
Offline
Зарегистрирован: 17.03.2016

dr.lmg пишет:

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

 

В программе есть потдержка кирилицы

https://yadi.sk/i/t2pmNoSaqFtvZ

Просто в настройках надо выбрать кодировку iso 8859-5 и импортировать в проект нужный шрифт с кирилицей. В железе не проверял, т.к. я на стадии предварительного выбора того самого железа . 

alex_r61
Offline
Зарегистрирован: 20.06.2012

Уже проверено - есть шрифт с кирилицей. Думаю ещё заказать, хотя там ещё много допиливать.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Значит, допилили.

alex_r61
Offline
Зарегистрирован: 20.06.2012

В догонку.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Заказал вчера экранчик nextion 4,3"

alex_r61
Offline
Зарегистрирован: 20.06.2012

Меня уже на семёрку растащило, но дорогой, зараза.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Мысль посетила касательно экрана, а камеру например, домофона зацепить на ардуинку и выводить на экран получится? Так сказать, коль уж есть экран, то использовать его на 200%

alex_r61
Offline
Зарегистрирован: 20.06.2012

 У меня есть такая камера http://devicter.ru/goods/Grove-Serial-Camera-Kit?from=ZWM2 Если бы они сделали возможность загрузки снимков на карту и отображение их с карты, было бы здорово. Надо поселиться на их форуме и накидать идей.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Ну вообще отлично. Только я так понимаю для нее нужен отдельный шилд.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Она картинку через Serial в JPEG отдаёт. А вот дальше - затор.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Nextion Editor только что обновился до версии 0.33. Что нового:

A lot new functions

  • better UI, add theme support
  • align, multi select
  • keyboard shortcuts (ctrl+c, ctrl+v, ctrl+s, ctrl+y, ctrl+z, ctrl+a ….)
  • undo, redo
  • batch operation
  • move component to top/bottom layer
  • function “if” supports “else if”
  • error detection and navigation
  • more instructions (see the latest instruction set)
    • rest, randset, vis, cirs, addt
    • wepo, repo, wept, rept, cfgpio (enhanced version only)
  • more system variables:

    • rand, sys0 to sys2,
    • rtc0 to rtc5, pio0 to pio7, pwm4 to pwm7, pwmf (enhanced version only)
  • postinitialize event / preinitialize event

This version supports enhanced version now.

wl_wl
Offline
Зарегистрирован: 19.11.2013

Вопрос к anatoliyrnd. Подскажите, как выбрать кодировку iso 8859-5 для русификации шрифтов?

Извините, нашел сам. Все мой Nextion пишет по русски!

anatoliyrnd
Offline
Зарегистрирован: 17.03.2016

А кто знает как Arduino IDE заставить передавть русские буквы в UART одним байтом ? А то Serial.print () передает руский шрифт в UTF-8 я так понял - т.е. каждый символ -два байта.  

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

alex_r61 пишет:

В догонку.

 

 

 

 

 

 

 

Покажите, какие настройки делали, чтобы русский шрифт выводился?

Выставляю iso-8859-5, вместо кириллицы какая-то фигня.

alex_r61
Offline
Зарегистрирован: 20.06.2012

А в самом шрифте есть русский. Редактор обновился до 0.34.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

В смысле в самом шрифте?

в программе  font editor вообще кириллицы нет. Только если под менять английские буквы на русские.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dr.lmg пишет:

В смысле в самом шрифте?

в программе  font editor вообще кириллицы нет. Только если под менять английские буквы на русские.

Есть, почему нет? В версии 0.33 у меня прекрасно генерятся русские шрифты, главное, чтобы в шрифте, который вы выбрали для генерации - были русские символы. Ну и кодировку при создании проекта указать с пятёрочкой на конце.

Другой вопрос, что уродски они выглядят, эти шрифты.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

anatoliyrnd пишет:

А кто знает как Arduino IDE заставить передавть русские буквы в UART одним байтом ? А то Serial.print () передает руский шрифт в UTF-8 я так понял - т.е. каждый символ -два байта.  

Как вариант - перекодировать в нужную локаль, например, поискать в гугле по фразе "utf8 to windows-1251".

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Можете скриншот из фонтэдитора, как шрифт у Вас в нем выглядит?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dr.lmg пишет:

Можете скриншот из фонтэдитора, как шрифт у Вас в нем выглядит?

А там он никак не выглядит - он генерится и всё. Мы об одном и том же говорим? Я веду речь о Nextion Editor, там при генерации шрифта ничего не видно, кроме мелькающего очередного символа в прямоугольнике.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Я просто не совсем понимаю, что значит - он сам генерится.

чтобы загрузить шрифт в nextion editor, нужно его сначала сгенерить в font editor. Так вот в font editor нет кириллических символов. Соответственно, они будут отсутствовать и в сгенеренном шрифте.

Надпись например, на кнопке, в ее свойствах, кириллицей пишется, нона самой кнопке выводится всякая абракадабра.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Еще одна проблема: не пойму как залить в дисплей проект.

Попробовал на SD карту - требует формат карты FAT32. А она форматируется либо в extFAT, либо в NTFS.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Фонт без русского.

 

 

 

 

Фонт с русским.

 

 

 

 

 

У меня один дисплей нормально обновлялся с карты 16 гиг, другой с неё отказался грузиться - лотерея.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dr.lmg пишет:

Я просто не совсем понимаю, что значит - он сам генерится.

чтобы загрузить шрифт в nextion editor, нужно его сначала сгенерить в font editor. Так вот в font editor нет кириллических символов. Соответственно, они будут отсутствовать и в сгенеренном шрифте.

Надпись например, на кнопке, в ее свойствах, кириллицей пишется, нона самой кнопке выводится всякая абракадабра.

 

Эмм, а ничо, что мы о разных вещах говорим? Вы юзаете какой-то сторонний софт Nextion Font Generator, а я вам рассказываю о встроенном в Nextion Editor генераторе шрифтов.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dr.lmg пишет:

Попробовал на SD карту - требует формат карты FAT32. А она форматируется либо в extFAT, либо в NTFS.

А в чём проблема отформатировать карту в FAT32? Под виндой делается на раз-два. Проблема может быть в другом ещё: карточка плохого качества, дешёвая. С дешёвой китайской у меня не закачивалось, с нормальной SanDisk - закачалось сразу.

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

А где в nextion editor генератор шрифтов, не найду. Карта sd дает возможность форматировать ее в extFAT и NTFS.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dr.lmg пишет:

А где в nextion editor генератор шрифтов, не найду. Карта sd дает возможность форматировать ее в extFAT и NTFS.

1. Меню Tools->Font generator

2. Это как? Правой кнопкой по значку диска в Проводнике, выбрать "форматировать", потом выбрать "FAT32" - не даёт?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Не, FAT32 не дает.