My first post
I have read post after post, and cannot get it. I have modified this code to use a DHT11,
I have ESPHome installed via Intergrations and am using HA Supervised.
Here is the code for the esp32 server:
/*********
Rui Santos
Complete instructions at https://RandomNerdTutorials.com/esp32-ble-server-client/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include "DHT.h"
#define DHTTYPE DHT11 // DHT 11
#define dht_PIN 4 // Saras Room
DHT dht(dht_PIN, DHTTYPE);
//BLE server name
#define bleServerName "Temperature_ESP32"
float temp;
float tempF;
float hum;
// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;
bool deviceConnected = false;
// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
#define SERVICE_UUID "91bad492-b950-4226-aa2b-4ede9fa42f59"
// Temperature Characteristic and Descriptor
#ifdef temperatureCelsius
BLECharacteristic dhtTemperatureCelsiusCharacteristics("cba1d466-344c-4be3-ab3f-189f80dd7518", BLECharacteristic::PROPERTY_NOTIFY);
BLEDescriptor dhtTemperatureCelsiusDescriptor(BLEUUID((uint16_t)0x2902));
#else
BLECharacteristic dhtTemperatureFahrenheitCharacteristics("f78ebbff-c8b7-4107-93de-889a6a06d408", BLECharacteristic::PROPERTY_NOTIFY);
BLEDescriptor dhtTemperatureFahrenheitDescriptor(BLEUUID((uint16_t)0x2901));
#endif
// Humidity Characteristic and Descriptor
BLECharacteristic dhtHumidityCharacteristics("ca73b3ba-39f6-4ab3-91ae-186dc9577d99", BLECharacteristic::PROPERTY_NOTIFY);
BLEDescriptor dhtHumidityDescriptor(BLEUUID((uint16_t)0x2903));
//Setup callbacks onConnect and onDisconnect
class MyServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer *pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer *pServer) {
deviceConnected = false;
}
};
void setup() {
// Start serial communication
Serial.begin(115200);
// Init dht Sensor
//initdht();
dht.begin();
// Create the BLE Device
BLEDevice::init(bleServerName);
// Create the BLE Server
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
// Create the BLE Service
BLEService *dhtService = pServer->createService(SERVICE_UUID);
// Create BLE Characteristics and Create a BLE Descriptor
// Temperature
#ifdef temperatureCelsius
dhtService->addCharacteristic(&dhtTemperatureCelsiusCharacteristics);
dhtTemperatureCelsiusDescriptor.setValue("dht temperature Celsius");
dhtTemperatureCelsiusCharacteristics.addDescriptor(&dhtTemperatureCelsiusDescriptor);
#else
dhtService->addCharacteristic(&dhtTemperatureFahrenheitCharacteristics);
dhtTemperatureFahrenheitDescriptor.setValue("dht temperature Fahrenheit");
dhtTemperatureFahrenheitCharacteristics.addDescriptor(&dhtTemperatureFahrenheitDescriptor);
#endif
// Humidity
dhtService->addCharacteristic(&dhtHumidityCharacteristics);
dhtHumidityDescriptor.setValue("dht humidity");
dhtHumidityCharacteristics.addDescriptor(new BLE2902());
// Start the service
dhtService->start();
// Start advertising
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pServer->getAdvertising()->start();
Serial.println("Waiting a client connection to notify...");
}
void loop() {
if (deviceConnected) {
if ((millis() - lastTime) > timerDelay) {
// Read temperature as Celsius (the default)
temp = dht.readTemperature();
// Fahrenheit
tempF = 1.8 * temp + 32;
// Read humidity
hum = dht.readHumidity();
//Notify temperature reading from DHT sensor
#ifdef temperatureCelsius
static char temperatureCTemp[6];
dtostrf(temp, 6, 2, temperatureCTemp);
//Set temperature Characteristic value and notify connected client
dhtTemperatureCelsiusCharacteristics.setValue(temperatureCTemp);
dhtTemperatureCelsiusCharacteristics.notify();
Serial.print("Temperature Celsius: ");
Serial.print(temp);
Serial.print(" ºC");
#else
static char temperatureFTemp[6];
dtostrf(tempF, 6, 2, temperatureFTemp);
//Set temperature Characteristic value and notify connected client
dhtTemperatureFahrenheitCharacteristics.setValue(temperatureFTemp);
dhtTemperatureFahrenheitCharacteristics.notify();
Serial.print("Temperature Fahrenheit: ");
Serial.print(tempF);
Serial.print(" ºF");
#endif
//Notify humidity reading from dht
static char humidityTemp[6];
dtostrf(hum, 6, 2, humidityTemp);
//Set humidity Characteristic value and notify connected client
dhtHumidityCharacteristics.setValue(humidityTemp);
dhtHumidityCharacteristics.notify();
Serial.print(" - Humidity: ");
Serial.print(hum);
Serial.println(" %");
lastTime = millis();
}
}
}
Here is my ESPhome Yaml:
esphome:
name: myble-client
esp32:
board: wemos_d1_mini32
framework:
type: arduino
# Enable Home Assistant API
api:
encryption:
key: "gdOpgYZcDBnLlk9GJ46i4iOtmh3pS3hcC9dHjwI/0EI="
wifi:
ssid: "DD_***"
password: "****"
manual_ip:
static_ip: 192.168.3.160
gateway: 192.168.3.1
subnet: 255.255.255.0
#dns1: 192.168.3.1
#dns2: 8.8.8.8
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "esp_32_2 Fallback Hotspot"
password: "***"
captive_portal:
# Enable logging
logger:
ota:
password: "***"
web_server:
port: 80
ota: true
esp32_ble_tracker:
ble_client:
- mac_address: 78:E3:6D:10:6D:BA
id: my_ble_client
on_connect:
then:
- lambda: |-
ESP_LOGD("ble_client_lambda", "Connected to BLE device");
text_sensor:
- platform: template
name: "My_Esp_Tmp_Atmpt"
- platform: ble_client
ble_client_id:
id: my_ble_client1
name: "Humidity"
service_uuid: "91bad492-b950-4226-aa2b-4ede9fa42f59" # Humidity
characteristic_uuid: "ca73b3ba-39f6-4ab3-91ae-186dc9577d99"
notify: true
- platform: ble_client
ble_client_id:
id: my_ble_client2
name: "Temperature"
service_uuid: "91bad492-b950-4226-aa2b-4ede9fa42f59" # Temperarure
characteristic_uuid: "f78ebbff-c8b7-4107-93de-889a6a06d408"
notify: true
This is the web page from the esp32-server:
How do I turn the Temp. and Humid. results into a home-assistant sensor or (entity) such as: