159 lines
4.2 KiB
Markdown
159 lines
4.2 KiB
Markdown
# ZoneBridge - ESP32-S3 Touch LCD Project Setup
|
|
|
|
## Project Overview
|
|
This is a C++ ESP-IDF project for the Waveshare ESP32-S3-Touch-LCD 4.3" display with the following features:
|
|
- **C++ Framework** with proper C++ exception handling
|
|
- **FreeRTOS** for task management
|
|
- **LVGL** for UI/graphics on the 800x480 touch display
|
|
- **WiFi** connectivity
|
|
- **HTTP Web Server** for remote control/monitoring
|
|
- **Touch Input** support for the capacitive touch panel
|
|
|
|
## Project Structure
|
|
```
|
|
main/
|
|
├── main.cpp # Entry point (C++)
|
|
├── app_config.hpp/cpp # Application initialization and configuration
|
|
├── display_manager.hpp/cpp # LVGL display handling and UI management
|
|
├── wifi_manager.hpp/cpp # WiFi connectivity management
|
|
├── web_server.hpp/cpp # HTTP web server implementation
|
|
├── lv_conf.h # LVGL configuration
|
|
└── idf_component.yml # Component dependencies
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### WiFi Credentials
|
|
Edit these constants in [app_config.hpp](app_config.hpp):
|
|
```cpp
|
|
#define DEFAULT_SSID "YOUR_SSID"
|
|
#define DEFAULT_PASSWORD "YOUR_PASSWORD"
|
|
```
|
|
|
|
### Display Configuration
|
|
The display parameters are configured in [app_config.hpp](app_config.hpp):
|
|
- **Resolution**: 800x480
|
|
- **Color Depth**: 16-bit RGB565
|
|
- **Display Driver**: LVGL (software stack)
|
|
|
|
### Web Server
|
|
- **Default Port**: 80
|
|
- **Endpoints**:
|
|
- `GET /` - HTML dashboard
|
|
- `GET /api/status` - JSON status endpoint
|
|
|
|
## Building the Project
|
|
|
|
### Method 1: VS Code Tasks (Recommended)
|
|
1. Open Command Palette: `Cmd+Shift+P`
|
|
2. Run "Tasks: Run Task"
|
|
3. Select "ESP-IDF: Build"
|
|
|
|
### Method 2: Terminal
|
|
```bash
|
|
cd /Users/brent/zonebridge/zonebridge
|
|
source ./setup_esp_env.sh
|
|
idf.py build
|
|
```
|
|
|
|
## Common Commands
|
|
|
|
```bash
|
|
# Build the project
|
|
idf.py build
|
|
|
|
# Clean build artifacts
|
|
idf.py clean
|
|
|
|
# Configure via menuconfig
|
|
idf.py menuconfig
|
|
|
|
# Flash to device and monitor
|
|
idf.py flash monitor
|
|
|
|
# Monitor serial output
|
|
idf.py monitor
|
|
|
|
# Analyze binary size
|
|
idf.py size
|
|
```
|
|
|
|
## Hardware Notes
|
|
|
|
### Waveshare ESP32-S3-Touch-LCD 4.3"
|
|
- **Display**: 4.3" 800x480 RGB LCD
|
|
- **Touch Input**: Capacitive touchscreen
|
|
- **Connectivity**: Built-in WiFi and Bluetooth
|
|
- **Ports**: USB-C for programming and power
|
|
|
|
### Display Connection
|
|
The display is typically connected via:
|
|
- 16-bit parallel RGB interface (via LCDC peripheral)
|
|
- SPI interface (alternative, if RGB not used)
|
|
- I2C for touch controller (CST816)
|
|
|
|
### Touch Controller
|
|
- **Model**: CST816S (capacitive touchpad controller)
|
|
- **Interface**: I2C (typically pins 19/20 on ESP32-S3)
|
|
- **Interrupt**: GPIO pin for touch interrupt
|
|
|
|
## Implementation Tasks
|
|
|
|
### Phase 1: ✓ Project Structure
|
|
- [x] C++ conversion
|
|
- [x] FreeRTOS integration
|
|
- [x] Component hierarchy
|
|
- [x] Basic LVGL setup
|
|
|
|
### Phase 2: Display Driver
|
|
- [ ] RGB LCD driver initialization
|
|
- [ ] Touch input driver (CST816 I2C)
|
|
- [ ] Frame buffer management
|
|
- [ ] Display refresh loop
|
|
|
|
### Phase 3: UI Development
|
|
- [ ] Main dashboard UI
|
|
- [ ] Status displays
|
|
- [ ] Control buttons
|
|
- [ ] Menu system
|
|
|
|
### Phase 4: WiFi & Web
|
|
- [ ] WiFi connection handling
|
|
- [ ] Web dashboard enhancement
|
|
- [ ] REST API endpoints
|
|
- [ ] WebSocket support (optional)
|
|
|
|
## Next Steps
|
|
|
|
1. **Configure WiFi**: Update WiFi credentials in [app_config.hpp](app_config.hpp)
|
|
2. **Build & Test**: Run build task to verify compilation
|
|
3. **Flash Device**: Use `idf.py flash monitor` to program device
|
|
4. **Display Driver**: Implement actual display hardware interface
|
|
5. **Touch Input**: Add touch controller driver
|
|
|
|
## Troubleshooting
|
|
|
|
### Build Errors Related to Components
|
|
```bash
|
|
# Rebuild component cache
|
|
rm -rf build
|
|
idf.py fullclean
|
|
idf.py build
|
|
```
|
|
|
|
### LVGL Compilation Issues
|
|
- Ensure LVGL component is installed: `idf.py component-manager create-manifest`
|
|
- Check `lv_conf.h` matches your requirements
|
|
|
|
### WiFi Connection Issues
|
|
- Verify SSID/password in `app_config.hpp`
|
|
- Check WiFi event handling in `wifi_manager.cpp`
|
|
- Monitor UART output: `idf.py monitor`
|
|
|
|
## Resources
|
|
|
|
- [ESP-IDF Documentation](https://docs.espressif.com/projects/esp-idf/en/latest/)
|
|
- [LVGL Documentation](https://docs.lvgl.io/)
|
|
- [Waveshare Product Page](https://www.waveshare.com/esp32-s3-touch-lcd-4.3.htm?sku=25948)
|
|
- [ESP32-S3 Datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf)
|