2.4 KiB
BluettiBLE — Quick Start
Get a Bluetti power station reporting to an ESP32 in a few minutes.
1. Find your device's BLE name
Install a BLE scanner on your phone (nRF Connect or LightBlue) and scan. Your Bluetti advertises a name that starts with the model, for example:
AC3001234567890AC200M1234567890EB3A1234567890
Copy the full advertised name — that string is how the library finds the unit (there is no pairing and no encryption key to enter).
2. Install the library
PlatformIO (platformio.ini):
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
https://gitea.sh3d.com.au/Sh3d/BluettiBLE.git
Or copy this folder into lib/ (PlatformIO) or libraries/ (Arduino IDE).
3. Minimal sketch
#include <Arduino.h>
#include "BluettiBLE.h"
BluettiBLE bluetti;
void onData(const BluettiDevice* dev) {
Serial.printf("%s SoC %u%% AC out %u W DC out %u W\n",
dev->data.model, dev->data.totalBatteryPercent,
dev->data.acOutputPower, dev->data.dcOutputPower);
}
void setup() {
Serial.begin(115200);
bluetti.begin();
bluetti.setCallback(onData);
bluetti.addDevice("My Bluetti", "AC3001234567890", BLUETTI_AC300); // <- your name + model
}
void loop() {
bluetti.loop();
}
Set the model to match your unit: BLUETTI_AC300, BLUETTI_AC200M,
BLUETTI_EB3A, BLUETTI_EP500P, BLUETTI_AC500, BLUETTI_EP500,
BLUETTI_EP600.
4. Upload and watch
Open the serial monitor at 115200. You should see the library scan, connect, and then print a line every poll cycle (default every 3 seconds). Turn on debug for the raw command/connection trace:
bluetti.setDebug(true);
5. Control output (optional)
Once connected you can toggle the outputs:
if (bluetti.isConnected()) {
bluetti.setACOutput(true); // turn AC output on
bluetti.setDCOutput(false); // turn DC output off
}
Troubleshooting
- Never connects — double-check the BLE name is exact (case sensitive), and that the Bluetti app on your phone is closed (a Bluetti accepts one BLE client at a time).
- Connects but no data — make sure the model enum matches your hardware; the register map is model-specific.
- Drops out — keep
bluetti.loop()running every iteration; the library reconnects automatically after a disconnect.