# ESP32-C3 SPI Slave with ESP-NOW Project This ESP-IDF project implements an SPI slave device that broadcasts received data via ESP-NOW with the following GPIO configuration: - **MOSI**: GPIO10 - **MISO**: GPIO9 - **SCLK**: GPIO20 - **CS**: GPIO7 ## Features - SPI Mode 0 (CPOL=0, CPHA=0) - 256-byte buffer for data exchange - DMA support for efficient transfers - Real-time data logging via UART - **ESP-NOW broadcasting** of received SPI data - Timestamped data packets - Broadcast to all nearby ESP32 devices ## Building and Flashing 1. Set up ESP-IDF environment: ```bash . $HOME/esp/esp-idf/export.sh ``` 2. Build the project: ```bash cd esp32 idf.py build ``` 3. Flash to ESP32-C3: ```bash idf.py -p /dev/ttyUSB0 flash monitor ``` ## Usage The ESP32-C3 will act as an SPI slave device, waiting for transactions from an SPI master. When data is received, it will: 1. Print the received data to the serial console 2. **Broadcast the received data via ESP-NOW** to all nearby ESP32-C3 devices 3. Send back a test pattern (0x00, 0x01, 0x02, ...) 4. Wait for the next transaction ## ESP-NOW Data Format The broadcasted data includes: - **Data**: The actual SPI received data (up to 256 bytes) - **Length**: Number of bytes received - **Timestamp**: Millisecond timestamp when data was received ## Receiving ESP-NOW Data To receive the broadcasted data on another ESP32-C3 device, you can use the ESP-NOW receive callback function. The data structure is: ```c typedef struct { uint8_t data[256]; // Received SPI data uint8_t length; // Number of bytes uint32_t timestamp; // Timestamp in milliseconds } espnow_data_t; ``` ## Serial Monitor Connect to the serial monitor to see debug output: ```bash idf.py -p /dev/ttyUSB0 monitor ``` The device will log received SPI data and transaction status.