Display Nextion con Arduino

Buona sera, sto cercando di realizzare una piccola centralina
Con questo display , usando lo schema a stati
Con più pagine sul display così da mettere ogni pagina in uno stato mi funziona solo la prima pagina le altre non si aggiornano i valori.

ciao , cerca su YouTube Italia, un noto maker ha caricato un video dove utilizza questo tipo di schermo, e spiega molto bene come impostarlo e tutto

Salve, come faccio a cambiare pagina sul display con un pulsante da Arduino?

  <nextion_serial>.print(F("page <page_id>"));
  <nextion_serial>.write(0xff);
  <nextion_serial>.write(0xff);
  <nextion_serial>.write(0xff);

Dove <nextion_serial> è la seriale collegata al display e <page_id> il numero della pagina voluta (partendo da 0). Ovviamente dando per scontato che collegamenti e baudrate siano a posto.
Trovi questo e molto altro qui.

Ciao, Ale.

Scusami ma questo codice funziona con la libreria?

Quale libreria?
E comunque quel codice non usa nessuna libreria.

Ciao, Ale.

La libreria del display comunque non va.
Serial.print("page 1");

Ovviamente dando per scontato che collegamenti e baudrate siano a posto.

Ciao, Ale.

Scusa ma se utilizzo la sua libreria e funzionano
Tutti i comandi bidirezionali .
Devo includere anche baudrate?

No, devi scrivere il codice completo come sopra, Serial.print("page 1"); da solo non basta. Comunque se usi la libreria Itead leggi la documentazione, mi sembra strano che non ci sia un comando per cambiare pagina. E comunque quella libreria presenta diversi problemi, oltre a non essere aggiornata da anni. Guarda nelle sezione display, uno dei post fissi parla proprio di come usare i Nextion senza la libreria.

Ciao, Ale.

Buongiorno grazie mille per il consiglio.
Ho sempre pensato che il successo di Arduino
E proprio questo forum.

Salve, sono riuscito a cambiare pagina da Arduino al display,
ora vorrei cambiare lo stato di uno switch dal display?

Salve, sono riuscito a cambiare pagina da Arduino al display,

Come? Usando la libreria?

ora vorrei cambiare lo stato di uno switch dal display

Immagino tu intenda un dual-state button, comunque usando la libreria non saprei, senza libreria puoi usare lo stesso codice postato sopra, sostituendo page <page_id> con click ,1 dove è l’ID o il nome attribuito all’oggetto.

Comunque, scusami la franchezza, ma non ho ancora capito se hai difficoltà con la lingua italiana o se scrivi così poco e criptico di tuo, cerca di esporre meglio i tuoi problemi, ad esempio non hai ancora detto che hardware usi sia come display che come MCU, insomma leggi qui e regolati di conseguenza, grazie.

Ciao, Ale.

Scusa per come espongo i problemi , cercherò di essere più chiaro possibile.
Componenti del progetto: Arduino Mega ,display Nextion ,libreria -ITEADLIB_Arduino_Nextion-master,Sim900
con la libreria di Blynk.
il mio problema che non ho descritto nei post precedenti e che Arduino a volte non rivela la pressione del pulsante
display.
Facendo varie prove ho notato che se elimino la connessione a Blynk Arduino e molto più reattivo.

[code]


//Blynk
#include <Blynk.h>
BlynkTimer timer;
#define BLYNK_PRINT Serial
#define TINY_GSM_MODEM_SIM900
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>
#define SerialAT Serial3
const char apn[]  = "internet.it";
const char user[] = "";
const char pass[] = "";
const char auth[] = "5GK3uWqWQ";
TinyGsm modem(SerialAT);



#include <Nextion.h>
const int voltageSensorPin = A0;          // sensor pin
float vIn;                                // measured voltage (3.3V = max. 16.5V, 5V = max 25V)
float vOut;
float voltageSensorVal;                   // value on pin A3 (0 - 1023)
const float factor = 5.0;               // reduction factor of the Voltage Sensor shield
const float vCC = 5.2;  // Arduino input voltage (measurable by voltmeter)
#define K_NUMPIN 6
const byte pina[K_NUMPIN] = {A0, A2, A4, A6, A8, A10};
float val[K_NUMPIN];
int val1[K_NUMPIN];
float batt_m, batt_c, pannello1, pannello2, rete220, t, h, tc = 0;
int mq3, mq7 = 0;
float liv_batt_c, liv_batt_m, liv_pannello_1 , liv_pannello_2, tempC = 0;
int liv_temp, liv_umi = 0;
#include <DHT.h>
#define DHTPIN 10
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(6);
DallasTemperature temp(&oneWire);

