Compare commits

...
10 Commits
Author SHA1 Message Date
Amir dcc434f7e4 Update README for version 6.1.2 changes 2026-03-11 20:19:54 +01:00
Amir 6c7a66be8e Bump version to 6.1.2 and update highlights
Updated version information to 6.1.2 with release date 2026-03-11. Added highlights and fixes for the new version.
2026-03-11 20:05:01 +01:00
Amir e1ad1b01c3 Fix LED indicator issues in v6.1.2 release
Restores LED indicator functionality by ensuring PWM control for the white LED, fixing issues from v6.1.1 where the LED remained dimly lit and patterns were inconsistent.
2026-03-11 20:04:13 +01:00
Amir f77f50f1d4 Update to v6.1.2 - broken LED indicator fix
VERSION 6.1.2 CHANGES (2026-03-11):
  ----------------------------------
FIX: Restore correct white LED price indicator behavior (to mach the one in prrevious v6.1) on ESP32 (XIAO ESP32C3) by avoiding mixing analogWrite() (LEDC PWM) and digitalWrite() on the same pin. When LED should be OFF we now use analogWrite(whiteLedPin, 0) (instead of digitalWrite LOW). When LED should be fully ON we now use analogWrite(whiteLedPin, 255) (instead of digitalWrite HIGH). Blink / double-blink patterns now toggle between PWM 0 and 255 so the LED is truly off when backlight/presence logic turns LEDs off (no more dimly-lit LED).

NOTE: This version is identical to v6.1.1 except for: updateLeds() LED control fix (PWM-only on whiteLedPin), UI version strings ("v6.1.2") & header comment version/date.
2026-03-11 20:01:08 +01:00
Amir 45cabc17dd Update to v6.1.2 - broken LED indicator fix
VERSION 6.1.2 CHANGES (2026-03-12):
  ----------------------------------
Fixed LED indicator not working properly (constantly dimly lit, not responding to price patterns, staying on when LCD backlight turns off). Root cause: Mixing analogWrite() and digitalWrite() on ESP32 causes PWM channel to remain active even after digitalWrite(LOW), resulting in dim LED. LED now properly turns off when backlight is off (areLedsOn = false). LED now correctly shows breathing/blinking patterns based on price thresholds.

  VERSION 6.1.1 CHANGES (2026-03-07):
  ----------------------------------
Fixed daily lowest/highest hourly indicator (and daily average) now correctly considers ALL hourly averages, including negative values and 0.0 (which can be real prices). The daily average is now computed using the number of valid hours actually present in the dataset (validHourCount), instead of always dividing by 24.

  NOTE:
  - This version includes all fixes from v6.1.1 plus the LED fix.
2026-03-11 19:50:48 +01:00
Amir fedef66ae0 Update to v6.1.1 - daily lowest hourly indicator fix
NOTE:
  - This version is identical to v6.1 except for:
      * processJsonData() min/max/average fix
      * UI version strings ("v6.1.1")
      * header comment version/date
