aboutsummaryrefslogtreecommitdiff
path: root/Mussel/examples/sensor
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-04-13 13:03:53 +0200
committerJonas Smedegaard <dr@jones.dk>2025-04-13 13:03:53 +0200
commited3ac0eb11a04630f7f08124a484a854eea13569 (patch)
treedb1abdc77f1bca0d757d9f14d73830ff8509c400 /Mussel/examples/sensor
parent9c84a009850a06e090b258b6b160ca2cdb41706e (diff)
rename and describe bluetooth examples
Diffstat (limited to 'Mussel/examples/sensor')
-rw-r--r--Mussel/examples/sensor/Mussel_Sensor_Beacon.md7
-rw-r--r--Mussel/examples/sensor/sensor.ino54
-rw-r--r--Mussel/examples/sensor/sensor.puml26
3 files changed, 87 insertions, 0 deletions
diff --git a/Mussel/examples/sensor/Mussel_Sensor_Beacon.md b/Mussel/examples/sensor/Mussel_Sensor_Beacon.md
new file mode 100644
index 0000000..a9269c6
--- /dev/null
+++ b/Mussel/examples/sensor/Mussel_Sensor_Beacon.md
@@ -0,0 +1,7 @@
+## Mussel Sensor Beacon
+
+1. Reads sensors.
+
+2. Normalises sensor data as a gape angle in the range of 0°C-90°C.
+
+3. Broadcasts normalised sensor data as a beacon on a bluetooth network.
diff --git a/Mussel/examples/sensor/sensor.ino b/Mussel/examples/sensor/sensor.ino
new file mode 100644
index 0000000..73e0966
--- /dev/null
+++ b/Mussel/examples/sensor/sensor.ino
@@ -0,0 +1,54 @@
+/*
+ EddystoneTLM beacon by BeeGee based on https://github.com/pcbreflux/espressif/blob/master/esp32/arduino/sketchbook/ESP32_Eddystone_TLM_deepsleep/ESP32_Eddystone_TLM_deepsleep.ino
+ EddystoneTLM frame specification https://github.com/google/eddystone/blob/master/eddystone-tlm/tlm-plain.md
+*/
+
+#include <Mussel.h>
+
+#include "BLEDevice.h"
+#include "BLEBeacon.h"
+#include "BLEAdvertising.h"
+#include "BLEEddystoneTLM.h"
+
+Mussel mussel(2);
+
+#define BEACON_POWER ESP_PWR_LVL_N12
+
+// See the following for generating UUIDs:
+// https://www.uuidgenerator.net/
+BLEAdvertising *pAdvertising;
+
+#define BEACON_UUID "8ec76ea3-6668-48da-9866-75be8bc86f4d" // UUID 1 128-Bit (may use linux tool uuidgen or random numbers via https://www.uuidgenerator.net/)
+
+// Check
+// https://github.com/google/eddystone/blob/master/eddystone-tlm/tlm-plain.md
+// and http://www.hugi.scene.org/online/coding/hugi%2015%20-%20cmtadfix.htm
+// for the temperature value. It is a 8.8 fixed-point notation
+void setBeacon() {
+ BLEEddystoneTLM EddystoneTLM;
+ EddystoneTLM.setTemp(mussel.read()); // 3000 = 30.00 ˚C
+ Serial.printf("Temperature is %.2f°C\n", EddystoneTLM.getTemp());
+
+ BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
+ BLEAdvertisementData oScanResponseData = BLEAdvertisementData();
+ oScanResponseData.setServiceData(BLEUUID((uint16_t)0xFEAA), String(EddystoneTLM.getData().c_str(), EddystoneTLM.getData().length()));
+
+ oAdvertisementData.setName("ESP32 TLM Beacon");
+ pAdvertising->setAdvertisementData(oAdvertisementData);
+ pAdvertising->setScanResponseData(oScanResponseData);
+}
+
+void setup() {
+ Serial.begin(115200);
+ mussel.begin();
+ BLEDevice::init("TLMBeacon");
+ BLEDevice::setPower(BEACON_POWER);
+ pAdvertising = BLEDevice::getAdvertising();
+ setBeacon();
+ pAdvertising->start();
+}
+
+void loop() {
+ setBeacon();
+ delay(500);
+}
diff --git a/Mussel/examples/sensor/sensor.puml b/Mussel/examples/sensor/sensor.puml
new file mode 100644
index 0000000..3f033d1
--- /dev/null
+++ b/Mussel/examples/sensor/sensor.puml
@@ -0,0 +1,26 @@
+@startuml
+'start
+:instantiate mussel object;
+:instantiate bluetooth object;
+group init
+:setup mussel sensors;
+:setup bluetooth beacon;
+end group
+split
+while (each 500ms)
+group loop {
+:read sensors;
+:normalize sensor data
+as a gape angle;
+:add gape angle to beacon;
+end group
+endwhile
+-[hidden]->
+kill
+split again
+while (each 100ms)
+:broadcast beacon;
+endwhile
+-[hidden]->
+kill
+@enduml