NexProgressBar bar = NexProgressBar(0, 5, "j0");
NexProgressBar barJ1 = NexProgressBar(0, 14, "j1");
NexNumber txtfloat = NexNumber(0, 16, "x0");
NexNumber txtfloatX1 = NexNumber(0, 17, "x1");
NexNumber txt_temp = NexNumber(0, 35, "n8");
NexNumber txtfloat_umi = NexNumber(0, 34, "n7");
NexProgressBar bar_temp = NexProgressBar(0, 20, "j2");
NexProgressBar bar_umi = NexProgressBar(0, 31, "j4");
NexText txt_online =  NexText(0, 36, "t17");
NexNumber txtfloat_temp = NexNumber(2, 13, "n32");
NexNumber txt_pannello_1 = NexNumber(1, 8, "x01");
NexNumber txt_pannello_2 = NexNumber(1, 9, "x11");
NexProgressBar bar_pannello_1 = NexProgressBar(1, 1, "j01");
NexProgressBar bar_pannello_2 = NexProgressBar(1, 4, "j11");
NexButton bp = NexButton(2, 8, "b22");
NexButton bm = NexButton(2, 13, "b32");
NexButton b_salva = NexButton(2, 19, "b122");
NexButton b_test = NexButton(2, 15, "b022");
NexNumber txt_imp_ventola = NexNumber(2, 10, "n024");
NexNumber txt_imp_ventola_salva = NexNumber(2, 17, "n022");
NexButton b_avanti_page0 = NexButton(0, 27, "b0");
NexButton b_indietro_page1 = NexButton(1, 14, "b01");
NexButton b_avanti_page1 = NexButton(1, 15, "b21");
NexButton b_indietro_page2 = NexButton(2, 2, "b02");
//Blynk page 4
NexText txt_auth =  NexText(4, 2, "t04");
NexText txt_apn =  NexText(4, 5, "t14");
NexText txt_user =  NexText(4, 6, "t34");
NexText txt_pass =  NexText(4, 8, "t44");
NexText txt_modem =  NexText(4, 10, "t54");
NexNumber txt_n6 = NexNumber(0, 29, "n6");
NexTouch *nex_listen_list[] = {
  &bp, &bm, &b_salva, &b_test, &b_avanti_page0, &b_indietro_page1, &b_avanti_page1, &b_indietro_page2,  NULL
};
bool usaBlynk = true;
bool FIRST = true;
unsigned long t1, dt;
int cont = 1;
int piu = 0;
int salvato = 0;
#define PIN_BLYNK 2 //BLYNK
#define PIN_8 8 //tone
void setup() {
  Serial.begin(9600);
  //Serial2.begin(9600);
  nexSerial.begin(115200);
  nexInit();
  dht.begin();
  temp.begin();
  SerialAT.begin(9600);//sim900
  delay(6000);
  modem.restart();


  b_avanti_page0.attachPop(bt_avanti_page0, &b_avanti_page0);
  b_indietro_page1.attachPop(bt_indietro_page1, &b_indietro_page1);
  b_avanti_page1.attachPop(bt_avanti_page1, &b_avanti_page1);
  b_indietro_page2.attachPop(bt_indietro_page2, &b_indietro_page2);
  //inizio blynk



  pinMode(PIN_8, OUTPUT);//TONE
  digitalWrite(PIN_8, HIGH);

  pinMode(PIN_BLYNK, INPUT_PULLUP);//BLYNK
  usaBlynk = (digitalRead(PIN_BLYNK) == HIGH);
  if (usaBlynk) {
    BLYNK();

  }
  timer.setInterval(20000L, connetti);
  timer.setInterval(1000L, updateNextion);
  timer.setInterval(1L, nexLoop);
}