2026-03-11 18:48:55 +01:00
Amir 65fdb14cec Fix LED indicator stuck on; bump to v6.1.2 2026-03-11 18:32:23 +01:00
Amir 3da3dec344 Wiring diagram for XIAO ESP32-C3 connections 2026-03-07 11:31:14 +01:00
Amir 6a6cf113b3 Wiring diagram and peripheral details
Wiring diagram and notes for the Electricity Price Ticker project, including optional peripherals and GPIO connections.
2026-03-07 11:17:58 +01:00
Amir 26b1a309e1 Add files via upload 2026-03-07 11:05:41 +01:00
5 changed files with 1810 additions and 16 deletions
+29 -2
View File
@@ -4,11 +4,38 @@ All notable changes to this project are documented here.
---
## v6.1.2 LED Indicator Restored (ESP32 PWM Fix) (20260311)
**Summary**
This release fixes a regression introduced in **v6.1.1** where the **white LED price indicator** could remain **dimly lit** even when the LCD backlight turned off, and the intended **blink/breathe patterns** no longer behaved correctly.
### Fixed: White LED Stuck Dim / Patterns Broken (PWM vs Digital)
**Problem (v6.1.1):**
- The sketch uses `analogWrite()` to drive the LED with PWM for breathe/blink patterns.
- However, in some “LED OFF” branches the code used `digitalWrite(LOW)` on the same `whiteLedPin`.
- On ESP32 (LEDC), once PWM is attached to a pin, `digitalWrite(LOW)` may **not fully disable** PWM output.
- Result:
- LED could remain **faintly on** (dim glow) when LEDs were supposed to be off (e.g., presence timeout / backlight off).
- Some patterns could appear “stuck” or inconsistent.
**Solution (v6.1.2):**
- LED control is now **PWMonly** inside `updateLeds()`:
- Use `analogWrite(whiteLedPin, 0)` instead of `digitalWrite(whiteLedPin, LOW)`.
- Use `analogWrite(whiteLedPin, 255)` instead of `digitalWrite(whiteLedPin, HIGH)`.
- Blink/doubleblink toggles now switch between PWM **0** and **255**.
- This ensures the LED is **truly off** whenever LED output is gated off (no data, no time sync, or presence timeout).
---
## v6.1.1 Daily Min/Max Includes Negative & Zero Prices (20260307)
**Summary**
This release fixes a bug where the **daily lowest / highest hourly price marker** ignored negative prices (and also ignored 0.0), which could cause the ticker to incorrectly mark the **lowest positive** hour as the daily minimum.
This release fixes a bug where the **daily lowest / highest hourly price marker** ignored negative prices (and also ignored 0.0), which could cause the ticker to incorrectly mark the **lowest positive[...]
### Fixed: Daily Low/High Marker Ignored Negative & Zero Prices
@@ -40,7 +67,7 @@ This release fixes a bug where the **daily lowest / highest hourly price marker*
**Summary**
This release fixes a bug where the ticker could remain indefinitely on the **“No data for today”** screen after midnight, even though the API was already returning fresh data. It also refines the aftermidnight retry schedule.
This release fixes a bug where the ticker could remain indefinitely on the **“No data for today”** screen after midnight, even though the API was already returning fresh data. It also refines the [...]
### Fixed: Stuck on NO_DATA_OFFSET After Midnight
File diff suppressed because it is too large Load Diff
+92
View File
@@ -0,0 +1,92 @@
# Hardware Wiring Diagram (Seeed XIAO ESP32C3 Electricity Price Ticker)
This document depicts the wiring for the **Electricity Price Ticker** project based on the connection instructions in `README.md`.
It includes:
- Required peripherals (LCD + button)
- Supported optional peripherals (presence sensor + white LED + optional TTP223 touch button alternative)
> Further reference (official board documentation):
> - https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/
> Notes:
> - Always connect **all grounds together** (ESP32 GND, LCD GND, sensor GND, LED GND).
> - Verify your **XIAO ESP32C3 pinout** in the Seeed documentation link above.
> - **Important:** The **10 kΩ pull-down resistor on D9 is mandatory at all times** (even if the presence sensor is not connected).
> - Button input is on **D2**. You may use either a **mechanical pushbutton** (default) *or* a **TTP223 touch module** (alternative), but not both in parallel unless you know what youre doing.
---
## 1) Wiring overview (diagram)
```mermaid
flowchart TB
MCU["Seeed XIAO ESP32-C3"]:::mcu
LCD["20x4 I2C LCD 2004<br/>PCF8574 backpack<br/>I2C addr 0x27"]:::lcd
%% Button input options (XIAO D2)
D2NODE["D2 node<br/>(buttonPin input)"]:::io
BTN["Mechanical pushbutton<br/>default option<br/>active LOW to GND"]:::btn
TTP["TTP223 capacitive touch<br/>optional alternative<br/>OUT is HIGH when touched"]:::touch
%% Presence-sensor input stage (XIAO D9) - always present
D9NODE["D9 node<br/>(presencePin input)"]:::io
RPD["10k pull-down resistor<br/>D9 to GND<br/>MANDATORY"]:::res
PRES["RCWL-0516 presence sensor<br/>optional"]:::pres
%% White LED output (XIAO D3)
LED1["White indicator LED<br/>optional"]:::led
PSU5V["5V supply<br/>USB-C or regulated 5V"]:::pwr
V33["3.3V rail from XIAO"]:::pwr
GND["Common GND"]:::gnd
%% Power
PSU5V -->|"5V"| MCU
PSU5V -->|"5V or 3V3 if LCD supports"| LCD
MCU -->|"3V3"| V33
V33 -->|"3V3"| PRES
V33 -->|"3V3"| TTP
%% Grounds
MCU --- GND
LCD --- GND
BTN --- GND
TTP --- GND
D2NODE --- GND
D9NODE --- GND
PRES --- GND
LED1 --- GND
PSU5V --- GND
%% I2C
MCU -->|"SDA D4"| LCD
MCU -->|"SCL D5"| LCD
%% Button input stage (always)
MCU -->|"D2 (buttonPin)"| D2NODE
BTN -->|"button to GND"| D2NODE
TTP -->|"OUT to D2 node"| D2NODE
%% Presence input stage (always)
MCU -->|"D9 (presencePin)"| D9NODE
D9NODE ---|"10k"| RPD
RPD -->|"to GND"| GND
PRES -->|"OUT to D9 node"| D9NODE
%% White LED (single LED, directly from pin with series resistor)
MCU -->|"D3 (whiteLedPin)"| LED1
classDef mcu fill:#e8f0ff,stroke:#2b5fd9,stroke-width:1px,color:#000;
classDef lcd fill:#fff4e5,stroke:#cc7a00,stroke-width:1px,color:#000;
classDef btn fill:#eaffea,stroke:#2d8a2d,stroke-width:1px,color:#000;
classDef touch fill:#e6fcff,stroke:#0077b6,stroke-width:1px,color:#000;
classDef pres fill:#f3e8ff,stroke:#7b2cbf,stroke-width:1px,color:#000;
classDef led fill:#ffe8ef,stroke:#c9184a,stroke-width:1px,color:#000;
classDef res fill:#f5f5f5,stroke:#444,stroke-width:1px,color:#000;
classDef pwr fill:#fff,stroke:#444,stroke-width:1px,color:#000;
classDef gnd fill:#fff,stroke:#000,stroke-width:1.5px,color:#000;
classDef io fill:#f5f5f5,stroke:#111,stroke-width:1px,color:#000;
+20 -8
View File
@@ -9,8 +9,9 @@ This project is an ArduinoIDEfriendly firmware for the **Seeed XIAO ESP32
- Uses a white LED and an optional presence sensor to give quick visual feedback.
- Stores daily price data in **NVS** to survive reboots and reduce API calls.
The latest sketch implements **Version 6.1.1**, focusing on:
The latest sketch implements **Version 6.1.2**, focusing on:
- Version 6.1.2 fix: restore correct **white LED indicator** behavior (ESP32 PWM fix; no dim glow when off).
- Version 6.1.1 fix: Correct daily **low/high hourly markers** (now includes negative and **0.0** prices).
- Daily (not hourly) API fetching.
- Robust **NVS storage** of daily price data.
@@ -237,7 +238,7 @@ The LED is driven with various patterns to indicate price level; see “LED Pric
---
## Firmware Features (v6.1.1)
## Firmware Features (v6.1.2)
### Core Display & Pricing
@@ -262,7 +263,7 @@ The LED is driven with various patterns to indicate price level; see “LED Pric
- Local language letters.
- Lowprice and highprice indicators.
- **Daily min/max markers**:
- The low/high hourly indicators now consider **negative**, **0.0**, and positive prices (v6.1.1 fix).
- The low/high hourly indicators consider **negative**, **0.0**, and positive prices (v6.1.1 fix).
### LED Price Signalling
@@ -275,6 +276,11 @@ The white LED (GPIO 5) reflects the **current 15minute interval** price:
- Very expensive → complex “doubleblink with long on” pattern.
- Negative price or no data → LED off.
**Important implementation note (v6.1.2):**
- On ESP32, avoid mixing PWM (`analogWrite`) and `digitalWrite` on the same LED pin.
- The firmware now uses `analogWrite(pin, 0/255)` consistently to guarantee the LED is fully off when gated off.
LED is **disabled** when:
- No data for today.
@@ -558,13 +564,14 @@ If NVS does not contain valid WiFi credentials, or if connecting fails repeat
---
## Versioning & Changelog
- **v5.5** 15minute detail mode, LED based on current 15minute slot, improved DST handling (see file `20251027a_electricity_ticker_10_5_5_latest_DST_and_midnight_fix.ino`).
- **v6.0.0** First NVSenabled version:
- Store daily price data in NVS.
- Reduce API calls to “boot + aftermidnight”.
- Add NVS status section to secondary menu.
- **v6.1.2** LED indicator restored (broken in previous version):
- Avoid mixing PWM and `digitalWrite` on the same LED pin (ESP32 LEDC behavior).
- Ensures LED is fully off when gated off; patterns operate correctly.
- **v6.1.1** Daily low/high marker fix:
- Daily min/max and average now include negative and **0.0** prices.
- **v6.1.0** Midnight fetch & “today” detection fixes:
- Correctly detect **market day** using the last `unix_seconds` timestamp.
- Distinguish between:
@@ -574,6 +581,11 @@ If NVS does not contain valid WiFi credentials, or if connecting fails repeat
- Two retries every 20 minutes in the first hour (~00:20, ~00:40).
- Then hourly retries (topofhour) until todays dataset is available.
- Behavior on reboot and manual longpress is unchanged, but now respects the improved “today” logic.
- **v6.0.0** NVS storage & daily fetch:
- Store daily price data in NVS.
- Reduce API calls to “boot + aftermidnight”.
- Add NVS status section to secondary menu.
- **v5.5** 15minute detail mode, LED based on current 15minute slot, improved DST handling (see file `20251027a_electricity_ticker_10_5_5_latest_DST_and_midnight_fix.ino`).
See [`CHANGELOG.md`](./CHANGELOG.md) for more details.
+21 -6
View File
@@ -2,6 +2,26 @@
## Current firmware
- **Version:** 6.1.2
- **Release date:** 2026-03-11
- **Target MCU:** Seeed XIAO ESP32C3
- **Display:** 20x4 I²C LCD (PCF8574, default address `0x27`)
- **API endpoint:** `https://api.energy-charts.info/price?bzn=SI`
- **Resolution:** 15minute intervals, hourly averages for overview
## Highlights of v6.1.2
- Fix: restore proper white LED price indicator behavior on ESP32 by avoiding mixing PWM (`analogWrite`) and `digitalWrite` on the same pin.
- Fix: LED is now truly off when backlight/LED gating turns it off (no more “dim glow”).
- Change: `updateLeds()` uses PWM only (`analogWrite(pin, 0/255)`) for off/on and blink toggles.
For full details, see:
- [CHANGELOG.md](./CHANGELOG.md)
- [README.md](./README.md)
## Previous firmware
- **Version:** 6.1.1
- **Release date:** 2026-03-07
- **Target MCU:** Seeed XIAO ESP32C3
@@ -14,12 +34,7 @@
- Fix: daily **lowest/highest hourly price marker** now includes **negative** and **0.0** prices.
- Fix: daily average is computed over the number of valid hours (instead of always dividing by 24 even when hours were skipped).
For full details, see:
- [CHANGELOG.md](./CHANGELOG.md)
- [README.md](./README.md)
## Previous firmware
## Earlier firmware
- **Version:** 6.0.0
- **Release date:** 2026-01-27