Compare commits
No commits in common. "main" and "input_card_ext" have entirely different histories.
main
...
input_card
3 changed files with 3 additions and 185 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
/ESPMegaPRO-OS-SDK
|
||||||
|
|
|
@ -1,183 +0,0 @@
|
||||||
# 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.
|
|
|
@ -1,3 +1,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define SDK_VESRION "2.10.0"
|
#define SDK_VESRION "2.9.8"
|
Loading…
Add table
Add a link
Reference in a new issue