add claude.md
This commit is contained in:
parent
fb61fa85f3
commit
0d83df11a2
2 changed files with 184 additions and 2 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,2 @@
|
|||
|
||||
.DS_Store
|
||||
/ESPMegaPRO-OS-SDK
|
||||
|
|
183
ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/CLAUDE.md
Normal file
183
ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/CLAUDE.md
Normal file
|
@ -0,0 +1,183 @@
|
|||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is the ESPMegaPRO library - a comprehensive Arduino/PlatformIO library for the ESPMegaPRO industrial automation board. The library provides both procedural (legacy) and object-oriented interfaces for interfacing with the ESP32-based ESPMegaPRO hardware platform.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
**ESPMegaPRO.h**: Legacy procedural interface for basic board functions (digital I/O, analog I/O, RTC, PWM)
|
||||
|
||||
**ESPMegaProOS.hpp**: Modern OOP interface - main class that manages the entire system including:
|
||||
- Built-in Digital Input Card (slot 0)
|
||||
- Built-in Digital Output Card (slot 1)
|
||||
- Expansion card management (255 slots)
|
||||
- IoT module integration
|
||||
- Internal display management
|
||||
- Web server functionality
|
||||
- Recovery mode
|
||||
|
||||
### Expansion Card System
|
||||
|
||||
The library uses a modular expansion card architecture:
|
||||
|
||||
**ExpansionCard.hpp**: Base abstract class for all expansion cards
|
||||
- All cards inherit from this class
|
||||
- Defines standard interface: `begin()`, `loop()`, `getType()`
|
||||
|
||||
**Available Card Types**:
|
||||
- `DigitalInputCard`: 16-channel digital input with debouncing and callbacks
|
||||
- `DigitalOutputCard`: 16-channel PWM/digital output with FRAM persistence
|
||||
- `AnalogCard`: 8-channel ADC input + 4-channel DAC output (MCP4725)
|
||||
- `ClimateCard`: IR-controlled AC + DHT/DS18B20 sensors
|
||||
- `CurrentTransformerCard`: AC current monitoring
|
||||
|
||||
### Protocol Support
|
||||
- **RTU Classes**: ModbusTCP/RTU support for industrial protocols
|
||||
- **IR Communication**: Climate card supports IR AC control
|
||||
- **Web Interface**: AsyncWebServer for configuration
|
||||
- **OTA Updates**: Built-in firmware update capability
|
||||
|
||||
### IoT Integration
|
||||
|
||||
**IoTComponent.hpp**: Base class for MQTT-enabled card interfaces
|
||||
- Provides MQTT publish/subscribe helpers
|
||||
- Each expansion card can have a corresponding IoT component
|
||||
- Pattern: `{CardName}IoT` classes (e.g., `DigitalInputIoT`, `AnalogIoT`)
|
||||
|
||||
**ESPMegaIoT**: Main IoT management class handling WiFi and MQTT connectivity
|
||||
|
||||
### Display & Interface
|
||||
|
||||
**InternalDisplay**: Nextion display interface for boards with built-in displays
|
||||
**ESPMegaWebServer**: HTTP server for web-based configuration
|
||||
**ESPMegaRecovery**: Bootloop recovery system
|
||||
**SmartVariable/RemoteVariable**: MQTT-enabled configuration variables
|
||||
|
||||
## File Naming Conventions
|
||||
- Card classes: `{Name}Card.hpp/.cpp`
|
||||
- IoT components: `{Name}IoT.hpp/.cpp`
|
||||
- RTU components: `{Name}RTU.hpp/.cpp`
|
||||
- Display classes: `ESPMegaDisplay`, `InternalDisplay`
|
||||
- Utility classes: `SmartVariable`, `RemoteVariable`
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### File Structure
|
||||
- `*.hpp`: Header files with class definitions
|
||||
- `*.cpp`: Implementation files
|
||||
- `html/`: Web interface templates
|
||||
- `*_html.h`: Compiled HTML resources
|
||||
|
||||
### Key Constants
|
||||
- I2C addresses defined in headers (0x21, 0x22, 0x5F, etc.)
|
||||
- Card type constants (CARD_TYPE_DIGITAL_INPUT = 0x01, etc.)
|
||||
- Hardware pin mappings and interrupt pins
|
||||
- Default debounce time: 50ms for digital inputs
|
||||
- PWM range: 0-4095 (12-bit)
|
||||
- FRAM addresses: 0-1000 reserved for internal use
|
||||
|
||||
### Special Files
|
||||
- `ESPMegaCommon.hpp`: Shared constants and typedefs
|
||||
- `TimeStructure.hpp`: Time-related structures
|
||||
- `html/*.html`: Web interface templates
|
||||
- `*_html.h`: Compiled HTML as C arrays
|
||||
- `all_html.h`: Combined HTML resources
|
||||
|
||||
### Memory Management
|
||||
- Uses FRAM (0x56) for persistent storage
|
||||
- Built-in RTC (0x68) for timekeeping
|
||||
- NTP synchronization support
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
### Adding New Cards
|
||||
1. Inherit from `ExpansionCard`
|
||||
2. Implement required virtual methods
|
||||
3. Define unique card type constant
|
||||
4. Create corresponding `IoTComponent` if MQTT support needed
|
||||
|
||||
### Working with I2C
|
||||
- Multiple I2C devices with fixed addresses
|
||||
- Cards typically use PCF8574 GPIO expanders
|
||||
- Analog cards use ADS1X15 ADCs and MCP4725 DACs
|
||||
- Wire.begin(14, 33) - specific SDA/SCL pins for ESPMegaPRO
|
||||
|
||||
### Callback System
|
||||
- Digital inputs support callback registration with debouncing
|
||||
- Use `std::function<void(uint8_t, bool)>` for pin change callbacks
|
||||
- Output cards use `std::function<void(uint8_t, bool, uint16_t)>` for state/value changes
|
||||
- Analog cards use `std::function<void(uint8_t, bool, uint16_t)>` for DAC changes
|
||||
|
||||
### Card Installation Pattern
|
||||
```cpp
|
||||
ESPMegaPRO megapro;
|
||||
megapro.installCard(slot, &card); // Automatically calls card.begin()
|
||||
```
|
||||
|
||||
### FRAM Usage Pattern
|
||||
```cpp
|
||||
card.bindFRAM(&fram, baseAddress);
|
||||
card.setAutoSaveToFRAM(true);
|
||||
card.loadFromFRAM(); // Restore state on boot
|
||||
```
|
||||
|
||||
### IoT Component Pattern
|
||||
```cpp
|
||||
DigitalInputCard card;
|
||||
DigitalInputIoT cardIoT;
|
||||
cardIoT.begin(cardId, &card, &mqtt, baseTopic);
|
||||
```
|
||||
|
||||
## Key Implementation Patterns
|
||||
|
||||
### Memory Management
|
||||
- **FRAM Integration**: Persistent storage using I2C FRAM (address 0x56)
|
||||
- Cards can bind to FRAM with `bindFRAM(fram, address)`
|
||||
- Auto-save functionality for state persistence
|
||||
- Memory layout reservations (0-1000 for ESPMegaPRO internal use)
|
||||
|
||||
### Callback Architecture
|
||||
- **std::function**: Extensive use of C++ std::function for callbacks
|
||||
- **std::map**: Callback storage using maps with handler IDs
|
||||
- **Pin Change Detection**: Debounced input handling with configurable timing
|
||||
- **Change Notifications**: State change callbacks for outputs/DACs
|
||||
|
||||
### Pin Mapping System
|
||||
- **Virtual Pin Maps**: Configurable pin mapping between logical and physical pins
|
||||
- **Dual Arrays**: `pinMap[16]` (virtual→physical) and `virtualPinMap[16]` (physical→virtual)
|
||||
- **Flexible Addressing**: Support both I2C addresses and DIP switch configurations
|
||||
|
||||
### Error Handling & Logging
|
||||
- **ESP_LOG**: Consistent ESP-IDF logging throughout (LOGD, LOGE, LOGV, LOGI)
|
||||
- **Initialization Checking**: Cards track `initOk` status and validate before operations
|
||||
- **Graceful Degradation**: Failed card initialization doesn't crash the system
|
||||
|
||||
### MQTT/IoT Integration
|
||||
- **Topic Structure**: `{base_topic}/{card_id}/{subtopic}` hierarchy
|
||||
- **Relative Publishing**: Helper functions for topic construction
|
||||
- **State Requests**: Global `/requeststate` and `/requestinfo` endpoints
|
||||
- **Component Registration**: Cards register IoT components for MQTT handling
|
||||
|
||||
### Thread Safety
|
||||
- **Mutex Protection**: Serial communication protected with mutexes
|
||||
- **IRAM Functions**: Interrupt handlers marked with `IRAM_ATTR`
|
||||
- **Buffer Management**: Circular buffers for serial communication
|
||||
|
||||
### Hardware Abstraction
|
||||
- **I2C Multiplexing**: Multiple devices on shared I2C bus
|
||||
- **PWM Management**: Adafruit PWM driver for outputs with push-pull configuration
|
||||
- **ADC/DAC**: Multi-channel analog I/O via dedicated ICs
|
||||
- **RTC Integration**: DS1307 RTC with NTP synchronization
|
||||
|
||||
### Development Conventions
|
||||
- **Doxygen Documentation**: Comprehensive function documentation
|
||||
- **Namespace Prefixes**: `ESPMega_` for procedural, class names for OOP
|
||||
- **Header Guards**: `#pragma once` used consistently
|
||||
- **File Organization**: Separate `.hpp/.cpp` pairs for each major component
|
||||
|
||||
This is a pure library with no build system - it's designed to be included in Arduino/PlatformIO projects as a dependency.
|
Loading…
Add table
Add a link
Reference in a new issue