Medidor Umidade Solo — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by guilherme_mts.

Components

Sketch code

struct DadosVaso
{
    String id;
    int umidade;
};

DadosVaso vasos[4] =
{
    {"VASO-01", 0},
    {"VASO-02", 0},
    {"VASO-03", 0},
    {"VASO-04", 0}
};

void setup()
{
    Serial.begin(115200);

    Serial2.begin(9600, SERIAL_8N1, 16, 17);

    Serial.println();
    Serial.println("===============================");
    Serial.println(" ESP32 PRINCIPAL");
    Serial.println(" Gerenciamento dos 4 vasos");
    Serial.println("===============================");
    Serial.println();

    Serial.println("Aguardando dados...");
}

void loop()
{
    if (Serial2.available())
    {
        String mensagem = Serial2.readStringUntil('\n');

        mensagem.trim();

        processarMensagem(mensagem);
    }
}

void processarMensagem(String mensagem)
{
    int separador = mensagem.indexOf(';');

    if (separador == -1)
    {
        Serial.println("Mensagem invalida: " + mensagem);
        return;
    }

    String id = mensagem.substring(0, separador);
    String valorTexto = mensagem.substring(separador + 1);

    id.trim();
    valorTexto.trim();

    int umidade = valorTexto.toInt();

    for (int i = 0; i < 4; i++)
    {
        if (vasos[i].id == id)
        {
            vasos[i].umidade = umidade;

            Serial.print("Dados recebidos -> ");
            Serial.print(id);
            Serial.print(": ");
            Serial.print(umidade);
            Serial.println("%");

            mostrarVasos();

            return;
        }
    }

    Serial.print("ID desconhecido: ");
    Serial.println(id);
}

void mostrarVasos()
{
    Serial.println();
    Serial.println("----- STATUS DOS VASOS -----");

    for (int i = 0; i < 4; i++)
    {
        Serial.print(vasos[i].id);
        Serial.print(" -> ");
        Serial.print(vasos[i].umidade);
        Serial.println("%");
    }

    Serial.println("----------------------------");
    Serial.println();
}