382 lines
8.9 KiB
YAML
382 lines
8.9 KiB
YAML
# Derived work based on https://github.com/reaper7/M5Stack_BLE_client_Owon_B35T by reaper7.
|
|
# AI (ChatGPT) has been used to adopt the Arduino sketch to ESPHome.
|
|
# Ported to M5Stack Core2 due to memory constraints.
|
|
|
|
substitutions:
|
|
name: "lab-ble-proxy"
|
|
friendly_name: "Lab BLE Proxy"
|
|
device_description: "M5Stack Core2 BLE client for OWON B35T/B35T+ multimeter and Atorch DL24 DC load"
|
|
owon_mac_address: !secret owon_b35t_mac_address
|
|
dl24_mac_address: !secret dl24_mac_address
|
|
external_components_source: github://syssi/esphome-atorch-dl24@main
|
|
atorch_project_version: "2.1.0"
|
|
|
|
esphome:
|
|
name: ${name}
|
|
friendly_name: ${friendly_name}
|
|
comment: ${device_description}
|
|
min_version: 2024.6.0
|
|
includes:
|
|
- lab-ble-proxy-owon.h
|
|
on_boot:
|
|
priority: 850
|
|
then:
|
|
- lambda: |-
|
|
owon_b35t::core2_axp192_init(id(core2_i2c));
|
|
project:
|
|
name: "custom.lab-ble-proxy-m5stack-core2"
|
|
version: "1.0"
|
|
|
|
esp32:
|
|
board: m5stack-core2
|
|
flash_size: 16MB
|
|
framework:
|
|
type: esp-idf
|
|
advanced:
|
|
minimum_chip_revision: "3.1"
|
|
sram1_as_iram: true
|
|
|
|
psram:
|
|
mode: quad
|
|
speed: 80MHz
|
|
|
|
external_components:
|
|
- source: ${external_components_source}
|
|
refresh: 0s
|
|
|
|
logger:
|
|
level: INFO
|
|
|
|
api:
|
|
encryption:
|
|
key: !secret apikey
|
|
|
|
ota:
|
|
platform: esphome
|
|
password: !secret ota
|
|
|
|
wifi:
|
|
ssid: "Voltage-legacy"
|
|
password: !secret voltage_legacy_psk
|
|
#use_address: ${name}.home
|
|
power_save_mode: none
|
|
fast_connect: on
|
|
min_auth_mode: WPA2
|
|
ap:
|
|
ssid: "Lab BLE Proxy Fallback Hotspot"
|
|
password: !secret fallback_psk
|
|
|
|
captive_portal:
|
|
|
|
interval:
|
|
- interval: 10s
|
|
then:
|
|
- lambda: |-
|
|
ESP_LOGI("mem", "heap free=%u min_free=%u internal_free=%u internal_largest=%u dma_free=%u dma_largest=%u psram_free=%u psram_largest=%u",
|
|
static_cast<unsigned>(esp_get_free_heap_size()),
|
|
static_cast<unsigned>(esp_get_minimum_free_heap_size()),
|
|
static_cast<unsigned>(heap_caps_get_free_size(MALLOC_CAP_INTERNAL)),
|
|
static_cast<unsigned>(heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL)),
|
|
static_cast<unsigned>(heap_caps_get_free_size(MALLOC_CAP_DMA)),
|
|
static_cast<unsigned>(heap_caps_get_largest_free_block(MALLOC_CAP_DMA)),
|
|
static_cast<unsigned>(heap_caps_get_free_size(MALLOC_CAP_SPIRAM)),
|
|
static_cast<unsigned>(heap_caps_get_largest_free_block(MALLOC_CAP_SPIRAM)));
|
|
|
|
esp32_ble_tracker:
|
|
scan_parameters:
|
|
active: true
|
|
continuous: true
|
|
|
|
ble_client:
|
|
- mac_address: ${owon_mac_address}
|
|
id: owon_ble_client
|
|
on_connect:
|
|
then:
|
|
- lambda: |-
|
|
owon_meter.on_connect();
|
|
on_disconnect:
|
|
then:
|
|
- lambda: |-
|
|
owon_meter.on_disconnect();
|
|
|
|
- mac_address: ${dl24_mac_address}
|
|
id: atorch_ble_client
|
|
|
|
atorch_dl24:
|
|
- id: atorch0
|
|
ble_client_id: atorch_ble_client
|
|
check_crc: false
|
|
throttle: 0s
|
|
|
|
spi:
|
|
clk_pin: GPIO18
|
|
mosi_pin: GPIO23
|
|
|
|
i2c:
|
|
id: core2_i2c
|
|
sda: GPIO21
|
|
scl: GPIO22
|
|
scan: true
|
|
|
|
output:
|
|
- platform: template
|
|
type: float
|
|
id: lcd_backlight
|
|
write_action:
|
|
- lambda: |-
|
|
owon_b35t::core2_axp192_set_backlight(state);
|
|
|
|
light:
|
|
- platform: monochromatic
|
|
output: lcd_backlight
|
|
name: "${friendly_name} Backlight"
|
|
id: backlight
|
|
restore_mode: ALWAYS_ON
|
|
|
|
font:
|
|
- file: "fonts/Roboto-Regular.ttf"
|
|
id: meter_font
|
|
size: 15
|
|
glyphs:
|
|
[
|
|
" ",
|
|
"!",
|
|
"%",
|
|
"+",
|
|
"-",
|
|
".",
|
|
"/",
|
|
"0",
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"5",
|
|
"6",
|
|
"7",
|
|
"8",
|
|
"9",
|
|
"<",
|
|
">",
|
|
"A",
|
|
"B",
|
|
"C",
|
|
"D",
|
|
"E",
|
|
"F",
|
|
"G",
|
|
"H",
|
|
"I",
|
|
"L",
|
|
"M",
|
|
"N",
|
|
"O",
|
|
"P",
|
|
"R",
|
|
"S",
|
|
"T",
|
|
"U",
|
|
"V",
|
|
"W",
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"a",
|
|
"c",
|
|
"d",
|
|
"e",
|
|
"f",
|
|
"g",
|
|
"h",
|
|
"i",
|
|
"k",
|
|
"m",
|
|
"n",
|
|
"o",
|
|
"r",
|
|
"s",
|
|
"t",
|
|
"u",
|
|
"v",
|
|
"w",
|
|
"y",
|
|
"z",
|
|
"°",
|
|
"µ",
|
|
"Ω",
|
|
]
|
|
|
|
display:
|
|
- platform: mipi_spi
|
|
id: lcd
|
|
model: M5CORE2
|
|
update_interval: 500ms
|
|
lambda: |-
|
|
owon_meter.render(it, id(meter_font));
|
|
|
|
touchscreen:
|
|
- platform: ft63x6
|
|
id: touch
|
|
display: lcd
|
|
|
|
binary_sensor:
|
|
- platform: touchscreen
|
|
id: button_a
|
|
touchscreen_id: touch
|
|
x_min: 34
|
|
x_max: 74
|
|
y_min: 212
|
|
y_max: 240
|
|
internal: true
|
|
on_press:
|
|
then:
|
|
- lambda: |-
|
|
owon_meter.previous_button();
|
|
- platform: touchscreen
|
|
id: button_b
|
|
touchscreen_id: touch
|
|
x_min: 108
|
|
x_max: 208
|
|
y_min: 212
|
|
y_max: 240
|
|
internal: true
|
|
on_click:
|
|
- min_length: 50ms
|
|
max_length: 1500ms
|
|
then:
|
|
- logger.log:
|
|
level: INFO
|
|
format: "OWON short press: %s"
|
|
args: ["owon_meter.selected_button_name()"]
|
|
- ble_client.ble_write:
|
|
id: owon_ble_client
|
|
service_uuid: "0000fff0-0000-1000-8000-00805f9b34fb"
|
|
characteristic_uuid: "0000fff3-0000-1000-8000-00805f9b34fb"
|
|
value: !lambda |-
|
|
std::vector<uint8_t> data = {owon_meter.selected_button, 0x01};
|
|
return data;
|
|
- min_length: 1500ms
|
|
max_length: 5000ms
|
|
then:
|
|
- logger.log:
|
|
level: INFO
|
|
format: "OWON long press: %s"
|
|
args: ["owon_meter.selected_button_name()"]
|
|
- ble_client.ble_write:
|
|
id: owon_ble_client
|
|
service_uuid: "0000fff0-0000-1000-8000-00805f9b34fb"
|
|
characteristic_uuid: "0000fff3-0000-1000-8000-00805f9b34fb"
|
|
value: !lambda |-
|
|
uint8_t press_type = (owon_meter.selected_button == 1 || owon_meter.selected_button == 5) ? 0x01 : 0x00;
|
|
std::vector<uint8_t> data = {owon_meter.selected_button, press_type};
|
|
return data;
|
|
- platform: touchscreen
|
|
id: button_c
|
|
touchscreen_id: touch
|
|
x_min: 242
|
|
x_max: 282
|
|
y_min: 212
|
|
y_max: 240
|
|
internal: true
|
|
on_press:
|
|
then:
|
|
- lambda: |-
|
|
owon_meter.next_button();
|
|
|
|
- platform: template
|
|
name: "${friendly_name} OWON Connected"
|
|
lambda: |-
|
|
return owon_meter.connected;
|
|
- platform: template
|
|
name: "${friendly_name} OWON Overload"
|
|
lambda: |-
|
|
return owon_meter.overload;
|
|
- platform: template
|
|
name: "${friendly_name} OWON Low Battery"
|
|
lambda: |-
|
|
return owon_meter.low_battery;
|
|
|
|
- platform: atorch_dl24
|
|
atorch_dl24_id: atorch0
|
|
running:
|
|
name: "${friendly_name} Atorch Running"
|
|
|
|
sensor:
|
|
- platform: ble_client
|
|
type: characteristic
|
|
ble_client_id: owon_ble_client
|
|
id: owon_notify_source
|
|
internal: true
|
|
service_uuid: "0000fff0-0000-1000-8000-00805f9b34fb"
|
|
characteristic_uuid: "0000fff4-0000-1000-8000-00805f9b34fb"
|
|
notify: true
|
|
update_interval: never
|
|
lambda: |-
|
|
owon_meter.handle_notify(x);
|
|
return owon_meter.value();
|
|
|
|
- platform: wifi_signal
|
|
name: "${friendly_name} WiFi Signal"
|
|
update_interval: 60s
|
|
|
|
- platform: atorch_dl24
|
|
atorch_dl24_id: atorch0
|
|
voltage:
|
|
name: "${friendly_name} Atorch Voltage"
|
|
current:
|
|
name: "${friendly_name} Atorch Current"
|
|
power:
|
|
name: "${friendly_name} Atorch Power"
|
|
capacity:
|
|
name: "${friendly_name} Atorch Capacity"
|
|
energy:
|
|
name: "${friendly_name} Atorch Energy"
|
|
temperature:
|
|
name: "${friendly_name} Atorch Temperature"
|
|
dim_backlight:
|
|
name: "${friendly_name} Atorch Dim Backlight"
|
|
runtime:
|
|
name: "${friendly_name} Atorch Runtime"
|
|
|
|
text_sensor:
|
|
- platform: template
|
|
name: "${friendly_name} OWON Reading"
|
|
update_interval: 1s
|
|
lambda: |-
|
|
return owon_meter.reading_text();
|
|
- platform: template
|
|
name: "${friendly_name} OWON Unit"
|
|
update_interval: 1s
|
|
lambda: |-
|
|
return std::string(owon_meter.scale()) + owon_meter.unit();
|
|
- platform: template
|
|
name: "${friendly_name} OWON Mode"
|
|
update_interval: 1s
|
|
lambda: |-
|
|
return owon_meter.mode_text();
|
|
|
|
- platform: atorch_dl24
|
|
atorch_dl24_id: atorch0
|
|
runtime_formatted:
|
|
name: "${friendly_name} Atorch Runtime Formatted"
|
|
|
|
button:
|
|
- platform: atorch_dl24
|
|
atorch_dl24_id: atorch0
|
|
reset_energy:
|
|
name: "${friendly_name} Atorch Reset Energy"
|
|
reset_capacity:
|
|
name: "${friendly_name} Atorch Reset Capacity"
|
|
reset_runtime:
|
|
name: "${friendly_name} Atorch Reset Runtime"
|
|
reset_all:
|
|
name: "${friendly_name} Atorch Reset All"
|
|
usb_plus:
|
|
name: "${friendly_name} Atorch Plus"
|
|
usb_minus:
|
|
name: "${friendly_name} Atorch Minus"
|
|
setup:
|
|
name: "${friendly_name} Atorch Setup"
|
|
enter:
|
|
name: "${friendly_name} Atorch Enter"
|