├── ESP32_BLE_DHT11_2_0.aia ├── README.md └── esp32-ble-dht11.ino /ESP32_BLE_DHT11_2_0.aia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makerhero/esp32-ble-dht11/788585b679922259134c287dbcd1e868ee458a7c/ESP32_BLE_DHT11_2_0.aia -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![N|Solid](https://www.makerhero.com/wp-content/uploads/2023/02/makerhero-logo.svg)](https://filipeflop.com) 2 | 3 | # Bluetooth Low Energy com ESP32 e DHT11 4 | 5 | ![ESP32 BLE DHT11](https://www.filipeflop.com/wp-content/uploads/2018/03/imagem001.jpg) 6 | 7 | ### Acesse o tutorial no [Blog da MakerHero](https://www.makerhero.com/blog/bluetooth-low-energy-com-esp32-e-dht11/) para mais informações sobre este projeto. 8 | -------------------------------------------------------------------------------- /esp32-ble-dht11.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Programa baseado no programa original desenvolvido por Timothy Woo 3 | * Tutorial do projeto original; https://www.hackster.io/botletics/esp32-ble-android-arduino-ide-awesome-81c67d 4 | * Modificado para ler dados do sensor DHT11 5 | */ 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | BLECharacteristic *pCharacteristic; 17 | 18 | bool deviceConnected = false; 19 | const int LED = 2; // Could be different depending on the dev board. I used the DOIT ESP32 dev board. 20 | 21 | /* 22 | * Definição do DHT11 23 | */ 24 | #define DHTPIN 23 // pino de dados do DHT11 25 | #define DHTTYPE DHT11 // DHT 11 26 | 27 | DHT dht(DHTPIN, DHTTYPE); 28 | 29 | int humidity; 30 | int temperature; 31 | 32 | // Veja o link seguinte se quiser gerar seus próprios UUIDs: 33 | // https://www.uuidgenerator.net/ 34 | 35 | #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID 36 | #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" 37 | #define DHTDATA_CHAR_UUID "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" 38 | 39 | 40 | class MyServerCallbacks: public BLEServerCallbacks { 41 | void onConnect(BLEServer* pServer) { 42 | deviceConnected = true; 43 | }; 44 | 45 | void onDisconnect(BLEServer* pServer) { 46 | deviceConnected = false; 47 | } 48 | }; 49 | 50 | class MyCallbacks: public BLECharacteristicCallbacks { 51 | void onWrite(BLECharacteristic *pCharacteristic) { 52 | std::string rxValue = pCharacteristic->getValue(); 53 | Serial.println(rxValue[0]); 54 | 55 | if (rxValue.length() > 0) { 56 | Serial.println("*********"); 57 | Serial.print("Received Value: "); 58 | 59 | for (int i = 0; i < rxValue.length(); i++) { 60 | Serial.print(rxValue[i]); 61 | } 62 | Serial.println(); 63 | Serial.println("*********"); 64 | } 65 | 66 | // Processa o caracter recebido do aplicativo. Se for A acende o LED. B apaga o LED 67 | if (rxValue.find("A") != -1) { 68 | Serial.println("Turning ON!"); 69 | digitalWrite(LED, HIGH); 70 | } 71 | else if (rxValue.find("B") != -1) { 72 | Serial.println("Turning OFF!"); 73 | digitalWrite(LED, LOW); 74 | } 75 | } 76 | }; 77 | 78 | void setup() { 79 | Serial.begin(115200); 80 | 81 | pinMode(LED, OUTPUT); 82 | 83 | // Create the BLE Device 84 | BLEDevice::init("ESP32 DHT11"); // Give it a name 85 | 86 | // Configura o dispositivo como Servidor BLE 87 | BLEServer *pServer = BLEDevice::createServer(); 88 | pServer->setCallbacks(new MyServerCallbacks()); 89 | 90 | // Cria o servico UART 91 | BLEService *pService = pServer->createService(SERVICE_UUID); 92 | 93 | // Cria uma Característica BLE para envio dos dados 94 | pCharacteristic = pService->createCharacteristic( 95 | DHTDATA_CHAR_UUID, 96 | BLECharacteristic::PROPERTY_NOTIFY 97 | ); 98 | 99 | pCharacteristic->addDescriptor(new BLE2902()); 100 | 101 | // cria uma característica BLE para recebimento dos dados 102 | BLECharacteristic *pCharacteristic = pService->createCharacteristic( 103 | CHARACTERISTIC_UUID_RX, 104 | BLECharacteristic::PROPERTY_WRITE 105 | ); 106 | 107 | pCharacteristic->setCallbacks(new MyCallbacks()); 108 | 109 | // Inicia o serviço 110 | pService->start(); 111 | 112 | // Inicia a descoberta do ESP32 113 | pServer->getAdvertising()->start(); 114 | Serial.println("Esperando um cliente se conectar..."); 115 | } 116 | 117 | void loop() { 118 | if (deviceConnected) { 119 | 120 | humidity = dht.readHumidity(); 121 | temperature = dht.readTemperature(); 122 | // testa se retorno é valido, caso contrário algo está errado. 123 | if (isnan(temperature) || isnan(humidity)) 124 | { 125 | Serial.println("Failed to read from DHT"); 126 | } 127 | else 128 | { 129 | Serial.print("Umidade: "); 130 | Serial.print(humidity); 131 | Serial.print(" %\t"); 132 | Serial.print("Temperatura: "); 133 | Serial.print(temperature); 134 | Serial.println(" *C"); 135 | } 136 | 137 | char humidityString[2]; 138 | char temperatureString[2]; 139 | dtostrf(humidity, 1, 2, humidityString); 140 | dtostrf(temperature, 1, 2, temperatureString); 141 | 142 | char dhtDataString[16]; 143 | sprintf(dhtDataString, "%d,%d", temperature, humidity); 144 | 145 | pCharacteristic->setValue(dhtDataString); 146 | 147 | pCharacteristic->notify(); // Envia o valor para o aplicativo! 148 | Serial.print("*** Dado enviado: "); 149 | Serial.print(dhtDataString); 150 | Serial.println(" ***"); 151 | } 152 | delay(1000); 153 | } 154 | --------------------------------------------------------------------------------