Wiznet makers

josephsr

Published July 04, 2026 ©

135 UCC

13 WCC

13 VAR

0 Contests

0 Followers

0 Following

Original Link

(temp) STM32F103 and W5500 Pulse-Based Home Power Meter

Power-Meter-2 measures household energy usage by detecting the blinking pulse of an existing electricity meter and serving calculated power data through a W5500

COMPONENTS
PROJECT DESCRIPTION

Project Overview

Power-Meter-2 is not a full smart meter, metering IC design, or cloud energy platform. It is a local auxiliary monitor that reads the optical or pulse output behavior of an existing electricity meter. The firmware converts pulse timing into current power and pulse count into accumulated energy, then exposes the result through an embedded web page served by the MCU over Ethernet.

The repository contains firmware, schematic material, a README, and example images, but it does not include a packaged release. This makes it more suitable as a source-level reference design or prototype than as a ready-to-install product.

System Architecture and Operation Flow

 
Electricity meter LED pulse
    ↓
STM32F103 GPIO interrupt on PB7
    ↓
FreeRTOS queue
    ↓
Power counting task
    ↓
RTC backup registers
    ↓
JSON state generation
    ↓
W5500 TCP socket web server
    ↓
Browser-based local dashboard
 

The firmware initialization flow includes HAL setup, GPIO/SPI/IWDG initialization, JSON initialization, W5500 reset, DWT timing, RTC initialization, power-counting initialization, W5500 stack callback registration, and W5500/DHCP/DNS setup. After that, FreeRTOS tasks are created for LED blinking, network handling, power counting, web serving, RTC updates, and DHT11 handling.

BlockRole
Electricity meter LED pulseInput event for power and energy estimation
STM32F103C8T6Main control, pulse processing, web serving
FreeRTOSTask scheduling and ISR-to-task event transfer
RTC backup registersCounter reference storage for total/day/month energy
W5500Wired Ethernet communication
Embedded web serverStatic HTML, compressed JavaScript, and JSON state endpoint
DHT11Temperature and humidity reporting

Hardware Components

Component / SignalConfirmed Role
STM32F103C8T6Main MCU, 64 KB flash / 20 KB RAM noted in source comment
W5500SPI-based Ethernet controller
SPI1MCU-to-W5500 communication
PA4W5500 chip select
PA1W5500 interrupt pin
PB11W5500 reset pin
PB7Electricity meter pulse input using EXTI
DHT11Auxiliary temperature and humidity sensor

network_low.h defines the W5500 chip-select pin as PA4, interrupt pin as PA1, and reset pin as PB11. main.c configures PB7 as a rising-edge external interrupt with pulldown, matching the pulse input role.

Software Components

File / FolderFunction
Firmware/Src/main.cMCU initialization and FreeRTOS task creation
Firmware/Src/power_counting.cPulse queue, filtering, watt calculation, energy counter update
Firmware/Src/network_low.cW5500 callback registration, DHCP, DNS, link handling
Firmware/Src/web_server.cHTTP request handling and pseudo-file serving
Firmware/Src/generate_json.cRuntime JSON state generation
Firmware/Inc/config.hSocket allocation and RTC/SNTP-related configuration
Firmware/wwwEmbedded web resources

The web server maps index.html, zepto.min.js, and state.cgi to firmware-side resources. state.cgi is generated dynamically through generate_json_data1(), while static files are served from embedded arrays.

Data Flow

 
Pulse timestamp
    ↓
Pulse period calculation
    ↓
Current power calculation
    ↓
Total/day/month energy update
    ↓
JSON field generation
    ↓
HTTP response
 

The power-counting code defines a queue size of 16, an 80 ms pulse-length filter, and a power counter coefficient of 3200. The watt conversion is based on pulse period in milliseconds and a conversion coefficient derived from 3600 seconds and 1,000,000 millisecond/micro-unit scaling. Total, day, and month counters are derived from RTC backup register values.

The JSON generator creates fields including device time, current power, total energy, daily energy, monthly energy, previous-month energy, last pulse receive time, time from reset, total time, temperature, and humidity. The implementation uses a 1024-byte buffer with sprintf() and strcat().

WIZnet Product Role

