├── 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 | [](https://filipeflop.com)
2 |
3 | # Bluetooth Low Energy com ESP32 e DHT11
4 |
5 | 
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 |
--------------------------------------------------------------------------------