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:
Foto do App
Codificação em bloco
Vídeo do funcionamento do Aplicativo
Comentários
Postar um comentário