GSM сигнализация с дисплеем Nextion

operrr
Offline
Зарегистрирован: 29.09.2016

Техзадание в двух словах:

Cоздание охранного комплекса с функциями дистанционного мониторинга/управления посредством SMS команд. Локальное управление охранным комплексом с применением сенсорного дисплея.  Возможность подключения как проводных, так и беспроводных датчиков. Голосовое уведомление о режимах работы/режимах паники.Дистанционное управление нагрузкой. Снятие,постановка на охрану с помощью пин-кода, RFID меток, SMS команд. Мониторинг температуры и влажности внутри помещения, мониторинг температуры наружного воздуха. Логгирование срабатываний системы. Подключение к пульту ВО. 

В общем, заказчик хочет много в одном устройстве. Все решаемо, за проект взялся.

Аппаратная часть:

1. Arduino Mega 2560  http://ali.pub/vwji7

2. GSM модем А6 http://ali.pub/o2hzq

3. MP3 модуль WTV020-SD http://ali.pub/90pt8

4. Беспроводной модуль NRFL01 http://ali.pub/zf4jg

5. Дисплей Nextion HMI 3.5" http://ali.pub/b6tre

6. RTC модуль DS3231 http://ali.pub/f1lg0

7. Micro SD модуль http://ali.pub/zscmq

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

 

Пара видео по проекту: 

https://www.youtube.com/watch?v=pX48UHYzAnE&t=7s

https://www.youtube.com/watch?v=pNVqahqCqgI

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

Подробно о проблеме:

На панели NEXTION создана переменная "Phone1" в которую при инициализации системы командой myNextion.setComponentText("main.Phone1", Phone1) записывается номер телефона хранящийся в EEEPROM. тип переменной "string". Тут все нормально, и номер считывается и в панель передается без каки

 

operrr
Offline
Зарегистрирован: 29.09.2016

Блин, а разве свою тему редактировать нельзя? не дописал, ткнул сохранить и все...

operrr
Offline
Зарегистрирован: 29.09.2016

Ладно, продолжу как смогу.

 

В общем этой функцией считываются данные с епрома и отсылаются на панель, тут все в порядке.

void SettingRead() // Функция считывания значений с EEPROM и отсылка на дисплей
{
    Serial.println("READ EEPROM");
    EEPROM_readAnything(0,AlarmStatus);
    EEPROM_readAnything(3,ArmStatus);
    EEPROM_readAnything(15,Phone1);
    EEPROM_readAnything(30,Phone2);
    EEPROM_readAnything(5,Epin1);
    EEPROM_readAnything(7,Epin2);
    EEPROM_readAnything(9,Epin3);    
    EEPROM_readAnything(11,Epin4);    
    myNextion.setComponentValue("main.AlarmStatus", AlarmStatus);
    myNextion.setComponentValue("main.ArmStatus", ArmStatus);
    myNextion.setComponentText("main.Phone1", Phone1);
    myNextion.setComponentText("main.Phone2", Phone2);
    myNextion.setComponentValue("disarm.Epin1", Epin1);
    myNextion.setComponentValue("disarm.Epin2", Epin2);
    myNextion.setComponentValue("disarm.Epin3", Epin3);
    myNextion.setComponentValue("disarm.Epin4", Epin4);
    Serial.println("");
    Serial.println(AlarmStatus);
    Serial.println(ArmStatus);
    Serial.println(Phone1); 
    Serial.println(Phone2);
    Serial.print("PIN: ");
    Serial.print(Epin1);
    Serial.print(Epin2);
    Serial.print(Epin3);
    Serial.println(Epin4);
}

Теперь часть лупа. которая слушает панель и если с нее идут какие-либо данные, считывает значение переменной "Phone1" и печатает в порт.

String message = myNextion.listen();
    if(message != "")
    {
     int a=myNextion.getComponentValue("main.AlarmStatus");      
     String Phone1=myNextion.getComponentText("main.Phone1");      
     Serial.print("Alarm status="); Serial.println(a);
     Serial.print("PHONE       ="); Serial.println(Phone1);
    }

Так вот! если я запрашиваю значение переменной у которой тип "number" то все в порядке, а с переменных типа "string" получаю пустую строку. При этом, если запрашивать значение number, то один запрос-один ответ, а если string, то один запрос и бесконечное число пустых значений. 

Реально в ступоре, честно говоря эта как бы мелочь полностью застопорила развитие проекта. Хэлп господа гуру.

operrr
Offline
Зарегистрирован: 29.09.2016

Проблема локализована, но не решена. Все дело в библиотеке, в которой криво реализована функция getComponentText. Интернет перерыл, решения не нашел

elik745i
Offline
Зарегистрирован: 08.04.2012

Жаль анимации нет.... смотрел ютюб так и не нашел, что бы кто либо анимировал экранчик...

operrr
Offline
Зарегистрирован: 29.09.2016

elik745i пишет:

Жаль анимации нет.... смотрел ютюб так и не нашел, что бы кто либо анимировал экранчик...

Есть, делал я видео по этой теме

https://www.youtube.com/watch?v=xBfMIBC8bJA

elik745i
Offline
Зарегистрирован: 08.04.2012

operrr пишет:

elik745i пишет:

Жаль анимации нет.... смотрел ютюб так и не нашел, что бы кто либо анимировал экранчик...

Есть, делал я видео по этой теме

https://www.youtube.com/watch?v=xBfMIBC8bJA

Отличное видео, вы молодец!

а можно сделать анимацию кнопок например таким образом?

 

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

 

Экранчик 7 дюймовый стоит как китайский планшет....бессмысленно его покупать вовсе...

operrr
Offline
Зарегистрирован: 29.09.2016

Ну по идее да, можно и кнопки попробовать.  Беспроводной интерфейс далеко не всегда гуд,  а небольшой HMI стоит 900 руб, и думаю он своих денег стоит. Рано или поздно библиотеки поправят, да и панели думаю подешевеют.

elik745i
Offline
Зарегистрирован: 08.04.2012

operrr пишет:

Ну по идее да, можно и кнопки попробовать.  Беспроводной интерфейс далеко не всегда гуд,  а небольшой HMI стоит 900 руб, и думаю он своих денег стоит. Рано или поздно библиотеки поправят, да и панели думаю подешевеют.

Не думаю, но у всего свои плюсы и минусы...

operrr
Offline
Зарегистрирован: 29.09.2016

По мне так стоит. Очень простое создание интерфейса - ни одной дуине не хватит ни мозгов ни памяти на создание такого. Берет на себя часть вычислений и обработку событий.