ItemAssessment
WIZnet Product RoleW5500 Ethernet Controller
System roleSPI-based wired Ethernet interface for the embedded web server
MCU connectionSPI
Network servicesDHCP, DNS, TCP HTTP server
Default network configurationDHCP with fallback/static fields in gWIZNETINFO
Web portTCP port 80

network_low.c registers W5500 chip-select and SPI callback functions through reg_wizchip_cs_cbfunc() and reg_wizchip_spi_cbfunc(). It also initializes DHCP and DNS through WIZnet-related functions.

TOE Usage

ItemAssessment
TOE usageYes
EvidenceWIZnet socket API path
Code basissocket(sock_num, Sn_MR_TCP, port, 0x00), listen(), recv(), send()
MACRAW usage코드상 확인되지 않음
lwIP / smoltcp usage코드상 확인되지 않음

The HTTP server opens TCP sockets with socket(sock_num, Sn_MR_TCP, port, 0x00), receives HTTP requests with recv(), and serves responses using WIZnet socket-level functions. This indicates use of the W5500 socket-based TCP/IP offload path rather than an MCU-side TCP/IP stack.

Hybrid Network Status

ItemAssessment
Hybrid NetworkNo
Wired networkW5500 Ethernet
Wireless network저장소 내 명시 없음
Wi-Fi / BLE / Cellular / LoRa path코드상 확인되지 않음

The confirmed network path is wired Ethernet through W5500. The repository does not show a combined wired/wireless network architecture.

Similar WIZnet / maker.wiznet.io References

Power-Meter-2 belongs to the broader WIZnet energy-monitoring area, but it differs from several existing WIZnet Maker examples by using electricity-meter LED pulse detection rather than Modbus, SML, JSY modules, or dedicated energy-metering ICs.

Existing WIZnet Maker projectMain structureDifference from Power-Meter-2
PowerMeter-with-Qt-GuiUses W5500 to transmit power consumption data to a Qt GUI.Power-Meter-2 serves its own browser UI from the MCU.
ESP32 JSY Energy Meter Gateway with W5500 SupportReads JSY energy-meter data and exposes dashboard, REST, Shelly-compatible endpoints, and UDP telemetry.Power-Meter-2 does not use a JSY metering module; it uses meter LED pulses.
Open Energy Gateway + W5500ESP32 + W5500 gateway with Modbus TCP/IP, web dashboard, JSON API upload, and RS485/TCP build options.Power-Meter-2 is not a multi-meter Modbus gateway.
Powermeter-values-to-MQTT-and-WebseverModbus RTU/TCP with MQTT and web interface, supporting wired and wireless connectivity.Power-Meter-2 has no confirmed Modbus or MQTT path.
ESP32 Poly-Phase Power MeterESP32-S3, ADE7878, W5500, and PoE for 3-phase power metering.Power-Meter-2 is not a 3-phase metering-IC design.
SML-ReaderW5500-EVB-Pico reads SML smart meter data and sends it to Home Assistant via MQTT.Power-Meter-2 uses pulse timing rather than smart meter protocol data.

The main distinction is the measurement input method. Power-Meter-2 uses a simple pulse-counting approach from an existing meter, while many related WIZnet energy projects use protocol-based or metering-IC-based data acquisition.

Strengths

StrengthDetail
Simple measurement principleUses existing electricity meter pulse output instead of adding a separate metering IC
Clear event-driven firmwareGPIO interrupt → FreeRTOS queue → power-counting task
Local Ethernet UIBrowser-accessible web page served directly from the MCU
W5500 socket usagePractical example of W5500 TCP socket web serving
Persistent counter approachUses RTC backup registers for total/day/month counter references
Compact JSON APIstate.cgi exposes power, energy, time, temperature, and humidity values

Limitations

LimitationDetail
Documentation depthBuild, flashing, sensor mounting, and calibration procedures are not fully documented
Calibration rigidityPulse coefficient is fixed at 3200 in code
SecurityPOST commands can reset or set counters; authentication is not visible in the confirmed code path
Buffer handlingJSON generation uses fixed buffers with sprintf() and strcat()
Time synchronizationSNTP-related definitions exist, but init_sntp_module() is commented out in main.c
Product readinessNo published release package

The POST handler processes commands such as reset_day_cnt, and the confirmed code path does not show authentication around these counter-changing operations.

Application Value

Power-Meter-2 is useful as a compact reference for STM32F103 + W5500 systems that need local status monitoring over Ethernet. It also provides a practical example of pulse-based energy estimation, FreeRTOS event transfer, embedded web serving, and simple JSON state publishing.

Application AreaSuitability
Home energy usage trend monitoringHigh
Auxiliary monitor for existing electricity metersHigh
W5500 embedded web server referenceHigh
FreeRTOS ISR-to-task pattern studyHigh
Billing-grade meteringLow
Industrial three-phase power analysisLow
Internet-exposed IoT serviceLow without security redesign

Author Information

The repository owner is iliasam. The public GitHub profile identifies the author as a firmware developer and lists interests including MCU programming, SDR, optics, and LIDAR. The account contains multiple embedded and hardware-oriented repositories, including lidar, laser tape reverse engineering, STM32, SDR, and GPS-related projects.


STM32F103과 W5500으로 구현한 전력량계 LED 펄스 기반 전력 모니터

프로젝트 개요

Power-Meter-2는 전력량계를 대체하는 스마트미터가 아니며, 전력 계측 IC로 전압과 전류를 직접 측정하는 설계도 아닙니다. 기존 전력량계의 LED pulse를 입력으로 받아 pulse 간격으로 현재 전력을 계산하고, pulse count를 기반으로 누적 전력량을 산출하는 로컬 보조 모니터입니다.

저장소에는 Firmware, Schematic, README.md, picture.png, structure.png가 포함되어 있습니다. 다만 공개 릴리스 패키지는 없으므로 완성형 설치 제품보다는 소스 기반 참조 구현 또는 프로토타입 성격이 강합니다.

시스템 구조와 동작 흐름

 
전력량계 LED pulse
    ↓
STM32F103 PB7 GPIO interrupt
    ↓
FreeRTOS queue
    ↓
Power counting task
    ↓
RTC backup register
    ↓
JSON 상태 생성
    ↓
W5500 TCP socket web server
    ↓
브라우저 기반 로컬 대시보드
 

main.c의 초기화 흐름은 HAL 설정, GPIO/SPI/IWDG 초기화, JSON 초기화, W5500 reset, DWT timing, RTC 초기화, power-counting 초기화, W5500 stack callback 등록, W5500/DHCP/DNS 설정으로 구성됩니다. 이후 LED blinking, network handling, power counting, web serving, RTC update, DHT11 handling을 위한 FreeRTOS task가 생성됩니다.

구성 요소역할
전력량계 LED pulse전력 및 전력량 계산을 위한 입력 이벤트입니다
STM32F103C8T6pulse 처리, 전력 계산, 상태 관리, 웹 서버 처리를 담당합니다
FreeRTOStask scheduling과 ISR-to-task event transfer를 담당합니다
RTC backup register전체/일간/월간 전력량 계산 기준 counter를 저장합니다
W5500유선 Ethernet 통신을 담당합니다
Embedded web server정적 HTML, 압축 JavaScript, JSON 상태 endpoint를 제공합니다
DHT11온도와 습도 상태값을 제공합니다

하드웨어 구성

부품 / 신호확인된 역할
STM32F103C8T6메인 MCU입니다. 소스 주석에 64 KB flash / 20 KB RAM 정보가 표시됩니다
W5500SPI 기반 Ethernet Controller입니다
SPI1MCU와 W5500 사이의 통신 경로입니다
PA4W5500 chip select입니다
PA1W5500 interrupt pin입니다
PB11W5500 reset pin입니다
PB7전력량계 pulse 입력용 EXTI pin입니다
DHT11온습도 측정용 부가 센서입니다

network_low.h는 W5500 chip-select를 PA4, interrupt pin을 PA1, reset pin을 PB11로 정의합니다. main.c는 PB7을 pulldown이 적용된 rising-edge external interrupt로 설정합니다.

소프트웨어 구성

