Project #29 - DFRobot - Fermion BLE Sensor Beacon - Mk03
https://www.donluc.com/?p=3855
https://youtu.be/ocuoBgo_wVk
#DonLucElectronics #DonLuc #DFRobot #FermionBLESensorBeacon #AmbientLight #FireBeetle2ESP32E #ESP32 #IoT #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant
Fermion: BLE Sensor Beacon
BLE Beacon, also known as Low Energy Bluetooth Beacon, is a small wireless device that broadcasts signals using BLE technology. Due to its broadcast nature, pairing is not required between the beacon and receiving devices. Each beacon contains a unique identifier, detectable by nearby devices equipped with Bluetooth technology, such as ESP32 and smartphones supporting BLE scanning.
This Bluetooth beacon has a built-in 11-bit ADC, Fermion version, and multiple I/Os that can be multiplexed to SDA/SCL while broadcasting over Bluetooth. Users can access sensor data within broadcast range on a Bluetooth-equipped device such as a Smartphone or ESP32. This BLE beacon has a built-in 11-bit ADC and an I2C interface, allowing it to real-time collect and broadcast data from various types of sensors, including analog, digital, and I2C sensors.
DL2402Mk03
1 x DFRobot FireBeetle 2 ESP32-E
1 x Fermion: BLE Sensor Beacon
1 x Gravity: Analog Ambient Light Sensor
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
DL2402Mk03p.ino
/****** Don Luc Electronics © ******
Software Version Information
Project #29 - DFRobot - - Mk03
29-03
DL2402Mk03p.ino
1 x DFRobot FireBeetle 2 ESP32-E
1 x Fermion: BLE Sensor Beacon
1 x Gravity: Analog Ambient Light Sensor
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;
// Gravity: Analog Ambient Light Sensor
float Sensor_Data;
// 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()) == "Fermion: Sensor Beacon"){
// 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];
}
// Sensor_Data
Sensor_Data = int(cManufacturerData[2]<<8 | cManufacturerData[3]);
}
}
}
};
// 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-03";
void loop() {
// ScanResults
isBLEScanResults();
// Gravity: Analog Ambient Light Sensor
isAmbientLight();
// 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);
}
getAmbientLight.ino
// Gravity: Analog Ambient Light Sensor
// Ambient Light
void isAmbientLight(){
// bleKeyboard
// DFR|Version|Lux|*
// SData => 1~6000 Lux
float SData = map(Sensor_Data, 1, 3000, 1, 6000);
sKeyboard = "DFR|" + sver + "|" + String(SData) + "|*";
}
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);
}
}
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
-eHealth Sensors, Biosensor, and Biometric
-Research & Development (R & D)
-Consulting
-Etc...
Follow Us
Luc Paquin – Curriculum Vitae - 2024
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/
Don Luc