Чтение данных с nextion дисплея

artcorer

✩✩✩✩✩✩✩
31 Окт 2019
11
0
Здравствуйте. Пытаюсь получить данные Nextion > ESP32. Как отправлять данные на дисплей я понял, всё работает. Но вот получить событие нажатой клавиши на дисплее — нет. Не работает именно вот этот кусок кода:
C++:
  String message = myNextion.listen(); //check for message
  if(message == "66 00 FF FF FF "){ // if a message is received...
    setupWiFi();
    myNextion.setComponentText("page1.t0", "Test");
Код полностью:
C++:
#include <Arduino.h>
#include <WiFi.h>
#include "time.h"
#include <iarduino_RTC.h>
#include <SoftwareSerial.h>
#include <Nextion.h>

SoftwareSerial nextion(17, 16);
iarduino_RTC watch(RTC_DS3231);
Nextion myNextion(nextion, 9600);

char* ssid     = "ds-4535";
char* password = "577544tr";
char servername[]="ntppool.org";
char* ntpServer = "de.pool.ntp.org";
long  gmtOffset_sec = 7200;
int   daylightOffset_sec = 3600;
int second, minute, hour, day, month, year, weekday, rem2;
String rem;
long current;
struct tm timeinfo;
uint32_t myTimer1, myTimer2;

WiFiClient client;

void setupWiFi() {
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  Serial.println();
  Serial.print("Подключение к WiFi..");
  myNextion.setComponentText("page1.connectwifi", "Connecting to WiFi...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
    if (millis() - myTimer1 >= 10000) {
        Serial.println(".");
        Serial.println("Попытка подключения к WiFi не удалась");
        myNextion.setComponentText("page1.connectwifi", "Connecting to WiFi error");
        myTimer1 = millis();
        WiFi.disconnect();
        Serial.println("Отключение от WiFi");
        myNextion.setComponentText("page1.connectwifi1", "WiFi to disconnected");
        break;
    } else {
      if (WiFi.status() == WL_CONNECTED) {
        if (client.connect(servername, 80)) {
          Serial.println(".подключено!");
          myNextion.setComponentText("page1.connectwifi1", ".connected!");
          Serial.println("Соединение с интернетом установленно");
          myNextion.setComponentText("page1.connectwifi2", "Internet connected");
          Serial.print("Хост: ");
          Serial.println(servername);
          myNextion.setComponentText("page1.connectwifi3", servername);
          Serial.println("IP address: ");
          Serial.println(WiFi.localIP());
          int LIP = WiFi.localIP();
          myNextion.setComponentText("page1.connectwifi4", String (LIP));
        } else {
           Serial.println(".");
           Serial.println("Соединение с WiFi установленно, но");
           Serial.println("отсутствует соединение с интернетом");
           myNextion.setComponentText("page1.connectwifi1", "WiFi connected but not Internet");
           WiFi.disconnect();
           Serial.println("Отключение от WiFi");
           myNextion.setComponentText("page1.connectwifi2", "WiFi to disconnected");
           break;
        }
      }
    }
  }
}

void timeSync() {
  if (client.connect(servername, 80)) {
    getLocalTime(&timeinfo);
    second = timeinfo.tm_sec;
    minute = timeinfo.tm_min;
    hour = timeinfo.tm_hour;
    day = timeinfo.tm_mday;
    month = timeinfo.tm_mon + 1;
    year = timeinfo.tm_year + 1900;
    rem = year;
    rem.remove(0, 1);
    rem2 = rem.toInt();
    watch.settime(second, minute, hour, day, month, rem2);
    Serial.println("Время синхронизированно");
    Serial.print("Сервер синхронизации: ");
    Serial.println(ntpServer);
  } else {
    Serial.println("Ошибка получения данных с интернета");
    Serial.println("Запись времени не была произведена");
  }

}

void setup() {
   Serial.begin(115200);
   setupWiFi();
   myNextion.init();
   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
   watch.begin();
   timeSync();
}

void loop() {
  if (client.connect(servername, 80)) {
      getLocalTime(&timeinfo);
      second = timeinfo.tm_sec;
      minute = timeinfo.tm_min;
       hour = timeinfo.tm_hour;
      day = timeinfo.tm_mday;
      month = timeinfo.tm_mon + 1;
      year = timeinfo.tm_year + 1900;
      weekday = timeinfo.tm_wday + 8;
      Serial.print("Синхронизированное время:   ");
      Serial.print(day);
      Serial.print("/");
      Serial.print(month);
      Serial.print("/");
      Serial.print(year);
      Serial.print(" --- ");
      Serial.print(hour);
      Serial.print(":");
      Serial.print(minute);
      Serial.print(":");
      Serial.println(second);
  } else {
      Serial.println("Время не синхронизированно");
  }
  Serial.print("Записанное время:           ");
  Serial.println(watch.gettime("d/m/Y, H:i:s"));
  myNextion.setComponentText("time", watch.gettime("H:i:s"));
  myNextion.setComponentText("date", watch.gettime("d/m/Y"));


  String message = myNextion.listen(); //check for message
  if(message == "66 00 FF FF FF "){ // if a message is received...
    setupWiFi();
    myNextion.setComponentText("page1.t0", "Test");
  }

  delay(800);                                 
}
Может кто сталкивался с проблемой? Прикрепляю используемую библиотеку.
 

Вложения

b707

★✩✩✩✩✩✩
4 Июн 2020
54
18
Здравствуйте. Пытаюсь получить данные Nextion > ESP32. Как отправлять данные на дисплей я понял, всё работает. Но вот получить событие нажатой клавиши на дисплее — нет. Не работает именно вот этот кусок кода:
C++:
  String message = myNextion.listen(); //check for message
  if(message == "66 00 FF FF FF "){ // if a message is received...
    setupWiFi();
    myNextion.setComponentText("page1.t0", "Test");
а вы в библиотеку заглядывали? в вашей библиотеке метод listen() не возвращает строчек типа "66 00 FF FF FF ", он их сначала преобразовывает в зависимости от типа сообщкения, например в случае нажатия кнопки он возвращает только номер кнопки. то есть вместо "66 00 FF FF FF " на выходе у вас будет только "0" и ничего больше

Смотрите исходный код метода listen() в файле Nextion.cpp.