void loop() {

  if (usaBlynk) {

    Blynk.run();
    timer.run();
  } else {
    nexLoop(nex_listen_list);
    dt = millis() - t1;
    if (dt > 1000) {
      updateNextion();
      txt_online.setText("< offline >");
      t1 = millis();
    }

  }
}
void nexLoop() {
  nexLoop(nex_listen_list);
}
void connetti() {
  if (  Blynk.connected() == false ) {
    BLYNK();
  }
}
void BLYNK() {
  Serial2.print(F("page 4"));
  Serial2.write(0xff);
  Serial2.write(0xff);
  Serial2.write(0xff);
  txt_auth.setText(auth);
  txt_apn.setText(apn);
  txt_user.setText(user);
  txt_pass.setText(pass);
  txt_modem.setText("Avvia  modem...");
  Blynk.begin(auth, modem, apn, user, pass);
  txt_modem.setText("               ");
  txt_modem.setText("<<  OK  >>");
  delay(4000);


}
void updateNextion() {

  for (byte i = 0; i < K_NUMPIN; i++)
  {
    int aVal = analogRead(pina[i]);
    val1[i] = map(aVal, 0, 1024, 0, 1000);
    val[i] = (aVal / 1023.0) * vCC * factor * 10;
    batt_c =   val[0];
    batt_m =   val[1];
    pannello1 = val[4];
    pannello2 = val[4];
    rete220 =  val[5];
    mq3 =      val1[3];
    mq7 =      val1[2];

  }
  h = dht.readHumidity();
  t = dht.readTemperature();
  temp.requestTemperatures();
  float tempC = temp.getTempCByIndex(0);
  tc = temp.getTempCByIndex(0);

  switch (cont) {
    case 1:
      page00();
      break;
    case 2:
      page11();
      break;
    case 3 :
      page22();
      break;
    case 4:

      break;
    case 5:

      break;
  }
}

void page00() {
  if (FIRST) {
    Serial2.print(F("page 0"));
    Serial2.write(0xff);
    Serial2.write(0xff);
    Serial2.write(0xff);
    FIRST = false;
  }
  if (  Blynk.connected() == false ) {
    txt_online.setText("offline");
  } else {
    txt_online.setText("online");
  }

  float liv_batt_c = map ( val[0], 0, 160, 0, 100);
  float liv_batt_m = map ( val[1], 0, 160, 0, 100);
  int liv_temp = map ( t, 0, 45, 0, 100);
  int liv_umi = map ( h, 0, 100, 0, 100);
  bar.setValue(liv_batt_c);
  barJ1.setValue(liv_batt_m);
  txtfloat.setValue ( batt_c);
  txtfloatX1.setValue ( batt_m);
  txt_temp.setValue (t);
  txtfloat_umi.setValue (h);
  txtfloat_temp.setValue (tempC);
  bar_temp.setValue(liv_temp);
  bar_umi.setValue(liv_umi);




}
void  page11() {
  if (FIRST) {
    Serial2.print(F("page 1"));
    Serial2.write(0xff);
    Serial2.write(0xff);
    Serial2.write(0xff);
    FIRST = false;
  }
  float liv_pannello_1 = map ( val[4], 0, 150, 0, 100);
  float liv_pannello_2 = map ( val[4], 0, 150, 0, 100);
  bar_pannello_1.setValue(liv_pannello_1);
  bar_pannello_2.setValue(liv_pannello_2);
  txt_pannello_1.setValue(pannello1);
  txt_pannello_2.setValue(pannello2);

  unsigned long t12, dt2;
  dt2 = millis() - t12;
  if (dt2 > 61000) {
    cont = 1;
    t12 = millis();
  }

}
void page22() {
  if (FIRST) {
    Serial2.print(F("page 2"));
    Serial2.write(0xff);
    Serial2.write(0xff);
    Serial2.write(0xff);
    FIRST = false;
  }
  txt_imp_ventola_salva.setValue(salvato);
  unsigned long t11, dt1;
  dt1 = millis() - t11;
  if (dt1 > 61000) {
    cont = 1;
    t11 = millis();
  }

}
void bt_avanti_page0(void *ptr) {
  tone(PIN_8, 400, 100);
  cont = 2;
  delay(100);
  FIRST = true;
}
void bt_indietro_page1(void *ptr) {
  tone(PIN_8, 400, 100);
  cont = 1;
  FIRST = true;
}
void bt_avanti_page1(void *ptr) {
  tone(PIN_8, 400, 100);
  cont = 3;
  FIRST = true;
}
void bt_indietro_page2(void *ptr) {
  tone(PIN_8, 400, 100);
  cont = 2;
  FIRST = true;
}

[/code]

Mi spiace, ma non ho mai usato nè la libreria della Itead nè Blink, quindi non so esserti di aiuto.

Ciao, Ale.