intial test version

This commit is contained in:
2026-06-04 21:35:07 +10:00
commit 4ea1e12ee9
24 changed files with 1877 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
[env]
lib_extra_dirs = ../..
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
monitor_filters = time, esp32_exception_decoder
[env:esp32-s3]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
monitor_filters = time, esp32_exception_decoder
build_flags =
-D ARDUINO_USB_MODE=1
-D ARDUINO_USB_CDC_ON_BOOT=1
+69
View File
@@ -0,0 +1,69 @@
/**
* BluettiBLE Logger Example
*
* Prints a line only when a value of interest changes, rather than every poll
* cycle. Demonstrates the snapshot / change-detection pattern.
*/
#include <Arduino.h>
#include "BluettiBLE.h"
BluettiBLE bluetti;
// Last-seen snapshot of the fields we care about.
struct Snapshot {
bool valid = false;
uint8_t soc = 0;
uint16_t acOut = 0;
uint16_t dcOut = 0;
bool acOn = false;
bool dcOn = false;
uint32_t packetsSinceLog = 0;
};
static Snapshot prev;
void onBluettiData(const BluettiDevice* dev) {
const BluettiData& d = dev->data;
prev.packetsSinceLog++;
bool changed = !prev.valid ||
prev.soc != d.totalBatteryPercent ||
prev.acOut != d.acOutputPower ||
prev.dcOut != d.dcOutputPower ||
prev.acOn != d.acOutputOn ||
prev.dcOn != d.dcOutputOn;
if (!changed) return;
Serial.printf("CHANGE (%lu polls): SoC %u%% AC %u W (%s) DC %u W (%s)\n",
prev.packetsSinceLog,
d.totalBatteryPercent,
d.acOutputPower, d.acOutputOn ? "ON" : "off",
d.dcOutputPower, d.dcOutputOn ? "ON" : "off");
prev.valid = true;
prev.soc = d.totalBatteryPercent;
prev.acOut = d.acOutputPower;
prev.dcOut = d.dcOutputPower;
prev.acOn = d.acOutputOn;
prev.dcOn = d.dcOutputOn;
prev.packetsSinceLog = 0;
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\nBluettiBLE Logger Example\n");
bluetti.begin();
bluetti.setCallback(onBluettiData);
// CHANGE THESE: your device's advertised BLE name and model.
bluetti.addDevice("My Bluetti", "AC3001234567890", BLUETTI_AC300);
}
void loop() {
bluetti.loop();
}