Skip to content

ESP32-S3 no connection #69

@dwiselka

Description

@dwiselka

Hello
I’m encountering an issue while using the ESP32-S3 with the EasyNextion library. Previously, I was working with the ESP8266, and everything functioned perfectly. However, after switching to the ESP32-S3, I can’t seem to get anything to work.

For reference, on the ESP32-S3, the Nextion display is connected to pins 9 and 10.
I am sending values to screen but nothing happen, code was working for esp8266.

Apologies for the poorly formatted code; I had it neatly organized in tabs but couldn’t upload it properly.

This is what i am seeing in serial port:

wartość licz: 0.00 Czas: 14:05:56 n1.val=22���n2.val=33��� wartość licz: 0.00 Czas: 14:06:01 n1.val=22���n2.val=33��� wartość licz: 0.00 Czas: 14:06:06 n1.val=22���n2.val=33��� wartość licz: 0.00 Czas: 14:06:11 n1.val=22���n2.val=33��� wartość licz: 0.00 Czas: 14:06:16

test

`#include <WiFi.h>
#include <HardwareSerial.h>
#include <Wire.h>
#include <RTClib.h>
#include "EasyNextionLibrary.h"
#include <NTPClient.h>
#include <WiFiUdp.h>
//#include "variables.h"
#include <FastLED.h>
unsigned long odczyt_licznika_milis = 0;
const long odczyt_licznika_czas = 5000; // 5s
unsigned long odczyt_delay = 0;
const long delay_50ms = 5000;

int temperatura_zadana_bojler = 25;
int temperatura_zadana_buffor_dolny = 50;
int temperatura_zadana_buffor_gorny = 50;
int temp_zadana_4 = 50;

int temperatura_act_bojler;
int temperatura_act_buffor_dolny;
int temperatura_act_buffor_gorny;
int temperatureC4;

int histereza_bojler = 5;
int histereza_buffor_dolny = 5;
int histereza_buffor_gorny = 5;
int histereza_4 = 5;
int test2 = 5;
int taryfa_nocna_h = 22;
int taryfa_nocna_m = 0;
int taryfa_dzienna_h = 6;
int taryfa_dzienna_m = 0;
int adjust_hour_RTC;
int adjust_minute_RTC;
float licz = 0;
uint8_t currentPage;



const char* ssid = "ssid";           
const char* password = "password";
WiFiUDP udp;
NTPClient timeClient(udp, "pool.ntp.org", 3600, 60000); // 3600 to offset (sekundy) dla strefy czasowej (np. 3600 dla CET)

// Konfiguracja pinów dla ESP32
#define RXD2 16//17  // RX dla modbus 35 na zlaczu
#define TXD2 17//16  // TX dla modbus 36 na zlaczu
#define txEnPin 18   // Pin Enable 37 na zlaczu
#define RXD3 9   // RX3 dla Nextion 
#define TXD3 10   // TX3 dla Nextion (inny pin)
#define SDA_PIN 21  // Domyślny pin SDA dla ESP32
#define SCL_PIN 22  // Domyślny pin SCL dla ESP32

EasyNex myNex(Serial2);  // Używamy Serial2 zamiast SoftwareSerial


HardwareSerial ModbusSerial(2);  // Drugi port sprzętowy UART

unsigned char ibuf[128];
float liczAVcc = 0;
int x = 12;

String response = "";

void setup() {
  Serial.begin(115200);
  delay(200);
  Serial.println("\nUruchamianie...");
  Serial.println("Łączenie z WiFi...");
  WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Łączenie...");
    delay(100);
  }
  Serial.println("Połączono z WiFi!");
  delay(1000);
  timeClient.begin();
  delay(500);
  Serial.println("Otrzymywanie czasu NTP...");
  
  



  delay(1000);
  // Inicjalizacja Serial2 dla Nextion
  Serial2.begin(9600, SERIAL_8N1, RXD3, TXD3);
  delay(100);
  myNex.begin(9600);

  // Inicjalizacja sprzętowego portu UART dla Modbusa
  ModbusSerial.begin(9600, SERIAL_8N1, RXD2, TXD2);
  
  pinMode(txEnPin, OUTPUT);
  digitalWrite(txEnPin, LOW);

  // Inicjalizacja I2C
  Wire.begin(SDA_PIN, SCL_PIN);
  delay(1000);
  Serial.println("Setup zakończony.");
}




void loop() {

  unsigned long currentMillis = millis();
  myNex.NextionListen(); 
  //currentPage = myNex.currentPageId;
  timeClient.update();


  if (currentMillis - odczyt_delay >= delay_50ms){
    odczyt_delay = currentMillis;
    //Time();

    
    //readTemp1();
    readTemp2();
    readTemp3();
    // readTemp4();

    // zadana_temperatura_1();
    // zadana_temperatura_2();
    // zadana_temperatura_3();
    // zadana_temperatura_4();
    // zadana_histereza_1();
    // zadana_histereza_2();
    // zadana_histereza_3();
    // zadana_histereza_4();
  }



  if (currentMillis - odczyt_licznika_milis >= odczyt_licznika_czas){
    odczyt_licznika_milis = currentMillis;
    MOC();
    zapytaniedoLicznika(0);
    timeClient.update();
    Serial.println("");
    Serial.print("Czas: ");
    Serial.println(timeClient.getFormattedTime());
  }
  
  if (ModbusSerial.available() > 0) {
    parsujDanezLicznika();
  }
}

void zapytaniedoLicznika(unsigned char startadr) {
  unsigned char Inputs[] = { 0x02, 0x04, 0x00, 0x18, 0x00, 0x02, 0xFF, 0xFF };
  wyslij_po_rs(Inputs, 6);
}

void parsujDanezLicznika() {
  delay(50);
  int licz = 0;
  while (ModbusSerial.available() && licz < 32) {
    ibuf[licz] = ModbusSerial.read();
    licz++;
  }

  if (licz == 0) {
    Serial.println("Nie odebrano żadnych danych!");
    return;
  }

  if (licz < 5) {
    Serial.println("Pakiet zbyt krótki!");
    return;
  }

  uint16_t inCRC = (ibuf[licz - 1] << 8) + ibuf[licz - 2];
  uint16_t calcCRC = calculateCRC(ibuf, licz - 2);

  if (inCRC != calcCRC) {
    Serial.printf("Błąd CRC! Obliczone: 0x%04X, Odebrane: 0x%04X\n", calcCRC, inCRC);
    return;
  }

  liczAVcc = bin2float(3);
  
  if (liczAVcc >= 9.5) x = 9;
  else if (liczAVcc >= 8.5) x = 8;
  else if (liczAVcc >= 7.5) x = 7;
  else if (liczAVcc >= 6.5) x = 6;
  else if (liczAVcc >= 5.5) x = 5;
  else if (liczAVcc >= 4.5) x = 4;
  else if (liczAVcc >= 3.5) x = 3;
  else if (liczAVcc >= 2.5) x = 2;
  else if (liczAVcc >= 1.5) x = 1;
  else x = 0;
}

float bin2float(int istart) {
  uint32_t bin = ((uint32_t)ibuf[istart] << 24) | ((uint32_t)ibuf[istart + 1] << 16) | 
                 ((uint32_t)ibuf[istart + 2] << 8) | (uint32_t)ibuf[istart + 3];
  float result;
  memcpy(&result, &bin, sizeof(float));
  return result;
}

uint16_t calculateCRC(unsigned char *buf, int len) {
  uint16_t crc = 0xFFFF;
  for (int pos = 0; pos < len; pos++) {
    crc ^= (uint16_t)buf[pos];
    for (int i = 8; i != 0; i--) {
      if ((crc & 0x0001) != 0) {
        crc >>= 1;
        crc ^= 0xA001;
      } else {
        crc >>= 1;
      }
    }
  }
  return crc;
}

void wyslij_po_rs(unsigned char inbuf[20], int ile) {
  uint16_t CRC16 = calculateCRC(inbuf, ile);
  inbuf[ile] = CRC16 & 0xFF;
  inbuf[ile + 1] = (CRC16 >> 8) & 0xFF;

  while (ModbusSerial.available()) ModbusSerial.read();

  digitalWrite(txEnPin, HIGH);
  delay(20);
  ModbusSerial.write(inbuf, ile + 2);
  ModbusSerial.flush();
  delay(5);
  digitalWrite(txEnPin, LOW);
}


void MOC() { 
  myNex.writeNum("x0.val", liczAVcc);  // wysyłanie wartości do komponentu x0 na wyświetlaczu
  Serial.println("");
  Serial.print("wartość licz: ");
  Serial.print(liczAVcc);
}


void Time(){ 
  // Wyświetlenie tylko godziny w formacie HH:MM:SS
  //Serial.print("Godzina: ");
  //Serial.print(now.hour(), DEC);
  //Serial.print(":");
  //Serial.println(now.minute(), DEC);
  //Serial.print(":");
  //Serial.print(now.second(), DEC);
  //String response =  test1234;   //String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second());
  //Serial.print("t7.txt=");
  //Serial.print("\""); 
  //Serial.print("Hot!");
  //Serial.print(message);
  //Serial.print("\"");
  //Serial.write(0xff);
  //Serial.write(0xff);
  //Serial.write(0xff);
  //delay(50);
  // Tworzymy string z czasem
  
  //Serial.print("t7.txt=\"");  // Otwieramy cudzysłów
  //Serial.print(timeStr);      // Wyświetlamy zmienną z czasem
  //Serial.print("\"");         // Zamykamy cudzysłów
  //Serial.write(0xff);
  //Serial.write(0xff);
  //Serial.write(0xff);
}


void Taryfy(){ 
  String timeStr_n = String(taryfa_nocna_h) + ":" + String(taryfa_nocna_m) + ": 00";
  myNex.writeStr("t8.txt", timeStr_n);
  String timeStr_d = String(taryfa_dzienna_h) + ":" + String(taryfa_dzienna_m) + ": 00";
  myNex.writeStr("t9.txt", timeStr_d);
}

void readTemp1(){ 
  temperatura_act_bojler = 11; 
  myNex.writeNum("n0.val=", temperatura_act_bojler);
  //Serial.print("n0.val=");
  //Serial.print(temperatura_act_bojler);
  //Serial.write(0xff);
  //Serial.write(0xff);
  //Serial.write(0xff);
  //delay(10);
}

void readTemp2(){ 
  temperatura_act_buffor_dolny = 22;
  Serial.print("n1.val=");
  Serial.print(temperatura_act_buffor_dolny);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void readTemp3(){ 
  temperatura_act_buffor_gorny = 33;
  Serial.print("n2.val=");
  Serial.print(temperatura_act_buffor_gorny);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void readTemp4(){   
  temperatureC4 = 44;
  Serial.print("n3.val=");
  Serial.print(temperatureC4);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(50);
  delay(10);
}


void zadana_temperatura_1(){   //        TEMPERATURA ZADANA BOJLER
  Serial.print("n10.val=");
  Serial.print(temperatura_zadana_bojler);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void zadana_temperatura_2(){   //        TEMPERATURA ZADANA BUFFOR GÓRA
  Serial.print("n11.val=");
  Serial.print(temperatura_zadana_buffor_dolny);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void zadana_temperatura_3(){   //        TEMPERATURA ZADANA BUFFOR DÓŁ
  Serial.print("n12.val=");
  Serial.print(temperatura_zadana_buffor_gorny);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void zadana_temperatura_4(){   //        TEMPERATURA ZADANA REZERWA
  Serial.print("n13.val=");
  Serial.print(temp_zadana_4);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}




void zadana_histereza_1(){   //        TEMPERATURA ZADANA BOJLER
  Serial.print("n20.val=");
  Serial.print(histereza_bojler);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void zadana_histereza_2(){   //        TEMPERATURA ZADANA BUFFOR GÓRA
  Serial.print("n21.val=");
  Serial.print(histereza_buffor_dolny);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void zadana_histereza_3(){   //        TEMPERATURA ZADANA BUFFOR DÓŁ
  Serial.print("n22.val=");
  Serial.print(histereza_buffor_gorny);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

void zadana_histereza_4(){   //        TEMPERATURA ZADANA REZERWA
  Serial.print("n23.val=");
  Serial.print(histereza_4);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(10);
}

  /* Create a button on Nextion
   * Write in the Touch Release Event of the button
   * this command:    printh 23 02 54 01
   * Every time the button is pressed, the trigger1() function will run
   * and the code inside will be executed once
   */

/* trigger() is the most important method of the library. 
 * And this is because, it gives you the ability to use the predefined functions and run your code from there. 
 * These predefined functions are named trigger1(), trigger2(), trigger3()... up to trigger50(). 
 * You can use them as a simple void out of the loop, in which you will have written a block of code to run every time it is called.
 * You can call those trigger() functions and run the code they contain anytime by simply writing in a Nextion Event the command:
 * `printh 23 02 54 XX` , where `XX` the id for the triggerXX() in HEX.
 * Example: printh 23 02 54 01 to call trigger1() ... printh 23 02 54 0A to call trigger10() and so on...
 */


void trigger1(){    // sterowanie led
  /* Create a button on Nextion
   * Write in the Touch Release Event of the button
   * this command:    printh 23 02 54 01
   * Every time the button is pressed, the trigger1() function will run
   * and the code inside will be executed once
   */
  digitalWrite(13, !digitalRead(13)); // If LED_BUILTIN is ON, turn it OFF, or the opposite
  if(digitalRead(13) == HIGH){
    myNex.writeNum("b0.bco", 2016); // Set button b0 background color to GREEN (color code: 2016)
    myNex.writeStr("b0.txt", "ON"); // Set button b0 text to "ON"
    
  }else if(digitalRead(13) == LOW){
    myNex.writeNum("b0.bco", 63488); // Set button b0 background color to RED (color code: 63488)
    myNex.writeStr("b0.txt", "OFF"); // Set button b0 text to "ON"
  }
}
void trigger2(){ //dodanie tempo zadanej do temp1
  temperatura_zadana_bojler = temperatura_zadana_bojler + 5;
}

void trigger3(){ // odjecie 5 od temp1
  temperatura_zadana_bojler = temperatura_zadana_bojler - 5;
}

void trigger4(){ //dodanie do temp2
  temperatura_zadana_buffor_dolny = temperatura_zadana_buffor_dolny + 5;
}

void trigger5(){ //odjecie od temp2
  temperatura_zadana_buffor_dolny = temperatura_zadana_buffor_dolny - 5;
}

void trigger6(){ //doadnia edo temp 3
  temperatura_zadana_buffor_gorny = temperatura_zadana_buffor_gorny + 5;
}

void trigger7(){ // odjecie od temp 3
  temperatura_zadana_buffor_gorny = temperatura_zadana_buffor_gorny - 5;
}

void trigger8(){ //dodanie do temp 4
  temp_zadana_4 = temp_zadana_4 + 5;
}

void trigger9(){ //odjecie od temp 4
  temp_zadana_4 = temp_zadana_4 - 5;
}

void trigger10(){ //DODANIE DO HISTEREZY 1
  histereza_bojler = histereza_bojler + 1;
}

void trigger11(){ //ODJĘCIE OD HISTEREZY 1
  histereza_bojler = histereza_bojler - 1;
}

void trigger12(){ //DODANIE DO HISTEREZY 2
  histereza_buffor_dolny = histereza_buffor_dolny + 1;
}

void trigger13(){ //ODJECIE OD HISTEREZY 2
  histereza_buffor_dolny = histereza_buffor_dolny - 1;
}

void trigger14(){ //DODANIE DO HISTEREZY 3
  histereza_buffor_gorny = histereza_buffor_gorny + 1;
}

void trigger15(){ //ODJECIE OD HISTEREZY 3
  histereza_buffor_gorny = histereza_buffor_gorny - 1;
}

void trigger16(){ //DODANIE DO HISTEREZY 4
  histereza_4 = histereza_4 + 1;
}

void trigger17(){ //ODJECIE OD HISTEREZY 4
  histereza_4 = histereza_4 - 1;
}

void trigger18(){ //Zapis czasu

}

void trigger19(){ //Zapis taryfy nocnej
  taryfa_nocna_h = myNex.readNumber("n60.val");
  taryfa_nocna_m = myNex.readNumber("n61.val");

}

void trigger20(){ //Zapis taryfy dziennej
  taryfa_dzienna_h = myNex.readNumber("n62.val");
  taryfa_dzienna_m = myNex.readNumber("n63.val");
}

`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions