Teste Aplicativo( MIT Inventor) com Modulo Relé

        Diferente do ultimo teste estamos usando um App MIT que usa codificação em blocos para configurar o acionamento do modulo relé atrás da comunicação BLE do ESP32. Configuramos o App com 4 botões de chaveamento do modulo relé e mais 2 botões que fazem a conexão e desconexão com o ESP32 .
        Assim subimos mais um degrau para concluir o projeto pois temos um melhor entendimento das configurações do ESP32 e de uma configuração em blocos com o App. O esquema de ligação ficou bem simples usando as portas de 5V e GROUND do ESP32 para alimentar o Módulo de Relés, e usando as portas 2, 4, 5 e 16 do ESP32 para fazer o acionamento dos relés que para seu funcionamento utiliza o sinal em LOW, então foi configurada todas essas portas em HIGH para manter essas portas desativadas  até receber o comando para ligar. A baixo temos a foto do esquema de ligação e o código que foi escrito no Arduino IDE :

ESQUEMA DE LIGAÇÃO
        



 Código do Arduino IDE

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

BLECharacteristic *characteristicTX; //através desse objeto iremos enviar dados para o client


bool deviceConnected = false; //controle de dispositivo conectado

const int rele1 = 2; 
const int rele2 = 4;
const int rele3 = 5; 
const int rele4 = 18; 

#define SERVICE_UUID           "4FAFC201-1FB5-459E-8FCC-C5C9C331914B" // UART service UUID não podedo ser iguais
#define CHARACTERISTIC_UUID_RX "4FAFC202-1FB5-459E-8FCC-C5C9C331914B"
#define CHARACTERISTIC_UUID_TX "4FAFC203-1FB5-459E-8FCC-C5C9C331914B"


//callback para receber os eventos de conexão de dispositivos
class ServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
    };

    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};

//callback  para envendos das características
class CharacteristicCallbacks: public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *characteristic) {
      //retorna ponteiro para o registrador contendo o valor atual da caracteristica
      std::string rxValue = characteristic->getValue(); 
      //verifica se existe dados (tamanho maior que zero)
      if (rxValue.length() > 0) {
        Serial.println("*********");
        Serial.print("Esperando Comando ");// vai printar para mim no serial

        for (int i = 0; i < rxValue.length(); i++) {
          Serial.print(rxValue[i]);
        }

        Serial.println();

        // Do stuff based on the command received
        if (rxValue.find("Liga1") != -1) { 
          Serial.print("Ligar!");// vai printar para mim no serial
          digitalWrite(rele1, LOW);
        }
        else if (rxValue.find("Desl1") != -1) {
          Serial.print("Desligar");
          digitalWrite(rele1, HIGH);
        }
        else if (rxValue.find("Liga2") != -1) { 
          Serial.print("Ligar!");// vai printar para mim no serial
          digitalWrite(rele2, LOW);
        }
        else if (rxValue.find("Desl2") != -1) {
          Serial.print("Desligar");
          digitalWrite(rele2, HIGH);
        }
        else if (rxValue.find("Liga3") != -1) { 
          Serial.print("Ligar!");// vai printar para mim no serial
          digitalWrite(rele3, LOW);
        }
        else if (rxValue.find("Desl3") != -1) {
          Serial.print("Desligar");
          digitalWrite(rele3, HIGH);
        }
        else if (rxValue.find("Liga4") != -1) { 
          Serial.print("Ligar!");// vai printar para mim no serial
          digitalWrite(rele4, LOW);
        }
        else if (rxValue.find("Desl4") != -1) {
          Serial.print("Desligar");
          digitalWrite(rele4, HIGH);
        }
       
        Serial.println();
        Serial.println("*********");
      }
    }
};

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

  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);
  pinMode(rele4, OUTPUT);
  digitalWrite(rele1, HIGH);
  digitalWrite(rele2, HIGH);
  digitalWrite(rele3, HIGH);
  digitalWrite(rele4, HIGH);

  // Create the BLE Device
  BLEDevice::init("BLE_TOPICOS"); // nome do dispositivo bluetooth
  // Create the BLE Server
  BLEServer *server = BLEDevice::createServer(); //cria um BLE server 
  server->setCallbacks(new ServerCallbacks()); //seta o callback do server
  // Create the BLE Service
  BLEService *service = server->createService(SERVICE_UUID);
  // Create a BLE Characteristic para envio de dados
  characteristicTX = service->createCharacteristic(
                      CHARACTERISTIC_UUID_TX,
                      BLECharacteristic::PROPERTY_NOTIFY
                    );
                      
  characteristicTX->addDescriptor(new BLE2902());

  // Create a BLE Characteristic para recebimento de dados
  BLECharacteristic *characteristic = service->createCharacteristic(
                                         CHARACTERISTIC_UUID_RX,
                                         BLECharacteristic::PROPERTY_WRITE
                                       );

  characteristic->setCallbacks(new CharacteristicCallbacks());
  // Start the service
  service->start();
  // Start advertising (descoberta do ESP32)
  server->getAdvertising()->start();
  
  Serial.println("Esperando conexão");

}

void loop() {
     //se existe algum dispositivo conectado
    if (deviceConnected) {
      
          Serial.print("*** Aguardando comando: ");
//          Serial.print(txString);
          Serial.println(" ***");
      }
  
  
  delay(1000);

}

  

        Agora com a Versão 2 do aplicativo gerado no MIT App Inventor, foram modificado alguns parâmetros como por exemplo a quantidade de botões para 8 para fazer o acionamento e desacionamento das portas do modulo relé, o funcionamento baseia que despois de apertamos o botão ele envia uma string para o BLE onde ela é tratada e aciona a função que está configurada, como por exemplo se apertamos o botão  "Lamp_1 On" ele envia uma string "Liga1" onde ela é tratada para acionar a saída 2 do ESP32. Segue a lista de string que é enviado para o BLE:

  • Lamp1 On =  "Liga1"
  • Lamp2 On =  "Liga2 "
  • Lamp3 On =  "Liga3"
  • Lamp4 On =  "Liga4"
  • Lamp1 Off = "Desl1"
  • Lamp2 Off = "Desl2"
  • Lamp3 Off = "Desl3"
  • Lamp4 Off = "Desl4"
 Foto do App


Codificação em bloco


 Vídeo do funcionamento do Aplicativo



Comentários