Files
BLE_emulator/README.md
2026-02-06 15:32:34 +01:00

111 lines
2.9 KiB
Markdown

# V-BLACK BLE Simulator
A real BLE GATT server in Go that simulates a V-BLACK device using `tinygo.org/x/bluetooth`.
## Platform Support
- **Linux**: Requires BlueZ 5.48+. May need `sudo` for BLE access.
- **Windows**: Works out of the box with WinRT.
- **macOS**: NOT SUPPORTED - CoreBluetooth doesn't allow peripheral mode.
## Building
```bash
go build ./cmd/simulator
```
## Running
```bash
# Linux (may require root)
sudo ./simulator
# Windows
simulator.exe
```
## BLE UUIDs
Uses **Nordic UART Service (NUS)** UUIDs - same as real V-BLACK sensors:
| Characteristic | UUID | Properties |
|----------------|------|------------|
| Service | `6e400001-b5a3-f393-e0a9-e50e24dcca9e` | - |
| Command (RX) | `6e400002-b5a3-f393-e0a9-e50e24dcca9e` | Write |
| Notify (TX) | `6e400003-b5a3-f393-e0a9-e50e24dcca9e` | Read, Notify |
### Flutter Example
```dart
const serviceUuid = "6e400001-b5a3-f393-e0a9-e50e24dcca9e";
const commandCharUuid = "6e400002-b5a3-f393-e0a9-e50e24dcca9e";
const notifyCharUuid = "6e400003-b5a3-f393-e0a9-e50e24dcca9e";
```
## Commands
### Global Commands
| Command | Response | Description |
|---------|----------|-------------|
| `PROG_ON` | `PROG_MODE: ON` | Enable programming mode |
| `PROG_OFF` | `PROG_MODE: OFF` | Exit programming mode |
| `RESET` | `INFO: Uscita allarme resettata (BT).` | Reset alarm output |
| `CALI` | `--- MODALITA CALIBRAZIONE ATTIVA ---` | Toggle calibration mode |
| `FACTORY` | `FACTORY RESET DONE` | Restore factory defaults |
### Write Parameters (requires PROG_ON first)
| Command | Range | Default | Description |
|---------|-------|---------|-------------|
| `W1 <val>` | 0-2000 | 1200 | Min threshold |
| `W2 <val>` | 0-4095 | 4000 | Max threshold |
| `W3 <val>` | 1-50 | 2 | Pulse count |
| `W4 <val>` | 10-1000 | 40 | Time window (ms) |
| `W20 <val>` | 0-255 | 128 | Gain (wiper) |
### Read Parameters (requires PROG_ON first)
| Command | Response |
|---------|----------|
| `R1` | `PARAM: W1=<val>` |
| `R2` | `PARAM: W2=<val>` |
| `R20` | `PARAM: W20=<val>` |
## Notifications
The simulator sends sensor readings every 500ms:
```
SENSOR:2067
SENSOR:2063
SENSOR:2071
```
## Testing with nRF Connect
1. Run the simulator
2. Open nRF Connect app on your phone
3. Scan for "GO_SIMULATOR"
4. Connect to the device
5. Find service `6e400001-...` (Nordic UART Service)
6. Subscribe to notify characteristic `6e400003-...` (NUS TX)
7. You should see `SENSOR:xxxx` every 500ms
8. Write `PROG_ON` to command characteristic `6e400002-...` (NUS RX)
9. You should receive `PROG_MODE: ON` on notify
## Console Output
```
[INFO] BLE Simulator v1.0
[INFO] Advertising as GO_SIMULATOR...
[INFO] Waiting for connections...
[CONN] Client Connected: AA:BB:CC:DD:EE:FF
[RX] Command: PROG_ON
[TX] Response: PROG_MODE: ON
[TX] Sending: SENSOR:2063
[TX] Sending: SENSOR:2071
[RX] Command: R1
[TX] Response: PARAM: W1=1200
[CONN] Client Disconnected
```