Project #29 - DFRobot - Temperature Humidity - Mk09
https://www.donluc.com/?p=3900
#DonLucElectronics #DonLuc #DFRobot #SHT40 #FireBeetle2ESP32E #ESP32 #IoT #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant
Temperature Humidity Relationship
Temperature is something that tells us about the coldness or warmness of any object which is generally measured in Celsius. It determines the intensity of the heat whereas if we talk about humidity, it talks about the water content that is present in the air, or simply we can say it determines the moisture of the air. These two concepts are different but show a great impact on each other. We will see the relation between temperature and humidity further below. Before that, let's understand more about humidity and its types.
Absolute Humidity and Relative Humidity
There are generally two types of humidity ie. absolute and relative. The former tells the humidity present in a parcel of air without taking temperature into consideration whereas the latter tells the humidity present in the air concerning the temperature of the air. The former defines the amount of water content by dividing the weight of the parcel by its volume whereas the latter is calculated by dividing the amount of water content present divided by the total capacity of the parcel of the air to hold multiplied by 100. The former decreases with height whereas the latter when reaching 100%, the air gets saturated.
Relation Between Relative Humidity and Temperature
We have already learned what is temperature and what is humidity and we have also learned two types of humidity. As we know, both these two concepts ie. Temperature and Humidity are different but they are related to each other. The relation between humidity and temperature formula simply says they are inversely proportional. If temperature increases it will lead to a decrease in relative humidity, thus the air will become drier whereas when temperature decreases, the air will become wet means the relative humidity will increase.
DL2403Mk05
1 x DFRobot FireBeetle 2 ESP32-E
1 x Fermion: SHT40 Temperature & Humidity Sensor
1 x Fermion: BLE Sensor Beacon
1 x CR2032 Coin Cell Battery
1 x 1 x Lithium Ion Battery - 1000mAh
1 x Rocker Switch - SPST
1 x Resistor 10K Ohm
1 x SparkFun Serial Basic Breakout - CH340G
1 x SparkFun Cerberus USB Cable
1 x USB 3.1 Cable A to C
DFRobot FireBeetle 2 ESP32-E
LED - 2
RSW - 17
VIN - +3.3V
GND - GND
DL2403Mk05p.ino
/****** Don Luc Electronics © ******
Software Version Information
Project #29 - DFRobot - Temperature Humidity - Mk09
29-09
DL2403Mk05p.ino
1 x DFRobot FireBeetle 2 ESP32-E
1 x Fermion: SHT40 Temperature & Humidity Sensor
1 x Fermion: BLE Sensor Beacon
1 x CR2032 Coin Cell Battery
1 x 1 x Lithium Ion Battery - 1000mAh
1 x Rocker Switch - SPST
1 x Resistor 10K Ohm
1 x SparkFun Serial Basic Breakout - CH340G
1 x SparkFun Cerberus USB Cable
1 x USB 3.1 Cable A to C
*/
// Include the Library Code
// Bluetooth LE keyboard
#include <BleKeyboard.h>
// Arduino
#include <Arduino.h>
// BLE Device
#include <BLEDevice.h>
// BLE Utils
#include <BLEUtils.h>
// BLEScan
#include <BLEScan.h>
// BLE Advertised Device
#include <BLEAdvertisedDevice.h>
// BLE Eddystone URL
#include <BLEEddystoneURL.h>
// BLE Eddystone TLM
#include <BLEEddystoneTLM.h>
// BLE Beacon
#include <BLEBeacon.h>
// ENDIAN_CHANGE
#define ENDIAN_CHANGE_U16(x) ((((x)&0xFF00) >> 8) + (((x)&0xFF) << 8))
// Bluetooth LE Keyboard
BleKeyboard bleKeyboard;
String sKeyboard = "";
// Send Size
byte sendSize = 0;
// Fermion: SHT40 Temperature & Humidity Sensor
// Temperature
float TemperatureData;
float Temperature;
// Humidity
float HumidityData;
float Humidity;
// In seconds
int scanTime = 5;
// BLE Scan
BLEScan *pBLEScan;
// My Advertised Device Callbacks
class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks
{
// onResult
void onResult(BLEAdvertisedDevice advertisedDevice)
{
// Advertised Device
if (advertisedDevice.haveName())
{
// Name: Fermion: Sensor Beacon
if(String(advertisedDevice.getName().c_str()) == "SHT40"){
// strManufacturerData
std::string strManufacturerData = advertisedDevice.getManufacturerData();
uint8_t cManufacturerData[100];
strManufacturerData.copy((char *)cManufacturerData, strManufacturerData.length(), 0);
// strManufacturerData.length
for (int i = 0; i < strManufacturerData.length(); i++)
{
// cManufacturerData[i]
cManufacturerData[i];
}
// TemperatureData
TemperatureData = int(cManufacturerData[2]<<8 | cManufacturerData[3]);
// HumidityData
HumidityData = int(cManufacturerData[5]<<8 | cManufacturerData[6]);
}
}
}
};
// The number of the Rocker Switch pin
int iSwitch = 17;
// Variable for reading the button status
int SwitchState = 0;
// Define LED
int iLED = 2;
// Software Version Information
String sver = "29-09";
void loop() {
// ScanResults
isBLEScanResults();
// Fermion: SHT40 Temperature & Humidity Sensor
isSHT40();
// Read the state of the Switch value:
SwitchState = digitalRead(iSwitch);
// Check if the button is pressed. If it is, the SwitchState is HIGH:
if (SwitchState == HIGH) {
// Bluetooth LE Keyboard
isBluetooth();
}
// Delay 2 Second
delay(2000);
}
getBLEScan.ino
// getBLEScan
// Setup BLE Scan
void isSetupBLEScan(){
// BLE Device
BLEDevice::init("");
// Create new scan
pBLEScan = BLEDevice::getScan();
// Set Advertised Device Callbacks
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
// Active scan uses more power, but get results faster
pBLEScan->setActiveScan(true);
// Set Interval
pBLEScan->setInterval(100);
// Less or equal setInterval value
pBLEScan->setWindow(99);
}
// BLE Scan Results
void isBLEScanResults(){
// Put your main code here, to run repeatedly:
BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
// Delete results fromBLEScan buffer to release memory
pBLEScan->clearResults();
}
getBleKeyboard.ino
// Ble Keyboard
// Bluetooth
// isBluetooth
void isBluetooth() {
// ESP32 BLE Keyboard
if(bleKeyboard.isConnected()) {
// Send Size Length
sendSize = sKeyboard.length();
// Send Size, charAt
for(byte i = 0; i < sendSize+1; i++){
// Write
bleKeyboard.write(sKeyboard.charAt(i));
delay(50);
}
bleKeyboard.write(KEY_RETURN);
}
}
getSHT40.ino
// Fermion: SHT40 Temperature & Humidity Sensor
// SHT40 Temperature & Humidity
void isSHT40(){
// Fermion: SHT40 Temperature & Humidity Sensor
// Temperature
Temperature = (175 * TemperatureData/65535) - 45;
// Humidity
Humidity = (125 * HumidityData/65535) - 6;
// DFR|Version|Temperature|Humidity|*
sKeyboard = "DFR|" + sver + "|" + String(Temperature) + "C|" + String(Humidity) + "%|*";
}
setup.ino
// Setup
void setup()
{
// Give display time to power on
delay(100);
// Bluetooth LE keyboard
bleKeyboard.begin();
// Give display time to power on
delay(100);
// Setup BLE Scan
isSetupBLEScan();
// Initialize the Switch pin as an input
pinMode(iSwitch, INPUT);
// Initialize digital pin iLED as an output
pinMode(iLED, OUTPUT);
// Outputting high, the LED turns on
digitalWrite(iLED, HIGH);
// Delay 5 Second
delay( 5000 );
}
People can contact us: http://www.donluc.com/?page_id=1927
Teacher, Instructor, E-Mentor, R&D and Consulting
-Programming Language
-Microcontrollers (PIC, Arduino, Raspberry Pi, Arm, Silicon Labs, Espressif, Etc...)
-IoT
-Wireless (Radio Frequency, Bluetooth, WiFi, Etc...)
-Robotics
-Automation
-Camera and Video Capture Receiver Stationary, Wheel/Tank and Underwater Vehicle
-Unmanned Vehicles Terrestrial and Marine
-Machine Learning
-Artificial Intelligence (AI)
-RTOS
-Sensors, eHealth Sensors, Biosensor, and Biometric
-Research & Development (R & D)
-Consulting
-Etc...
Follow Us
Luc Paquin – Curriculum Vitae - 2024
https://www.donluc.com/luc/
Web: https://www.donluc.com/
Facebook: https://www.facebook.com/neosteam.labs.9/
YouTube: https://www.youtube.com/@thesass2063
Twitter: https://twitter.com/labs_steam
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Instagram: https://www.instagram.com/neosteamlabs/
LinkedIn: https://www.linkedin.com/in/jlucpaquin/
Don Luc