파일 / 폴더역할
Firmware/Src/main.cMCU 초기화와 FreeRTOS task 생성을 담당합니다
Firmware/Src/power_counting.cpulse queue, filtering, watt 계산, energy counter 갱신을 담당합니다
Firmware/Src/network_low.cW5500 callback 등록, DHCP, DNS, link handling을 담당합니다
Firmware/Src/web_server.cHTTP 요청 처리와 pseudo-file serving을 담당합니다
Firmware/Src/generate_json.c런타임 JSON 상태 생성을 담당합니다
Firmware/Inc/config.hsocket allocation과 RTC/SNTP 관련 설정을 포함합니다
Firmware/www내장 웹 리소스를 포함합니다

웹 서버는 index.html, zepto.min.js, state.cgi를 펌웨어 내부 리소스로 매핑합니다. state.cgigenerate_json_data1()을 통해 동적으로 생성되며, 정적 파일은 내장 배열에서 읽어 전송됩니다.

데이터 흐름

 
Pulse timestamp
    ↓
Pulse period calculation
    ↓
Current power calculation
    ↓
Total/day/month energy update
    ↓
JSON field generation
    ↓
HTTP response
 

power_counting.c는 queue 크기를 16으로 정의하고, 80 ms보다 짧은 pulse를 필터링하며, 전력량계 pulse coefficient를 3200으로 설정합니다. 현재 전력은 pulse period와 conversion coefficient를 이용해 계산되며, 전체/일간/월간 전력량은 RTC backup register 값을 기준으로 산출됩니다.

generate_json.c는 device time, current power, total energy, daily energy, monthly energy, previous-month energy, last pulse receive time, reset 이후 시간, total time, temperature, humidity를 JSON 필드로 생성합니다. 구현은 1024-byte buffer와 sprintf(), strcat()를 사용합니다.

WIZnet 제품 사용 여부와 시스템 내 역할

항목판단
WIZnet Product RoleW5500 Ethernet Controller
시스템 내 역할임베디드 웹 서버를 위한 SPI 기반 유선 Ethernet interface입니다
MCU 연결 방식SPI
네트워크 기능DHCP, DNS, TCP HTTP server
기본 네트워크 설정gWIZNETINFO 기반 DHCP 설정과 기본 IP 필드가 존재합니다
Web portTCP port 80

network_low.creg_wizchip_cs_cbfunc()reg_wizchip_spi_cbfunc()로 W5500 chip-select 및 SPI callback을 등록합니다. 또한 DHCP와 DNS를 WIZnet 관련 함수로 초기화합니다.

TOE 사용 여부

항목판단
TOE 사용 여부
근거WIZnet socket API 경로 사용
코드 근거socket(sock_num, Sn_MR_TCP, port, 0x00), listen(), recv(), send()
MACRAW 사용코드상 확인되지 않음
lwIP / smoltcp 사용코드상 확인되지 않음

HTTP server는 socket(sock_num, Sn_MR_TCP, port, 0x00)로 TCP socket을 열고, recv()로 HTTP 요청을 수신하며, WIZnet socket 계층을 통해 응답을 전송합니다. 이 구조는 MCU-side TCP/IP stack이 아니라 W5500의 socket 기반 TCP/IP offload 경로를 사용하는 구현으로 판단됩니다.

Hybrid Network 여부

항목판단
Hybrid Network아님
유선 네트워크W5500 Ethernet
무선 네트워크저장소 내 명시 없음
Wi-Fi / BLE / Cellular / LoRa 경로코드상 확인되지 않음

확인된 네트워크 경로는 W5500 기반 유선 Ethernet입니다. 하나의 시스템 안에서 유선과 무선 네트워크를 함께 사용하는 구조는 확인되지 않습니다.

기존 WIZnet / maker.wiznet.io 유사 자료와의 차이

Power-Meter-2는 WIZnet 기반 에너지 모니터링 범주에 포함될 수 있지만, 입력 데이터 방식이 기존 자료들과 다릅니다. 이 프로젝트는 Modbus, SML, JSY module, 전력 계측 IC가 아니라 기존 전력량계의 LED pulse를 사용합니다.

