PCB Design for Smart Tee Marker Robot
J_BU01은 아직 단일 2×18 좁은 듀얼로우 소켓 기준이라서 사진 속 NodeMCU BU-01 보드와 맞지 않습니다.J_BU01 단일 2×18 소켓 제거J_BU01_L, J_BU01_R 같은 1×18 female socket 2개로 교체Table
| Function | ESP32 GPIO | Net | Direction | Notes |
|---|---|---|---|---|
| BU01 UART RX into ESP32 | GPIO16 | ESP_RX | Input | ESP32 Serial2 RX receives BU01 U1TX/PA9 |
| BU01 UART TX from ESP32 | GPIO17 | ESP_TX | Output | ESP32 Serial2 TX drives BU01 U1RX/PA10 |
| USB-UART RX | GPIO3/RXD0 | ESP_U0RX | Input | CH340C TXD to ESP32 UART0 RX |
| USB-UART TX | GPIO1/TXD0 | ESP_U0TX | Output | ESP32 UART0 TX to CH340C RXD |
| BOOT | GPIO0 | ESP_IO0_BOOT | Input strap | Pull-up plus BOOT button / auto-reset transistor |
| Enable/reset | EN | ESP_EN | Input | Pull-up, 1uF delay cap, reset button, auto-reset transistor |
Ini
[env:esp32dev] platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 upload_speed = 921600
Cpp
#include <Arduino.h> #include <WiFi.h> #include <HTTPClient.h> // ESP32 schematic pins #define BU01_UART_RX_PIN 16 // GPIO16/U2RXD <- ESP_RX <- BU01 U1TX/PA9 #define BU01_UART_TX_PIN 17 // GPIO17/U2TXD -> ESP_TX -> BU01 U1RX/PA10 #define BU01_BAUD 115200 #define USB_DEBUG_BAUD 115200 #define BU01_POLL_INTERVAL_MS 1000 const char* WIFI_SSID = "YOUR_SSID"; const char* WIFI_PASSWORD = "YOUR_PASSWORD"; const char* UPLINK_URL = "http://192.168.1.100:8080/tee-marker"; HardwareSerial BU01Serial(2); unsigned long lastPoll = 0; void initWiFi() { WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("WiFi connecting"); for (int i = 0; i < 30 && WiFi.status() != WL_CONNECTED; ++i) { delay(500); Serial.print('.'); } Serial.println(); if (WiFi.status() == WL_CONNECTED) { Serial.print("WiFi connected, IP="); Serial.println(WiFi.localIP()); } else { Serial.println("WiFi not connected; continuing with UART bridge/debug only"); } } void sendToUplink(const String& payload) { if (WiFi.status() != WL_CONNECTED) { initWiFi(); } if (WiFi.status() == WL_CONNECTED) { HTTPClient http; http.begin(UPLINK_URL); http.addHeader("Content-Type", "application/json"); int code = http.POST(payload); Serial.printf("HTTP POST code=%d\n", code); http.end(); } } void setup() { Serial.begin(USB_DEBUG_BAUD); delay(200); Serial.println("Smart Tee Marker ESP32 uplink starting"); BU01Serial.begin(BU01_BAUD, SERIAL_8N1, BU01_UART_RX_PIN, BU01_UART_TX_PIN); initWiFi(); } void loop() { while (BU01Serial.available()) { String line = BU01Serial.readStringUntil('\n'); line.trim(); if (line.length() > 0) { Serial.print("BU01> "); Serial.println(line); String payload = String("{\"source\":\"bu01\",\"data\":\"") + line + "\"}"; sendToUplink(payload); } } unsigned long now = millis(); if (now - lastPoll >= BU01_POLL_INTERVAL_MS) { lastPoll = now; BU01Serial.println("STATUS?"); } }
pio run -t upload.pio device monitor -b 115200.BU01> lines.Platform & Toolchain
Pin Mapping
Dependencies & Project Setup
Complete Firmware Source
Build & Flash Instructions
Notes