Problema no Codigo MULT ITAG

Projetos de ESP32
lelis
Novato
Mensagens: 2
Registrado em: 25/Mar/2019, 16:29

Problema no Codigo MULT ITAG

Mensagem por lelis » 25/Mar/2019, 16:41

Ola Galera.

Estou com problema no código MULT ITAG, disponibilizado pelo nosso amigo, Prof. Fernando K,
Ao compilar este código aparece esta mensagem em anexo.


O código que ele disponibilizou foi este.

Código: Selecionar todos

#include <BLEDevice.h>

//Id dos clientes. É incrementado toda vez que se conecta um novo cliente
static uint16_t appId = 3;
//UUID do serviço que queremos do iTag
static const BLEUUID serviceUUID("0000ffe0-0000-1000-8000-00805f9b34fb");
//UUID da característica do serviço (botão do iTag)
static const BLEUUID characteristicUUID("0000ffe1-0000-1000-8000-00805f9b34fb");

//Classe responsável por controlar cada iTag
class ITag : public BLENotifier {
    public:
        int pinNumber; //número do pino vinculado a este iTag
        int pinStatus = HIGH; //status autal do pino (HIGH ou LOW)
        BLEClient* client; //cliente da conexão com o iTag
        std::string address; //endereço do iTag ao qual irá se conectar

        ITag(std::string addrs, int pNum)
        {
            //Vinculamos os valores do endereço, número do pino, colocamos como saída
            address = addrs;
            pinNumber = pNum;
            pinMode(pinNumber, OUTPUT);
            digitalWrite(pinNumber, pinStatus);
        }

        void connect()
        {
            //Verificamos se já havia um cliente antes e desconectamos caso afirmativo
            if(client != NULL)
            {
                client->disconnect();
                delete client;
            }

            //Criamos o cliente com uma nova id e conectamos ao iTag
            client = BLEDevice::createClient(appId++);
            BLEAddress bleAddress(address);
            boolean connected = client->connect(bleAddress);
            
            //Se a conexão foi bem sucedida
            if(connected)
            {
                //Obtemos o serviço e característica do botão do iTag e vinculamos a função onData
                //para responder o pressionar de botão 
                BLERemoteService* remoteService = client->getService(serviceUUID);   
                BLERemoteCharacteristic* remoteCharacteristic = remoteService->getCharacteristic(characteristicUUID);
                remoteCharacteristic->registerForNotify(this);
            }   
        }

        //Função chamada toda vez que o botão do iTag é pressionado
        void onData(BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify)
        {
            //Invertemos o estado atual do pino (de HIGH para LOW ou de LOW para HIGH)
            //e mandamos o novo estado para saída do pino
            pinStatus = !pinStatus;
            digitalWrite(pinNumber, pinStatus);
        }
};

//Intervalo entre cada scan 
#define SCAN_INTERVAL 3000
//Quantidade de iTag que temos (altere de acordo com a quantidade de iTags que tiver)
#define ITAG_COUNT 3

//Definição dos iTags que iremos utilizar
//Para cada iTag vinculamos o endereço dele (obtido através de um scan)
//e o pino cujo o estado será alterado quando o botão do iTag for pressionado
ITag iTags[ITAG_COUNT] = {
    ITag("ff:ff:c2:07:ab:16", 25),
    ITag("ff:ff:c2:07:9d:b6", 26),
    ITag("ff:ff:c2:07:8f:bf", 27)
};

//Variável que irá guardar o scan
BLEScan* pBLEScan;

//Quando ocorreu o último scan
uint32_t lastScanTime = 0; 

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

    //Iniciamos o BLE
    BLEDevice::init("");
    
    //Guardamos o objeto responsável pelo scan
    pBLEScan = BLEDevice::getScan();
    pBLEScan->setActiveScan(true);
}

void loop()
{
    //Tempo em milissegundos desde o boot
    uint32_t now = millis();

    //Se está no tempo de fazer scan
    if(now - lastScanTime > SCAN_INTERVAL)
    { 
        //Marca quando ocorreu o último scan e começa o scan
        lastScanTime = now;
        scan();
    }
}

void scan()
{
    //Realiza o scan por 2 segundos
    BLEScanResults results = pBLEScan->start(2);
    pBLEScan->stop();

    //Para cada dispositivo encontrado pelo scan
    for(int i=0; i<results.getCount(); i++)
    {
        //Guardamos a referência para o dispositivo e mostramos no monitor serial
        BLEAdvertisedDevice advertisedDevice = results.getDevice(i);
        Serial.println("advertisedDevice: " + String(advertisedDevice.toString().c_str()));

        //Para cada iTag que temos
        for(int j=0; j<ITAG_COUNT; j++)
        {
            //Se o dispositivo scaneado for um dos nossos iTags
            if(advertisedDevice.getAddress().toString() == iTags[j].address)
            {
                //Mandamos conectar
                iTags[j].connect();
            }
        }
    }
}

lelis
Novato
Mensagens: 2
Registrado em: 25/Mar/2019, 16:29

Re: Problema no Codigo MULT ITAG

Mensagem por lelis » 31/Mar/2019, 16:15

ESTA É A MENSAGEM

Responder