기존 WIZnet Maker 자료핵심 구조Power-Meter-2와의 차이
PowerMeter-with-Qt-GuiW5500을 이용해 전력 소비 데이터를 Qt GUI로 전송합니다.Power-Meter-2는 MCU가 직접 브라우저 UI를 제공합니다.
ESP32 JSY Energy Meter Gateway with W5500 SupportJSY energy-meter 데이터를 읽고 dashboard, REST, Shelly-compatible endpoint, UDP telemetry를 제공합니다.Power-Meter-2는 JSY module이 아니라 전력량계 LED pulse를 사용합니다.
Open Energy Gateway + W5500ESP32 + W5500으로 Modbus TCP/IP 수집, web dashboard, JSON API upload, RS485/TCP build option을 제공합니다.Power-Meter-2는 다중 meter Modbus gateway가 아닙니다.
Powermeter-values-to-MQTT-and-WebseverModbus RTU/TCP, MQTT, web interface, 유무선 연결을 지원합니다.Power-Meter-2에서는 Modbus 또는 MQTT 경로가 확인되지 않습니다.
ESP32 Poly-Phase Power MeterESP32-S3, ADE7878, W5500, PoE 기반 3상 전력계입니다.Power-Meter-2는 3상 계측 IC 기반 설계가 아닙니다.
SML-ReaderW5500-EVB-Pico로 SML smart meter 데이터를 읽고 MQTT로 Home Assistant에 전송합니다.Power-Meter-2는 smart meter protocol이 아니라 pulse timing을 사용합니다.

주요 차이는 입력 데이터 방식입니다. Power-Meter-2는 기존 전력량계의 LED pulse를 기반으로 전력량을 추정하고, 관련 WIZnet Maker 자료 다수는 protocol 기반 또는 계측 IC 기반 데이터 수집 구조를 사용합니다.

장점

장점내용
단순한 측정 구조별도 metering IC 없이 기존 전력량계 pulse를 활용합니다
명확한 event-driven 구조GPIO interrupt → FreeRTOS queue → power-counting task 흐름입니다
로컬 Ethernet UIMCU가 직접 브라우저 접근 가능한 웹 UI를 제공합니다
W5500 socket 활용W5500 TCP socket 기반 HTTP server 예제로 가치가 있습니다
Counter 보존 구조RTC backup register로 total/day/month 기준 counter를 관리합니다
JSON endpointstate.cgi로 전력, 전력량, 시간, 온습도 값을 제공합니다

한계

한계내용
문서화빌드, 플래싱, 센서 장착, 보정 절차가 충분히 정리되어 있지 않습니다
Calibrationpulse coefficient가 코드에 3200으로 고정되어 있습니다
보안counter 변경 POST 명령이 있으며, 인증 처리는 확인되지 않습니다
Buffer 처리JSON 생성에 fixed buffer, sprintf(), strcat()가 사용됩니다
시간 동기화SNTP 관련 정의는 있으나 init_sntp_module() 호출은 주석 처리되어 있습니다
제품화 수준공개 릴리스 패키지가 없습니다

POST handler는 reset_day_cnt 같은 명령을 처리하며, 확인된 코드 경로에서는 counter 변경 명령에 대한 인증 처리가 보이지 않습니다.

적용 가치

Power-Meter-2는 STM32F103 + W5500 조합에서 로컬 Ethernet 상태 모니터링을 구현하는 참조 사례로 활용할 수 있습니다. 또한 pulse 기반 전력량 추정, FreeRTOS ISR-to-task event transfer, embedded web serving, JSON 상태 제공 구조를 한 프로젝트 안에서 확인할 수 있습니다.

적용 분야적합도
가정용 전력 사용량 추세 확인높음
기존 전력량계 보조 모니터높음
W5500 embedded web server 참고높음
FreeRTOS ISR-to-task 구조 학습높음
Billing-grade 계측낮음
산업용 3상 전력 분석낮음
인터넷 노출형 IoT 서비스보안 재설계 없이는 낮음

저자 정보

저장소 소유자는 iliasam입니다. 공개 GitHub 프로필에는 firmware developer로 표시되어 있으며, MCU programming, SDR, optics, LIDAR에 대한 관심이 명시되어 있습니다. 해당 계정에는 lidar, laser tape reverse engineering, STM32, SDR, GPS 관련 임베디드·하드웨어 중심 저장소가 다수 포함되어 있습니다.

Documents
  • Power-Meter-2

Comments Write