# Hardware Reference **Version**: 1.0.0 **Date**: 2026-06-26 ## 1. Target Hardware ### 1.1 LW840X Module The LW840X is an ESP32-based WiFi module designed for IoT applications. | Specification | Value | |---------------|-------| | MCU | ESP32 (Xtensa LX7 dual-core) | | Clock | 240 MHz | | RAM | 520 KB SRAM | | Flash | 4 MB (external) | | WiFi | 802.11 b/g/n (2.4 GHz) | | Bluetooth | None (LW840X) | | GPIO | 20+ (depends on module) | | ADC | 18 channels (12-bit) | | Operating Temp | -40°C to +85°C | | Voltage | 3.0V to 3.6V | ### 1.2 Pin Mapping ``` LW840X Module Pinout ┌─────────────────────────────────────┐ │ │ │ 3V3 ─┐ │ │ GND ─┤ │ │ EN ─┤ │ │ IO0 ─┤ Boot/Flash mode │ │ IO1 ─┤ TX0 (UART0) │ │ IO3 ─┤ RX0 (UART0) │ │ IO4 ─┤ Status LED │ │ IO5 ─┤ (reserved) │ │ IO12 ─┤ (reserved) │ │ IO13 ─┤ (reserved) │ │ IO14 ─┤ (reserved) │ │ IO15 ─┤ (reserved) │ │ IO16 ─┤ (reserved) │ │ IO17 ─┤ (reserved) │ │ IO18 ─┤ (reserved) │ │ IO19 ─┤ (reserved) │ │ IO21 ─┤ (reserved) │ │ IO22 ─┤ (reserved) │ │ IO23 ─┤ (reserved) │ │ IO25 ─┤ (reserved) │ │ IO26 ─┤ (reserved) │ │ IO27 ─┤ (reserved) │ │ IO32 ─┤ (reserved) │ │ IO33 ─┤ (reserved) │ │ IO34 ─┤ (reserved) │ │ IO35 ─┤ (reserved) │ │ │ └─────────────────────────────────────┘ ``` ### 1.3 Minimal Circuit ``` Power Supply: 3.3V ──── LW840X 3V3 GND ──── LW840X GND Decoupling: 100nF ceramic capacitor between 3V3 and GND (close to module) Boot/Flash: IO0 ──── 10K pull-up to 3V3 (normal boot) IO0 ──── GND (flash mode) Status LED: IO4 ──── 220Ω ──── LED ──── GND UART (for debugging): IO1 (TX0) ──── USB-UART RX IO3 (RX0) ──── USB-UART TX GND ──── USB-UART GND ``` ## 2. Power Requirements ### 2.1 Current Consumption | Mode | Current | Notes | |------|---------|-------| | Active (WiFi TX) | 130-170 mA | Transmitting data | | Active (WiFi RX) | 80-100 mA | Receiving data | | Modem Sleep | 15-20 mA | WiFi connected, low duty cycle | | Light Sleep | 0.8-1.5 mA | CPU paused, WiFi wake | | Deep Sleep | 5-10 µA | RTC only, wake on GPIO | | Off | 0 µA | No power | ### 2.2 Power Supply Design ``` Recommended: Input: 5V USB or 12V DC Regulator: AMS1117-3.3 or similar LDO Capacity: 500mA minimum ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 5V USB │────▶│ LDO │────▶│ LW840X │ │ │ │ 3.3V │ │ │ └─────────┘ └─────────┘ └─────────┘ │ GND ``` ### 2.3 Battery Operation For battery-powered applications: | Battery | Capacity | Runtime (Active) | Runtime (Sleep) | |---------|----------|------------------|-----------------| | CR2032 | 225 mAh | ~1.5 hours | ~2 years | | 18650 | 3400 mAh | ~20 hours | ~30 years | | LiPo 1000mAh | 1000 mAh | ~6 hours | ~10 years | **Note**: Deep sleep with periodic wake (e.g., every 5 minutes) is recommended for battery operation. ## 3. Antenna Options ### 3.1 PCB Trace Antenna - **Pros**: Low cost, compact - **Cons**: Lower gain, sensitive to placement - **Range**: 10-30m (indoor) - **Use Case**: Short-range, cost-sensitive ### 3.2 U.FL Connector - **Pros**: Higher gain, flexible placement - **Cons**: Additional cost, larger size - **Range**: 50-100m (indoor) - **Use Case**: Longer range, industrial ### 3.3 External Antenna - **Pros**: Best performance, directional options - **Cons**: Highest cost, largest size - **Range**: 100m+ (outdoor) - **Use Case**: Outdoor, long-range ## 4. Development Board ### 4.1 ESP32-DevKitC Recommended for development and prototyping. | Feature | Specification | |---------|---------------| | MCU | ESP32-WROOM-32 | | Flash | 4 MB | | RAM | 520 KB SRAM | | WiFi | 802.11 b/g/n | | Bluetooth | BT 4.2 + BLE | | USB | Micro-USB (CP2102) | | GPIO | 38 pins | | Price | ~$5-10 | ### 4.2 Flashing ```bash # Install ESP-IDF # https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/ # Set target idf.py set-target esp32 # Build idf.py build # Flash (auto-detect port) idf.py -p /dev/ttyUSB0 flash # Monitor idf.py -p /dev/ttyUSB0 monitor ``` ### 4.3 Pin Connections (DevKit) ``` Status LED: GPIO4 ──── 220Ω ──── LED ──── GND Debug UART (optional): GPIO1 (TX0) ──── USB-UART RX GPIO3 (RX0) ──── USB-UART TX GND ──── USB-UART GND ``` ## 5. Production Board ### 5.1 Design Guidelines 1. **Power**: - Use 3.3V LDO with 500mA capacity - Add 100nF ceramic capacitor close to 3V3 pin - Add 10µF tantalum capacitor for bulk decoupling 2. **Antenna**: - Keep antenna area clear of copper pours - Minimum 10mm clearance around antenna - Use U.FL connector for external antenna 3. **Layout**: - Route UART traces away from antenna - Keep crystal traces short - Ground plane under module 4. **Enclosure**: - Use non-metallic enclosure (plastic) - Ensure antenna is not shielded - Provide mounting holes ### 5.2 Bill of Materials (BOM) | Component | Quantity | Package | Notes | |-----------|----------|---------|-------| | LW840X | 1 | Module | ESP32-based | | AMS1117-3.3 | 1 | SOT-223 | 3.3V LDO | | 100nF | 2 | 0402 | Decoupling | | 10µF | 1 | 0805 | Bulk cap | | 220Ω | 1 | 0402 | LED resistor | | LED | 1 | 0603 | Status indicator | | U.FL | 1 | SMD | Antenna connector | | Header | 1 | 2.54mm | Debug UART | ### 5.3 Schematic ``` ┌─────────────────┐ │ LW840X │ 3.3V ────────────┤ 3V3 GND ├──── GND │ │ IO4 ──── 220Ω ───┤ IO4 TX0 ├──── UART RX └── LED ──┤ RX0 ├──── UART TX GND │ │ │ EN ├──── 10K ──── 3.3V │ │ │ IO0 ├──── 10K ──── 3.3V │ │ (flash: GND) └─────────────────┘ ``` ## 6. Testing & Validation ### 6.1 Hardware Tests 1. **Power-on Test**: - Verify 3.3V at module pin - Check current consumption (~50mA idle) - Confirm LED blinks on boot 2. **WiFi Test**: - Scan for WiFi networks - Connect to test AP - Measure RSSI at distance 3. **UART Test**: - Send AT commands (if firmware supports) - Verify debug output - Check baud rate (115200) 4. **Flash Test**: - Write/read NVS data - Verify flash size - Test wear leveling ### 6.2 Production Test 1. **Functional Test**: - Provision with test server - Verify WireGuard handshake - Check heartbeat response 2. **Stress Test**: - Run for 24+ hours - Monitor memory leaks - Verify reconnection after WiFi drop 3. **Environmental Test**: - Operating temperature range - Humidity resistance - Vibration resistance ## 7. Troubleshooting ### 7.1 Common Issues | Symptom | Cause | Solution | |---------|-------|----------| | No boot | IO0 held low | Remove flash jumper | | No WiFi | Antenna issue | Check antenna connection | | High current | WiFi always on | Use modem sleep | | Crash on boot | Stack overflow | Increase task stack size | | Provision fail | Token expired | Get new token from server | ### 7.2 Debug Tools - **Serial Monitor**: `idf.py monitor` - **JTAG Debugger**: OpenOCD + GDB - **Logic Analyzer**: Saleae or similar - **Power Analyzer**: Monsoon or similar ## 8. Compliance ### 8.1 Certifications - **FCC**: Required for US market - **CE**: Required for EU market - **IC**: Required for Canada market - **TELEC**: Required for Japan market ### 8.2 Testing - EMC testing (emissions and immunity) - SAR testing (if applicable) - Environmental testing (temperature, humidity) ## 9. References - [ESP32 Hardware Design Guidelines](https://www.espressif.com/sites/default/files/documentation/esp32_hardware_design_guidelines_en.pdf) - [ESP32 Datasheet](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf) - [LW840X Module Datasheet](link-to-datasheet) - [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/)