Skip to content

PipeInspect: Wired Ethernet Control & Wi-Fi Video Streaming

PipeInspect drives a dual-steer pipe inspection robot over W5500 Ethernet on ESP32-C3, keeping commands wired while SJ4000 video streams over Wi-Fi

irina

Published August 12, 2026

Original author: EarthBBMPOriginal source (new tab)

PipeInspect: Wired Ethernet Control & Wi-Fi Video Streaming

Project description

๐Ÿ“Œ Overview

PipeInspect๋Š” ๋ฐฐ๊ด€ ๋‚ด๋ถ€๋ฅผ ์ ๊ฒ€ํ•˜๋Š” dual-steer inspection robot์„ PC์˜ web dashboard์—์„œ ์กฐ์ข…ํ•˜๋Š” open source project์ž…๋‹ˆ๋‹ค. Robot controller๋Š” ESP32-C3์ด๋ฉฐ, W5500์ด SPI๋กœ ์—ฐ๊ฒฐ๋˜์–ด PC์™€์˜ command link๋ฅผ wired Ethernet์œผ๋กœ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ด project์—์„œ ๋ˆˆ์— ๋„๋Š” ์ ์€ control path์™€ video path๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์กฐ์ข… ๋ช…๋ น์€ W5500 Ethernet์„ ํ†ตํ•ด ์œ ์„ ์œผ๋กœ ์ „๋‹ฌ๋˜๊ณ , ์˜์ƒ์€ SJCAM SJ4000 action camera์˜ ์ž์ฒด Wi-Fi AP๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. PC๋Š” ๋‘ network์— ๋™์‹œ์— ์ ‘์†ํ•œ ์ƒํƒœ์—์„œ Flask ๊ธฐ๋ฐ˜ web UI๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ๋ธŒ๋ผ์šฐ์ € ํ‚ค๋ณด๋“œ ์ž…๋ ฅ๋งŒ์œผ๋กœ ์ฃผํ–‰ยท์กฐํ–ฅยทcamera pan/tilt๋ฅผ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Repository๋Š” ๋‹ค์Œ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • firmware/pipeinspect_esp32c3/pipeinspect_esp32c3.ino โ€” ESP32-C3 + W5500 Arduino sketch
  • app.py + requirements.txt โ€” Flask server ๋ฐ camera stream proxy
  • templates/ + static/ โ€” HTML/CSS/JS front-end

Language ๋น„์ค‘์€ C++ 24.3%, JavaScript 22.0%, Python 19.4%, HTML 17.3%, CSS 17.0%๋กœ firmware์™€ web stack์ด ๊ฑฐ์˜ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋‰˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์ด repository๋Š” commit 4๊ฐœ, star 0, license ์—†์Œ, release ์—†์Œ์˜ ์ดˆ๊ธฐ prototype ๋‹จ๊ณ„์ด๋ฉฐ, ๋’ค์—์„œ ์„ค๋ช…ํ•  ๋ฏธ์™„์„ฑ ๋ถ€๋ถ„๊ณผ pin ์ถฉ๋Œ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์™„์„ฑ๋œ ์ œํ’ˆ ์‚ฌ๋ก€๊ฐ€ ์•„๋‹ˆ๋ผ W5500์„ mobile robot์˜ control link๋กœ ์‚ฌ์šฉํ•œ ์ดˆ๊ธฐ ๊ตฌํ˜„ ์‚ฌ๋ก€๋กœ ์ฝ๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ŒComponents

ComponentRole์ˆ˜๋Ÿ‰
WIZnet - W5500ESP32-C3์˜ wired Ethernet interface (SPI ์—ฐ๊ฒฐ)x 1
ESP32-C3Robot controller, HTTP command serverx 1
Drive motorsForward / reverse ๊ตฌ๋™x 2
Front / back steer servos์ „๋ฅœยทํ›„๋ฅœ ๋…๋ฆฝ ์กฐํ–ฅx 2
Pan / tilt servosCamera mount ๋ฐฉํ–ฅ ์ œ์–ดx 2
SJCAM SJ4000Wi-Fi action camera (MJPEG / RTSP video feed)x 1
PCFlask web UI ๋ฐ stream proxy ์‹คํ–‰x 1

๐Ÿ“Œ Features

PipeInspect: Wired Ethernet Control & Wi-Fi Video Streaming, ๐Ÿ“Œ Features

1. Dual-steer โ€” ์ „๋ฅœ๊ณผ ํ›„๋ฅœ์„ ๋…๋ฆฝ ์กฐํ–ฅ

์ผ๋ฐ˜์ ์ธ rover๋Š” ์ „๋ฅœ๋งŒ ์กฐํ–ฅํ•˜๊ฑฐ๋‚˜ differential drive๋กœ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. PipeInspect๋Š” front steer servo์™€ back steer servo๋ฅผ ๊ฐ๊ฐ ๋ณ„๋„ key๋กœ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ถ„์ขŒ์šฐ์ค‘์•™ ๋ณต๊ท€
์ฃผํ–‰W ์ „์ง„ (hold)S ํ›„์ง„ (hold)STOP
์ „๋ฅœ ์กฐํ–ฅADF
ํ›„๋ฅœ ์กฐํ–ฅZCV
Camera pan/tilt4 / 6 (pan), 8 / 2 (tilt)โ€”5

Numpad key๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Steer key๋Š” hold ๋ฐฉ์‹์œผ๋กœ ๊ฐ๋„๋ฅผ 45โ€“135ยฐ ๋ฒ”์œ„์—์„œ 40 ms๋งˆ๋‹ค 2ยฐ์”ฉ ์ด๋™์‹œํ‚ค๊ณ , key๋ฅผ ๋–ผ๋ฉด ๊ทธ ๊ฐ๋„๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ „๋ฅœ๊ณผ ํ›„๋ฅœ์„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ๊บพ์œผ๋ฉด ํšŒ์ „ ๋ฐ˜๊ฒฝ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ๊บพ์œผ๋ฉด crab steering์ด ๋˜๋ฏ€๋กœ, ์ข์€ ๋ฐฐ๊ด€ ๋‚ด๋ถ€์ฒ˜๋Ÿผ ์„ ํšŒ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ํ™˜๊ฒฝ์— ๋งž๋Š” ์„ ํƒ์ž…๋‹ˆ๋‹ค.

2. Control์€ W5500 wired Ethernet, video๋Š” camera Wi-Fi

Firmware๋Š” Arduino Ethernet.h (W5x00) library๋กœ W5500์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  static IP 192.168.1.100์—์„œ port 80์˜ HTTP server๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

#define W5500_CS   7
#define W5500_RST  10
#define SPI_MOSI   6
#define SPI_MISO   5
#define SPI_SCK    4

SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI, W5500_CS);
Ethernet.init(W5500_CS);
Ethernet.begin(mac, ip, gateway, subnet);   // MAC DE:AD:BE:EF:FE:ED
EthernetServer server(80);

Video๋Š” SJ4000์ด ๋งŒ๋“œ๋Š” ๋ณ„๋„ Wi-Fi AP(192.168.1.254)์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ฆ‰ PC๋Š” Ethernet๊ณผ Wi-Fi ๋‘ interface๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

3. ๊ฐ„๊ฒฐํ•œ HTTP/JSON command protocol

MethodEndpointBody
GET/statusโ€”
POST/command{"key":"W","action":"down"}

action์€ down(key ๋ˆ„๋ฆ„ ์œ ์ง€), up(๋—Œ), press(์ˆœ๊ฐ„ ์ž…๋ ฅ) ์„ธ ๊ฐ€์ง€์ด๊ณ , key๋Š” W, S, STOP, A, D, F, Z, C, V, 8, 2, 4, 6, 5์ž…๋‹ˆ๋‹ค. ์‘๋‹ต์€ {"key_received":"W","action":"up"} ํ˜•ํƒœ์˜ JSON์ž…๋‹ˆ๋‹ค. Firmware์™€ server ์–‘์ชฝ์— GET query string fallback๋„ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด, JSON POST๊ฐ€ ์‹คํŒจํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Command๊ฐ€ ์ƒํƒœ(state)๊ฐ€ ์•„๋‹ˆ๋ผ key event๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค. Firmware๊ฐ€ key hold ์ƒํƒœ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ PC๊ฐ€ ๊ฐ๋„๋ฅผ ๊ณ„์‚ฐํ•ด ๋ณด๋‚ผ ํ•„์š”๊ฐ€ ์—†๊ณ , ๊ทธ๋งŒํผ packet ์ˆ˜๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ up event๊ฐ€ ์œ ์‹ค๋˜๋ฉด ์กฐํ–ฅ์ด ๊ณ„์† ์›€์ง์ด๋Š” ์œ„ํ—˜์ด ์žˆ๋Š”๋ฐ, ๊ณต๊ฐœ source์—๋Š” watchdog์ด๋‚˜ command timeout์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4. Flask๊ฐ€ camera stream์„ proxy

SJ4000์€ mode์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์˜์ƒ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

  • Photo mode โ€” MJPEG, http://192.168.1.254:8192/
  • Video mode โ€” RTSP, rtsp://192.168.1.254/sjcam.mov

๋ธŒ๋ผ์šฐ์ €๋Š” RTSP๋ฅผ ์ง์ ‘ ์žฌ์ƒํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ Flask๊ฐ€ FFmpeg subprocess๋ฅผ ๋„์›Œ MJPEG์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.254/sjcam.mov -c:v mjpeg -f mpjpeg pipe:1

Mode ์ „ํ™˜์€ SJCAM ์ž์ฒด HTTP command(cmd=3001&par=0|1)๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Flask๊ฐ€ stream์„ ์ค‘๊ณ„ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ๋ธŒ๋ผ์šฐ์ € CORS ์ œ์•ฝ์„ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

5. ๋ณ„๋„ sensor ์—†์ด camera ์˜์ƒ๋งŒ์œผ๋กœ ์šด์šฉ

Firmware์—๋Š” encoder, IMU, ๊ฑฐ๋ฆฌ ์„ผ์„œ ๋“ฑ ์–ด๋–ค sensor๋„ ์—†์Šต๋‹ˆ๋‹ค. Operator๊ฐ€ ๋ณด๋Š” ์ •๋ณด๋Š” camera ์˜์ƒ ํ•˜๋‚˜๋ฟ์ด๋ฉฐ, robot์€ ์ž์‹ ์˜ ์œ„์น˜๋‚˜ ์ž์„ธ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Pipe inspection์ด๋ผ๋Š” ๋ชฉ์ ์—์„œ ๋ณด๋ฉด "์‚ฌ๋žŒ์ด ์˜์ƒ์„ ๋ณด๊ณ  ํŒ๋‹จํ•œ๋‹ค"๋Š” ์ „์ œ๊ฐ€ ๋ช…ํ™•ํ•œ ์„ค๊ณ„์ด์ง€๋งŒ, ์ž๋™ ์ฃผํ–‰์ด๋‚˜ ์œ„์น˜ ๊ธฐ๋ก์œผ๋กœ ํ™•์žฅํ•˜๋ ค๋ฉด sensor์™€ telemetry ๊ณ„์ธต์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ System Architecture

๐Ÿ“Œ System Architecture

ํ™•์ธ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[ Browser (keyboard) ]
          โ”‚  HTTP  :5000
          โ–ผ
[ PC โ€” Flask app.py ]
          โ”‚                         โ””โ”€โ”€ FFmpeg (RTSP โ†’ MJPEG)
          โ”‚                                     โ–ฒ
          โ”‚ HTTP/JSON                           โ”‚ Wi-Fi
          โ”‚ POST /command                       โ”‚
          โ–ผ                                     โ”‚
   Ethernet (W5500)                    [ SJCAM SJ4000 AP ]
          โ”‚                                192.168.1.254
          โ–ผ
[ ESP32-C3 โ€” 192.168.1.100 : 80 ]
          โ”‚
          โ”œโ”€โ”€ Drive motors (fwd / rev)
          โ”œโ”€โ”€ Front steer servo
          โ”œโ”€โ”€ Back steer servo
          โ””โ”€โ”€ Camera pan / tilt servos

PC ์ชฝ network ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐˆ๋ž˜์ž…๋‹ˆ๋‹ค.

PC โ”€โ”€ Ethernet โ”€โ”€โ–บ Router / Switch โ”€โ”€โ–บ ESP32-C3   192.168.1.100
PC โ”€โ”€ Wi-Fi โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ SJ4000 AP  192.168.1.254

์—ฌ๊ธฐ์„œ ํ•œ ๊ฐ€์ง€ ์งš์–ด ๋‘˜ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋Œ€์ƒ์ด ๋ชจ๋‘ 192.168.1.0/24 ๋Œ€์—ญ์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” Ethernet interface ๋„ˆ๋จธ์—, ํ•˜๋‚˜๋Š” Wi-Fi interface ๋„ˆ๋จธ์— ์žˆ์œผ๋ฏ€๋กœ PC์˜ routing table์— ๋™์ผ subnet์ด ๋‘ ๊ฐœ ์ƒ๊ธฐ๊ณ , ์–ด๋А interface๋กœ packet์„ ๋ณด๋‚ผ์ง€ OS๊ฐ€ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์„ค์น˜์—์„œ๋Š” robot ์ชฝ์„ ๋‹ค๋ฅธ ๋Œ€์—ญ(์˜ˆ: 192.168.2.x)์œผ๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ interface metric์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ํŽธ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๊ณต๊ฐœ README์— ์–ธ๊ธ‰๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ์œ„ ๊ตฌ์„ฑ์€ repository์— ๊ธฐ์žฌ๋œ ๊ธฐ๋ณธ๊ฐ’ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ Role and Application of the WIZnet Chip

์‚ฌ์šฉ๋œ chip

Firmware header์— PipeInspect dual-steer robot firmware for ESP32-C3 + W5500 Ethernet.์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ, README hardware table์—๋„ ESP32-C3 + W5500์ด "Robot controller over Ethernet"์œผ๋กœ ๊ธฐ์žฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ๋˜๋Š” WIZnet chip์€ W5500 ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ Role and Application of the WIZnet Chip

Network์—์„œ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ• 

ESP32-C3
   โ”‚ SPI  (SCK 4 ยท MISO 5 ยท MOSI 6 ยท CS 7 ยท RST 10)
   โ–ผ
W5500
   โ”‚ 10/100 Ethernet  ยท  static 192.168.1.100  ยท  TCP :80
   โ–ผ
Router / Switch
   โ”‚
   โ–ผ
PC (Flask)

W5500์€ Arduino Ethernet.h library๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, socket ์ฒ˜๋ฆฌ๋Š” library๊ฐ€ W5500์˜ hardware socket์„ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด project๋Š” WIZnet socket API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ offload ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, W5500์„ ํ™œ์šฉํ•œ Ethernet ์—ฐ๊ฒฐ ์‚ฌ๋ก€๋กœ ํ•ด์„ํ•˜๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

Mobile inspection robot์—์„œ wired control link๊ฐ€ ๊ฐ–๋Š” ์‹ค์šฉ์  ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธˆ์† ๋ฐฐ๊ด€ ๋‚ด๋ถ€์ฒ˜๋Ÿผ Wi-Fi ์ „ํŒŒ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๊ฐ์‡ ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋„ ๋ช…๋ น ์ „๋‹ฌ์ด ์œ ์ง€๋œ๋‹ค.
  • ์กฐ์ข… ๋ช…๋ น์˜ latency์™€ jitter๊ฐ€ ๋ฌด์„ ๋ณด๋‹ค ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Robot์ด ์ด๋ฏธ tether(๊ฒฌ์ธยทํšŒ์ˆ˜์šฉ ์ผ€์ด๋ธ”)๋ฅผ ๋‹ฌ๊ณ  ๋‹ค๋‹ˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„, ๊ทธ ์ผ€์ด๋ธ”์— Ethernet์„ ํ•จ๊ป˜ ๋„ฃ๋Š” ๋ฐ ์ถ”๊ฐ€ ๋ถ€๋‹ด์ด ์ ๋‹ค.
  • ์˜์ƒ์€ ๋Œ€์—ญํญ์„ ๋งŽ์ด ์“ฐ์ง€๋งŒ ์œ ์‹ค๋˜์–ด๋„ ์žฌ์‹œ๋„๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ๋ช…๋ น์€ ๋Œ€์—ญํญ์€ ์ž‘์ง€๋งŒ ์œ ์‹ค๋˜๋ฉด ์œ„ํ—˜ํ•˜๋‹ค โ€” ๋‘ traffic์„ ๋‹ค๋ฅธ ๋งค์ฒด๋กœ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์€ ์ด ์„ฑ์งˆ์— ๋ถ€ํ•ฉํ•œ๋‹ค.

์œ„ ๋‚ด์šฉ์€ project์˜ wiring ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๊ธฐ์ˆ ์  ํ•ด์„์ด๋ฉฐ, ๊ณต๊ฐœ ์ž๋ฃŒ์— ์œ ์„ ๊ณผ ๋ฌด์„  control link๋ฅผ ๋น„๊ตํ•œ ์ธก์ • ๊ฒฐ๊ณผ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํ™•์ธ๋˜๋Š” ํ•œ๊ณ„

์ •ํ™•ํ•œ ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ๊ณต๊ฐœ source์—์„œ ํ™•์ธ๋˜๋Š” ๋ฏธ์™„์„ฑ ๋ถ€๋ถ„์„ ํ•จ๊ป˜ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ๋‚ด์šฉ
Servo ์ถœ๋ ฅ ๋ฏธ์™„์„ฑServo ๊ตฌ๋™์ด analogWrite placeholder์ด๋ฉฐ TODO: replace with your servo library (ESP32Servo, PCA9685, etc.) ์ฃผ์„์ด ๋‚จ์•„ ์žˆ์Œ
์†๋„ ์ œ์–ด ์—†์ŒDrive motor๊ฐ€ PWM ์—†์ด digital HIGH/LOW๋กœ๋งŒ ์ œ์–ด๋จ
Subnet ์ค‘๋ณตESP32-C3์™€ SJ4000์ด ๋™์ผ 192.168.1.0/24 ๋Œ€์—ญ
Safety ๊ณ„์ธต ์—†์ŒCommand timeout, watchdog, e-stop ๋ฏธ๊ตฌํ˜„
์šด์˜ ์„ค์ •Flask๊ฐ€ debug=True๋กœ ์‹คํ–‰๋˜๋ฉฐ production ์„ค์ •์ด ์•„๋‹˜

๐Ÿ“Œ Related Existing Contents & Expansion Value

1. W5500-Based ESP32-S3 micro-ROS Node Suite for a Distributed Rover Control System

  • Link: WIZnet Maker Site โ€“ W5500-Based ESP32-S3 micro-ROS Node Suite
  • Similarity Point: ESP32 ๊ณ„์—ด MCU์— W5500์„ ๋ถ™์—ฌ rover์˜ motor์™€ ์ƒํƒœ ์ •๋ณด๋ฅผ wired Ethernet์œผ๋กœ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค๋Š” ์ ์—์„œ ๋ชฉ์ ์ด ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌด์„  ๋Œ€์‹  ์œ ์„ ์„ ์„ ํƒํ•œ ์ด์œ ๋„ link ์‹ ๋ขฐ์„ฑ์ด๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Difference: micro-ROS Node Suite๋Š” ๋‹ค์„ฏ ๊ฐœ์˜ ESP32-S3 node๊ฐ€ ROS 2 topic์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” distributed architecture์ด๊ณ  BMS telemetry๊นŒ์ง€ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. PipeInspect๋Š” ๋‹จ์ผ MCU์— ๋‹จ์ˆœ HTTP/JSON key event๋ฅผ ์“ฐ๋Š” ์ตœ์†Œ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.
  • Connection Value: PipeInspect๋ฅผ telemetry์™€ ์ž๋™ ์ฃผํ–‰์œผ๋กœ ํ™•์žฅํ•  ๋•Œ ์ฐธ๊ณ ํ•  ๋‹ค์Œ ๋‹จ๊ณ„์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. HTTP key event โ†’ ROS 2 topic์œผ๋กœ ์˜ฎ๊ฒจ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

2. How to Bridge a ROS2 Jazzy Rover to Wired Ethernet with W5500 on ESP32?

  • Link: WIZnet Maker Site โ€“ ROS2 Jazzy Rover Control with W5500
  • Similarity Point: ESP32๊ฐ€ low-level motor I/O๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์ƒ์œ„ PC๊ฐ€ ํŒ๋‹จ์„ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ•  ๋ถ„๋ฆฌ ๊ตฌ์กฐ๊ฐ€ PipeInspect์˜ "firmware๋Š” key event ์ฒ˜๋ฆฌ, PC๋Š” UI"์™€ ๊ฐ™์€ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.
  • Difference: MQTT ๊ธฐ๋ฐ˜ message bus๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ROS2 stack๊ณผ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. PipeInspect๋Š” broker ์—†์ด PC๊ฐ€ robot์— ์ง์ ‘ HTTP ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • Connection Value: Robot์„ ์—ฌ๋Ÿฌ ๋Œ€๋กœ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์›๊ฒฉ ๊ฐ์‹œ๋ฅผ ๋ถ™์ผ ๋•Œ broker ๋„์ž…์ด ์™œ ํ•„์š”ํ•ด์ง€๋Š”์ง€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

3. PoliTOcean-EVA โ€” Distributed Underwater Robot Control System

  • Link: WIZnet Maker Site โ€“ PoliTOcean-EVA
  • Similarity Point: ์‚ฌ๋žŒ์ด ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ค์šด ๊ณต๊ฐ„(์ˆ˜์ค‘ / ๋ฐฐ๊ด€ ๋‚ด๋ถ€)์— tether๋กœ ์—ฐ๊ฒฐ๋œ inspection robot์„ ์œ ์„  Ethernet์œผ๋กœ ์กฐ์ข…ํ•œ๋‹ค๋Š” ์ ์—์„œ application ์„ฑ๊ฒฉ์ด ๊ฐ€์žฅ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.
  • Difference: EVA ROV๋Š” ์—ฌ๋Ÿฌ microcontroller๋ฅผ MQTT๋กœ ๋ฌถ์€ distributed control system์ด๋ฉฐ real-time ์š”๊ตฌ์‚ฌํ•ญ์ด ํ›จ์”ฌ ๋†’์Šต๋‹ˆ๋‹ค. PipeInspect๋Š” ์ง€์ƒ ๋ฐฐ๊ด€์šฉ ๋‹จ์ผ controller์ž…๋‹ˆ๋‹ค.
  • Connection Value: Tethered inspection robot์—์„œ ์œ ์„  Ethernet์ด ํ‘œ์ค€์ ์ธ ์„ ํƒ์ธ ์ด์œ ๋ฅผ ๋’ท๋ฐ›์นจํ•˜๋Š” ์ƒ์œ„ ์ฐธ๊ณ  ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

4. ESP32-CameraWebServer-ov5640 (ESP32-CAM + W5500)

  • Link: WIZnet Maker Site โ€“ ESP32-CameraWebServer-ov5640
  • Similarity Point: W5500 Ethernet์œผ๋กœ ์˜์ƒ์„ ์‹ค์‹œ๊ฐ„ ์ „์†กํ•˜๋Š” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.
  • Difference: PipeInspect๋Š” ์˜์ƒ์„ W5500์ด ์•„๋‹ˆ๋ผ camera์˜ Wi-Fi๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด project๋Š” ๋ฐ˜๋Œ€๋กœ ์˜์ƒ๊นŒ์ง€ ์œ ์„ ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • Connection Value: PipeInspect์˜ ๊ฐ€์žฅ ์œ ๋ ฅํ•œ ๊ฐœ์„  ๋ฐฉํ–ฅ์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. Camera๋ฅผ Wi-Fi action cam์—์„œ Ethernet camera module๋กœ ๋ฐ”๊พธ๋ฉด PC์˜ dual-network ๊ตฌ์„ฑ๊ณผ subnet ์ค‘๋ณต ๋ฌธ์ œ๊ฐ€ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๐Ÿ“Œ Market & Application Value

์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋ถ„์•ผ

์ ์šฉ ๋ถ„์•ผํ™œ์šฉ ๋ฐฉ์‹
๋ฐฐ๊ด€ยทํ•˜์ˆ˜๊ด€ ์ ๊ฒ€๊ด€ ๋‚ด๋ถ€ ๊ท ์—ด, ํ‡ด์ ๋ฌผ, ์ด์Œ๋ถ€ ์ƒํƒœ ์œก์•ˆ ์ ๊ฒ€
๋•ํŠธยทํ™˜๊ธฐ๊ตฌ ์ ๊ฒ€HVAC duct ๋‚ด๋ถ€ ์˜ค์—ผ๋„ ๋ฐ ์†์ƒ ํ™•์ธ
์„ค๋น„ ํ•˜๋ถ€ยทํ˜‘์†Œ ๊ณต๊ฐ„์‚ฌ๋žŒ์ด ์ง„์ž…ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ธฐ๊ณ„ ํ•˜๋ถ€ ๋ฐ crawl space ์ ๊ฒ€
๊ฑด์ถ•๋ฌผ ์œ ์ง€๋ณด์ˆ˜๋ฒฝ์ฒด ๋‚ด๋ถ€ ๊ณต๊ฐ„, ๋ฐฐ์„  ๊ฒฝ๋กœ ํ™•์ธ
๊ต์œกยท์—ฐ๊ตฌTethered mobile robot๊ณผ wired control link ์‹ค์Šต ๊ต์žฌ

Dual-steer ๊ตฌ์กฐ์™€ ์†Œํ˜• form factor ๋•๋ถ„์— ์„ ํšŒ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ด€ ๋‚ด๋ถ€์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ณต๊ฐœ ์ž๋ฃŒ์—๋Š” ๋ฐฉ์ˆ˜ ๋“ฑ๊ธ‰, ๋‚ด๊ตฌ์„ฑ ์‹œํ—˜, ์ตœ์†Œ ํ†ต๊ณผ ๊ด€๊ฒฝ ๊ฐ™์€ ์‚ฌ์–‘์ด ์—†์œผ๋ฏ€๋กœ ์‹ค์ œ ํ˜„์žฅ ์ ์šฉ ๊ฐ€๋Šฅ ๋ฒ”์œ„๋ฅผ ํŒ๋‹จํ•  ๊ทผ๊ฑฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

B2C์™€ B2B ์ ์šฉ์„ฑ

  • Makerยท๊ต์œก: Arduino ์ˆ˜์ค€ firmware์™€ Flask web UI๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด "์œ ์„  ์ œ์–ด + ๋ฌด์„  ์˜์ƒ"์ด๋ผ๋Š” ๊ตฌ์กฐ๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์ข‹์€ ์ตœ์†Œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
  • ์†Œ๊ทœ๋ชจ ์‹œ์„ค๊ด€๋ฆฌ: ์ƒ์šฉ ๋ฐฐ๊ด€ ์นด๋ฉ”๋ผ ๋Œ€๋น„ ํ›จ์”ฌ ๋‚ฎ์€ ๋น„์šฉ์œผ๋กœ ์ž์ฒด ์ œ์ž‘ํ•  ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ํ˜„์žฌ ์ƒํƒœ๋กœ๋Š” servo ๊ตฌํ˜„๊ณผ pin ๋ฐฐ์น˜๋ฅผ ์ง์ ‘ ์™„์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Product developer: ESP32-C3 + W5500 ์กฐํ•ฉ์—์„œ command latency๊ฐ€ ์ค‘์š”ํ•œ motion application์˜ reference๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Solution package๋กœ์˜ ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ

  • ESP32-C3 + W5500 SPI reference wiring (pin ์ถฉ๋Œ ์—†๋Š” ์ •์ •๋ณธ)
  • Command timeout / watchdog์„ ํฌํ•จํ•œ ์•ˆ์ „ ๊ณ„์ธต ์˜ˆ์ œ
  • Dual-steer ๊ธฐ๊ตฌ ์„ค๊ณ„ ๋ฐ servo ์„ ์ • ๊ฐ€์ด๋“œ
  • Ethernet camera๋กœ ์ „ํ™˜ํ•œ ๋‹จ์ผ network ๊ตฌ์„ฑ์•ˆ
  • PoE ๊ธ‰์ „์œผ๋กœ tether๋ฅผ ์ „์›+๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋Š” ๊ตฌ์„ฑ

์‹ค์ œ reference package๋กœ ๋ฐœ์ „์‹œํ‚ค๋ ค๋ฉด ๋ฐฉ์ˆ˜ enclosure, tether ๊ด€๋ฆฌ, ์กฐ๋ช…, ์ „์› ์„ค๊ณ„๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ External Indicators

์•„๋ž˜ ์ˆ˜์น˜๋Š” 2026-08-12 ํ™•์ธ ๊ธฐ์ค€ snapshot์ด๋ฉฐ ์ดํ›„ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Indicatorํ™•์ธ ๊ฒฐ๊ณผํ•ด์„
GitHub Stars0์™ธ๋ถ€ ๊ด€์‹ฌ์ด ์•„์ง ํ˜•์„ฑ๋˜์ง€ ์•Š์€ ๊ฐœ์ธ prototype์ž…๋‹ˆ๋‹ค.
GitHub Forks0์™ธ๋ถ€ ์žฌ์‚ฌ์šฉ ํ”์ ์ด ์—†์Šต๋‹ˆ๋‹ค.
GitHub Commits4์ดˆ๊ธฐ ๊ตฌํ˜„ ์งํ›„ ๋‹จ๊ณ„์ด๋ฉฐ ์ง€์†์  ์œ ์ง€๋ณด์ˆ˜ ์ด๋ ฅ์€ ์—†์Šต๋‹ˆ๋‹ค.
Releases / Packages0๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์‚ฐ์ถœ๋ฌผ์ด ๋ฐœํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
License์—†์ŒLICENSE file์ด ์—†์–ด ์žฌ์‚ฌ์šฉยท์žฌ๋ฐฐํฌ ์กฐ๊ฑด์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
Topics / Description์—†์ŒRepository ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
LanguagesC++ 24.3% ยท JavaScript 22.0% ยท Python 19.4% ยท HTML 17.3% ยท CSS 17.0%Firmware์™€ web stack์ด ๊ท ํ˜• ์žˆ๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์„œ ์ผ๊ด€์„ฑREADME์˜ project root๊ฐ€ getabec/๋กœ ํ‘œ๊ธฐ๋˜์–ด repository ์ด๋ฆ„๊ณผ ๋ถˆ์ผ์น˜Rename ์ž”์žฌ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

โš ๏ธ License ๊ด€๋ จ ์ฃผ์˜

LICENSE file์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ "์ž์œ  ์ด์šฉ ๊ฐ€๋Šฅ"์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ์ €์ž‘๊ถŒ์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ธ์šฉ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ์†Œ๊ฐœ๋‚˜ ์žฌ๋ฐฐํฌ ์ „์—๋Š” ์ž‘์„ฑ์ž ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ WIZnet Strategic Value

ํ™•์ธ๋œ ์‚ฌ์‹ค

PipeInspect๋Š” W5500์„ sensor node๋‚˜ controller ๊ณ ์ • ์„ค์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ด๋™ํ•˜๋Š” robot์˜ command link์— ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. WIZnet Maker Site์— ์ถ•์ ๋œ W5500 robotics ์‚ฌ๋ก€์™€ ํ•จ๊ป˜ ๋†“๊ณ  ๋ณด๋ฉด ์ผ์ •ํ•œ ํ๋ฆ„์ด ๋ณด์ž…๋‹ˆ๋‹ค.

W5500 in Robotics โ€” Maker Site ์‚ฌ๋ก€ ๊ณ„์—ด

์ •์  ์ œ์–ด (Fixed installation)
โ”œโ”€ STM32F103 Multi-Axis Motion Controller
โ””โ”€ ESP32UDP LinuxCNC Motion Controller
        โ””โ”€ ๊ณต์ž‘๊ธฐ๊ณ„ยท๋‹ค์ถ• ๋ชจ์…˜, ๊ฒฐ์ •์  latency๊ฐ€ ํ•ต์‹ฌ

์ด๋™ ๋กœ๋ด‡ (Mobile / tethered)
โ”œโ”€ ROS2 Jazzy Rover (ESP32 + W5500 + MQTT)
โ”œโ”€ ESP32-S3 micro-ROS Node Suite (5-node rover)
โ”œโ”€ PoliTOcean-EVA (์ˆ˜์ค‘ ROV, tethered)
โ””โ”€ PipeInspect (๋ฐฐ๊ด€ ์ ๊ฒ€, tethered)  โ† ๋ณธ ํ”„๋กœ์ ํŠธ
        โ””โ”€ ๋ฌด์„ ์ด ๋‹ฟ์ง€ ์•Š๊ฑฐ๋‚˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ณต๊ฐ„

ํ•ด์„

์ด ๊ณ„์—ด์˜ ๊ณตํ†ต ์š”๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

  1. ๋ช…๋ น ์ „๋‹ฌ์˜ ์‹ ๋ขฐ์„ฑ์ด ๋Œ€์—ญํญ๋ณด๋‹ค ์ค‘์š”ํ•˜๋‹ค.
  2. ์ด๋ฏธ ๋ฌผ๋ฆฌ์  ์ผ€์ด๋ธ”(tether)์ด ์กด์žฌํ•˜๋ฏ€๋กœ ์œ ์„ ํ™” ๋น„์šฉ์ด ๋‚ฎ๋‹ค.
  3. ๊ธˆ์† ๊ตฌ์กฐ๋ฌผยท์ˆ˜์ค‘ยท์ง€ํ•˜์ฒ˜๋Ÿผ RF ํ™˜๊ฒฝ์ด ๋‚˜์˜๋‹ค.
  4. MCU์™€ SPI๋กœ ์—ฐ๊ฒฐ๋˜๋Š” compact Ethernet interface๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  5. Motorยทservo ์ œ์–ด loop์™€ network ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ™์€ MCU์—์„œ ๊ณต์กดํ•ด์•ผ ํ•œ๋‹ค.

PipeInspect๊ฐ€ ์ด ๊ณ„์—ด์—์„œ ๊ฐ–๋Š” ์œ„์น˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค. ROS๋„ MQTT๋„ ์—†์ด HTTP/JSON๋งŒ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด, W5500 ๊ธฐ๋ฐ˜ robot control์„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ์–ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด ์‹ ๋ขฐ์„ฑยท์•ˆ์ „์„ฑ ๊ณ„์ธต์€ ์ „๋ถ€ ๋น„์–ด ์žˆ์œผ๋ฏ€๋กœ, ์•ž์˜ ์„ธ ์‚ฌ๋ก€๊ฐ€ ์™œ broker์™€ real-time stack์„ ๋„์ž…ํ–ˆ๋Š”์ง€๋ฅผ ๋Œ€๋น„์ ์œผ๋กœ ๋ณด์—ฌ ์ฃผ๋Š” ์ž๋ฃŒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Summary

PipeInspect(GetabegRobot)๋Š” ESP32-C3์™€ W5500์„ ์‚ฌ์šฉํ•ด dual-steer ๋ฐฐ๊ด€ ์ ๊ฒ€ robot์„ wired Ethernet์œผ๋กœ ์กฐ์ข…ํ•˜๊ณ , ์˜์ƒ์€ SJCAM SJ4000์˜ Wi-Fi๋กœ ๋ณ„๋„ ์ˆ˜์‹ ํ•˜๋Š” open source project์ž…๋‹ˆ๋‹ค. Control๊ณผ video๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๋งค์ฒด๋กœ ๋ถ„๋ฆฌํ•œ ๊ตฌ์„ฑ, hold ๋ฐฉ์‹ key event ๊ธฐ๋ฐ˜์˜ ๊ฐ„๊ฒฐํ•œ HTTP/JSON protocol, ์ „๋ฅœยทํ›„๋ฅœ ๋…๋ฆฝ ์กฐํ–ฅ์ด ์ด project์˜ ํŠน์ง•์ž…๋‹ˆ๋‹ค.

W5500์€ ESP32-C3์™€ SPI(SCK 4 ยท MISO 5 ยท MOSI 6 ยท CS 7 ยท RST 10)๋กœ ์—ฐ๊ฒฐ๋˜์–ด static IP 192.168.1.100์—์„œ HTTP server๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Arduino Ethernet.h library๋ฅผ ๊ฒฝ์œ ํ•˜๋ฏ€๋กœ direct socket API๋‚˜ TOE ์„ฑ๋Šฅ ํ™œ์šฉ์€ ๊ณต๊ฐœ source์—์„œ ํ™•์ธ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ด ์‚ฌ๋ก€์˜ ํ™•์‹คํ•œ ๊ฐ€์น˜๋Š” ์ด๋™ robot์˜ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” command link๋กœ W5500์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์ ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— ์ด repository๋Š” commit 4๊ฐœ, star 0, license ์—†์Œ์˜ ์ดˆ๊ธฐ prototype์ด๋ฉฐ servo ์ถœ๋ ฅ์ด ๋ฏธ์™„์„ฑ์ด๊ณ  camera servo pin์ด W5500 SPI pin๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. PC ์–‘์ชฝ network๊ฐ€ ๊ฐ™์€ subnet์„ ์“ฐ๋Š” ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์™„์„ฑํ’ˆ์ด ์•„๋‹ˆ๋ผ, ๊ตฌ์กฐ์  ์•„์ด๋””์–ด๋ฅผ ์ฐธ๊ณ ํ•˜๊ณ  ๊ตฌํ˜„์€ ์ง์ ‘ ์ •์ •ํ•ด์•ผ ํ•˜๋Š” ์ž๋ฃŒ๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Key Questions & Clear Answers

1. PipeInspect๋Š” ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€?

์‚ฌ๋žŒ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ๋ฐฐ๊ด€ ๋‚ด๋ถ€๋ฅผ ์œก์•ˆ ์ ๊ฒ€ํ•˜๊ธฐ ์œ„ํ•ด, ์ข์€ ๊ณต๊ฐ„์—์„œ๋„ ์„ ํšŒํ•  ์ˆ˜ ์žˆ๋Š” dual-steer robot์„ PC ๋ธŒ๋ผ์šฐ์ €์—์„œ ์กฐ์ข…ํ•˜๊ณ  ์‹ค์‹œ๊ฐ„ ์˜์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

2. W5500์€ ์ด project์—์„œ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”๊ฐ€?

ESP32-C3์™€ SPI๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์กฐ์ข… ๋ช…๋ น ์ „์šฉ wired Ethernet interface๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜์ƒ ์ „์†ก์ด๋‚˜ servo ๊ตฌ๋™์—๋Š” ๊ด€์—ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Direct WIZnet socket API ๋˜๋Š” TCP/IP offload ํ™œ์šฉ ์—ฌ๋ถ€๋Š” ๊ณต๊ฐœ source์—์„œ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. ์™œ ์˜์ƒ๊นŒ์ง€ Ethernet์œผ๋กœ ๋ณด๋‚ด์ง€ ์•Š์•˜๋Š”๊ฐ€?

๊ธฐ์„ฑํ’ˆ SJCAM SJ4000์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด camera๋Š” ์ž์ฒด Wi-Fi AP๋กœ๋งŒ ์˜์ƒ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. Ethernet camera module๋กœ ๊ต์ฒดํ•˜๋ฉด single-network ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ด๋Š” ์ด project์˜ ๊ฐ€์žฅ ์œ ๋ ฅํ•œ ๊ฐœ์„  ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

4. ์ด ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ flashํ•˜๋ฉด ๋™์ž‘ํ•˜๋Š”๊ฐ€?

๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Servo ์ถœ๋ ฅ์ด analogWrite placeholder ์ƒํƒœ์ด๊ณ , CAM_PAN_PIN/CAM_TILT_PIN์ด W5500์˜ SPI_SCK/SPI_MISO์™€ ๊ฐ™์€ GPIO๋กœ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Camera servo pin์„ ๋‹ค๋ฅธ GPIO๋กœ ์˜ฎ๊ธฐ๊ณ  ESP32Servo ๋“ฑ ์‹ค์ œ servo library๋ฅผ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5. ๊ฐœ๋ฐœ์ž๊ฐ€ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ ๋ฌด์—‡์ธ๊ฐ€?

down / up / press ์„ธ ๊ฐ€์ง€ action์œผ๋กœ ๊ตฌ์„ฑ๋œ key event protocol ์„ค๊ณ„, firmware๊ฐ€ hold ์ƒํƒœ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•ด packet ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ์‹, Flask๊ฐ€ RTSP๋ฅผ FFmpeg์œผ๋กœ MJPEG ๋ณ€ํ™˜ํ•ด CORS๋ฅผ ์šฐํšŒํ•˜๋Š” stream proxy ํŒจํ„ด์ด ์žฌ์‚ฌ์šฉ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

6. ์‹ค์ œ ์ œํ’ˆ์œผ๋กœ ํ™•์žฅํ•˜๋ ค๋ฉด ๋ฌด์—‡์ด ๋” ํ•„์š”ํ•œ๊ฐ€?

Command timeout๊ณผ watchdog์„ ํฌํ•จํ•œ ์•ˆ์ „ ๊ณ„์ธต, PWM ๊ธฐ๋ฐ˜ ์†๋„ ์ œ์–ด, ๋ฐฉ์ˆ˜ enclosure์™€ ์กฐ๋ช…, tether ๊ด€๋ฆฌ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  license ๋ช…์‹œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


English Version

๐Ÿ“Œ Overview

PipeInspect is an open source project that drives a dual-steer pipe inspection robot from a web dashboard on a PC. The robot controller is an ESP32-C3, and a W5500 connected over SPI carries the command link to the PC as wired Ethernet.

What stands out here is that the control path and the video path are physically separated. Steering and drive commands travel over W5500 Ethernet on a cable; video arrives over the SJCAM SJ4000 action camera's own Wi-Fi access point. The PC sits on both networks at once and serves a Flask-based web UI, so the operator drives, steers and aims the camera entirely from browser keyboard input.

The repository has three parts:

  • firmware/pipeinspect_esp32c3/pipeinspect_esp32c3.ino โ€” ESP32-C3 + W5500 Arduino sketch
  • app.py + requirements.txt โ€” Flask server and camera stream proxy
  • templates/ + static/ โ€” HTML/CSS/JS front end

Language share is C++ 24.3%, JavaScript 22.0%, Python 19.4%, HTML 17.3%, CSS 17.0% โ€” firmware and web stack are split almost evenly.

That said, this repository is an early prototype: 4 commits, 0 stars, no license, no releases, with unfinished code and a pin conflict described below. It should be read not as a finished product but as an early implementation showing the W5500 used as a mobile robot's command link.

๐Ÿ“Œ Features

PipeInspect: Wired Ethernet Control & Wi-Fi Video Streaming, ๐Ÿ“Œ Features

1. Dual-steer โ€” front and back wheels steered independently

A typical rover either steers only the front wheels or turns by differential drive. PipeInspect drives a front steer servo and a back steer servo from separate keys.

FunctionLeftRightRe-centre
DriveW forward (hold)S backward (hold)STOP
Front steeringADF
Back steeringZCV
Camera pan / tilt4 / 6 (pan), 8 / 2 (tilt)โ€”5

Numpad keys are also accepted. Steer keys work by hold: the angle moves 2ยฐ every 40 ms across a 45โ€“135ยฐ range, and releasing the key holds the current angle. Turning front and back wheels in opposite directions tightens the turning circle; turning them the same way produces crab steering. Both matter inside a pipe, where there is no room to swing the chassis around.

2. Control over W5500 wired Ethernet, video over the camera's Wi-Fi

The firmware initialises the W5500 through the Arduino Ethernet.h (W5x00) library and opens an HTTP server on port 80 at static IP 192.168.1.100.

#define W5500_CS   7
#define W5500_RST  10
#define SPI_MOSI   6
#define SPI_MISO   5
#define SPI_SCK    4

SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI, W5500_CS);
Ethernet.init(W5500_CS);
Ethernet.begin(mac, ip, gateway, subnet);   // MAC DE:AD:BE:EF:FE:ED
EthernetServer server(80);

Video comes from the separate Wi-Fi AP the SJ4000 creates (192.168.1.254). The PC therefore uses its Ethernet and Wi-Fi interfaces simultaneously.

3. A compact HTTP/JSON command protocol

MethodEndpointBody
GET/statusโ€”
POST/command{"key":"W","action":"down"}

action is one of down (key held), up (released) or press (momentary). key is one of W, S, STOP, A, D, F, Z, C, V, 8, 2, 4, 6, 5. The response is JSON of the form {"key_received":"W","action":"up"}. Both the firmware and the server also implement a GET query-string fallback, so the link still works where JSON POST does not.

The notable design choice is that commands are key events, not state. The firmware owns the hold state, so the PC never has to compute and transmit an angle, and packet volume stays low. The trade-off is that a lost up event leaves the servo stepping โ€” and the public source implements no watchdog or command timeout.

4. Flask proxies the camera stream

The SJ4000 exposes video two different ways depending on mode:

  • Photo mode โ€” MJPEG, http://192.168.1.254:8192/
  • Video mode โ€” RTSP, rtsp://192.168.1.254/sjcam.mov

Browsers cannot play RTSP directly, so Flask spawns an FFmpeg subprocess to transcode it:

ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.254/sjcam.mov -c:v mjpeg -f mpjpeg pipe:1

Mode switching uses the SJCAM's own HTTP command (cmd=3001&par=0|1). The other reason Flask relays the stream is to work around browser CORS restrictions.

5. No sensors โ€” the camera feed is the only feedback

The firmware carries no encoder, IMU or range sensor. The operator's only information is the video, and the robot has no knowledge of its own position or attitude. For pipe inspection that is a coherent assumption โ€” a human watches and decides โ€” but extending this to autonomous driving or position logging would require adding a sensor and telemetry layer from scratch.

๐Ÿ“Œ System Architecture

๐Ÿ“Œ System Architecture

The verifiable end-to-end flow is as follows.

[ Browser (keyboard) ]
          โ”‚  HTTP  :5000
          โ–ผ
[ PC โ€” Flask app.py ]
          โ”‚                         โ””โ”€โ”€ FFmpeg (RTSP โ†’ MJPEG)
          โ”‚                                     โ–ฒ
          โ”‚ HTTP/JSON                           โ”‚ Wi-Fi
          โ”‚ POST /command                       โ”‚
          โ–ผ                                     โ”‚
   Ethernet (W5500)                    [ SJCAM SJ4000 AP ]
          โ”‚                                192.168.1.254
          โ–ผ
[ ESP32-C3 โ€” 192.168.1.100 : 80 ]
          โ”‚
          โ”œโ”€โ”€ Drive motors (fwd / rev)
          โ”œโ”€โ”€ Front steer servo
          โ”œโ”€โ”€ Back steer servo
          โ””โ”€โ”€ Camera pan / tilt servos

The PC-side networking splits in two directions:

PC โ”€โ”€ Ethernet โ”€โ”€โ–บ Router / Switch โ”€โ”€โ–บ ESP32-C3   192.168.1.100
PC โ”€โ”€ Wi-Fi โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ SJ4000 AP  192.168.1.254

One point deserves attention here. Both endpoints live in 192.168.1.0/24. One is reached through the Ethernet interface and the other through Wi-Fi, so the PC's routing table ends up with two entries for the same subnet and the OS decides which interface a packet takes. In a real deployment it is safer to move the robot to a different range (for example 192.168.2.x) or to set interface metrics explicitly. This is not mentioned in the public README; the configuration above reflects the defaults committed to the repository.

๐Ÿ“Œ Role and Application of the WIZnet Chip

Chip used

The firmware header states PipeInspect dual-steer robot firmware for ESP32-C3 + W5500 Ethernet., and the README hardware table lists ESP32-C3 + W5500 as "Robot controller over Ethernet". The only WIZnet chip present is the W5500.

๐Ÿ“Œ Role and Application of the WIZnet Chip

Role in the network

ESP32-C3
   โ”‚ SPI  (SCK 4 ยท MISO 5 ยท MOSI 6 ยท CS 7 ยท RST 10)
   โ–ผ
W5500
   โ”‚ 10/100 Ethernet  ยท  static 192.168.1.100  ยท  TCP :80
   โ–ผ
Router / Switch
   โ”‚
   โ–ผ
PC (Flask)

Because the W5500 is reached through the Arduino Ethernet.h library, socket handling is whatever that library issues to the chip's hardware sockets. The project does not call the WIZnet socket API directly or measure offload performance, so this is best described as a case of using the W5500 for Ethernet connectivity rather than a TOE demonstration.

For a mobile inspection robot, a wired control link carries a few practical advantages:

  • Command delivery survives environments such as metal pipe interiors where Wi-Fi attenuates sharply.
  • Latency and jitter on the control path are more predictable than over a wireless link.
  • The robot usually trails a tether for retrieval anyway, so adding Ethernet to that bundle costs little.
  • Video is bandwidth-hungry but tolerant of loss; commands are tiny but intolerant of it. Splitting the two across different media matches those properties.

This is a technical reading based on the project's wiring; no measurement comparing wired and wireless control links appears in the public material.

Confirmed limitations

For an accurate assessment, the unfinished parts visible in the public source are recorded here as well.

ItemDetail
Servo output unfinishedServo drive is an analogWrite placeholder with the comment TODO: replace with your servo library (ESP32Servo, PCA9685, etc.)
No speed controlDrive motors are switched with digital HIGH/LOW only, no PWM
Subnet overlapESP32-C3 and SJ4000 both sit in 192.168.1.0/24
No safety layerNo command timeout, watchdog, or e-stop
Runtime settingsFlask runs with debug=True, not a production configuration

๐Ÿ“Œ Related Existing Contents & Expansion Value

1. W5500-Based ESP32-S3 micro-ROS Node Suite for a Distributed Rover Control System

  • Link: WIZnet Maker Site โ€“ W5500-Based ESP32-S3 micro-ROS Node Suite
  • Similarity Point: Same purpose โ€” an ESP32-family MCU with a W5500 exchanging motor commands and status over wired Ethernet โ€” and the same reasoning behind choosing wired over wireless: link reliability.
  • Difference: The micro-ROS Node Suite is a distributed architecture of five ESP32-S3 nodes communicating over ROS 2 topics, including BMS telemetry. PipeInspect is a minimal single-MCU setup with plain HTTP/JSON key events.
  • Connection Value: It is the natural next step if PipeInspect were extended with telemetry and autonomy, showing the path from HTTP key events to ROS 2 topics.

2. How to Bridge a ROS2 Jazzy Rover to Wired Ethernet with W5500 on ESP32?

  • Link: WIZnet Maker Site โ€“ ROS2 Jazzy Rover Control with W5500
  • Similarity Point: The same division of labour โ€” the ESP32 handles low-level motor I/O while the host PC handles decisions โ€” matching PipeInspect's "firmware handles key events, PC handles the UI".
  • Difference: It uses an MQTT message bus and integrates with the ROS2 stack. PipeInspect has no broker; the PC talks to the robot with direct HTTP requests.
  • Connection Value: A useful comparison for understanding when a broker becomes necessary โ€” scaling to multiple robots or adding remote monitoring.

3. PoliTOcean-EVA โ€” Distributed Underwater Robot Control System

  • Link: WIZnet Maker Site โ€“ PoliTOcean-EVA
  • Similarity Point: The closest match in application character: a tethered inspection robot operating in a space humans cannot enter (underwater / inside a pipe), controlled over wired Ethernet.
  • Difference: EVA ROV is a distributed control system linking several microcontrollers over MQTT with far stricter real-time requirements. PipeInspect is a single-controller machine for above-ground pipework.
  • Connection Value: Supports the case that wired Ethernet is the standard choice for tethered inspection robots.

4. ESP32-CameraWebServer-ov5640 (ESP32-CAM + W5500)

  • Link: WIZnet Maker Site โ€“ ESP32-CameraWebServer-ov5640
  • Similarity Point: Real-time video transported over W5500 Ethernet.
  • Difference: PipeInspect receives video over the camera's Wi-Fi rather than the W5500. This project does the opposite and sends video over the wire too.
  • Connection Value: It points at PipeInspect's most promising improvement: swapping the Wi-Fi action cam for an Ethernet camera module removes the dual-network setup and the subnet overlap in one move.

๐Ÿ“Œ Market & Application Value

Applicable fields

FieldUse
Pipe and sewer inspectionVisual checks for cracks, sediment and joint condition inside pipework
Duct and ventilation inspectionContamination and damage checks inside HVAC ducting
Under-equipment and confined spacesMachine undersides and crawl spaces humans cannot easily enter
Building maintenanceWall cavities and cable routing verification
Education and researchA teaching example of a tethered mobile robot with a wired control link

The dual-steer layout and small form factor suit pipe interiors where there is no room to turn. However, the public material contains no ingress-protection rating, durability testing or minimum traversable pipe diameter, so there is no basis for judging real-world deployment limits.

B2C and B2B applicability

  • Makers and education: Arduino-level firmware plus a Flask web UI makes this a good minimal example of the "wired control, wireless video" pattern.
  • Small facility management: There is room to build something similar at a fraction of the cost of a commercial pipe camera โ€” though in its current state the servo implementation and pin assignment must be completed by hand.
  • Product developers: Usable as a reference for ESP32-C3 + W5500 in motion applications where command latency matters.

Expansion into a solution package

  • ESP32-C3 + W5500 SPI reference wiring (a corrected version without the pin conflict)
  • A safety layer example including command timeout and watchdog
  • Dual-steer mechanical design and servo selection guide
  • A single-network variant using an Ethernet camera
  • A PoE configuration collapsing the tether into one power-plus-data cable

Turning this into a real reference package would additionally require a waterproof enclosure, tether management, lighting, and power design.

๐Ÿ“Œ External Indicators

The figures below are a snapshot verified on 2026-08-12 and may change.

IndicatorResultInterpretation
GitHub Stars0An individual prototype with no external attention yet.
GitHub Forks0No evidence of external reuse.
GitHub Commits4Immediately post-initial-implementation; no sustained maintenance history.
Releases / Packages0No distributable artefact has been published.
LicenseNoneNo LICENSE file, so reuse and redistribution terms are undefined.
Topics / DescriptionNoneRepository metadata is empty.
LanguagesC++ 24.3% ยท JavaScript 22.0% ยท Python 19.4% ยท HTML 17.3% ยท CSS 17.0%Firmware and web stack are evenly balanced.
Documentation consistencyThe README's project root is written as getabec/, which does not match the repository nameAppears to be a leftover from a rename.

โš ๏ธ Note on licensing

The absence of a LICENSE file does not mean the code is free to use โ€” it means default copyright applies in full. Confirm with the author before any coverage or redistribution that goes beyond fair quotation of code.

๐Ÿ“Œ WIZnet Strategic Value

Confirmed facts

PipeInspect uses the W5500 not in a fixed sensor node or a stationary controller, but as the command link of a moving robot. Placed alongside the W5500 robotics cases already on the WIZnet Maker Site, a pattern emerges.

W5500 in Robotics โ€” Maker Site case lineage

Fixed installation
โ”œโ”€ STM32F103 Multi-Axis Motion Controller
โ””โ”€ ESP32UDP LinuxCNC Motion Controller
        โ””โ”€ machine tools, multi-axis motion; deterministic latency is the point

Mobile / tethered
โ”œโ”€ ROS2 Jazzy Rover (ESP32 + W5500 + MQTT)
โ”œโ”€ ESP32-S3 micro-ROS Node Suite (5-node rover)
โ”œโ”€ PoliTOcean-EVA (underwater ROV, tethered)
โ””โ”€ PipeInspect (pipe inspection, tethered)  โ† this project
        โ””โ”€ spaces where wireless does not reach or cannot be trusted

Interpretation

The shared requirements across this lineage are:

  1. Reliability of command delivery matters more than bandwidth.
  2. A physical tether already exists, so the marginal cost of going wired is low.
  3. The RF environment is hostile โ€” metal structures, water, underground.
  4. A compact Ethernet interface that connects to an MCU over SPI is required.
  5. Motor/servo control loops and network handling must coexist on the same MCU.

PipeInspect's place in that lineage is the simplest entry point. With no ROS and no MQTT โ€” just HTTP/JSON โ€” it is the minimum viable form of W5500-based robot control, readable by a developer encountering the pattern for the first time. Conversely, because its reliability and safety layers are entirely absent, it also illustrates by contrast why the other three cases reached for brokers and real-time stacks.

๐Ÿ“Œ Summary

PipeInspect (GetabegRobot) is an open source project that uses an ESP32-C3 and a W5500 to drive a dual-steer pipe inspection robot over wired Ethernet, while receiving video separately over the SJCAM SJ4000's Wi-Fi. Its distinguishing traits are the split of control and video across different media, a compact hold-style key-event HTTP/JSON protocol, and independent front and rear steering.

The W5500 connects to the ESP32-C3 over SPI (SCK 4 ยท MISO 5 ยท MOSI 6 ยท CS 7 ยท RST 10) and serves HTTP at static IP 192.168.1.100. Because access goes through the Arduino Ethernet.h library, no direct socket API use or TOE performance figure appears in the public source; the firm value of this case lies in using the W5500 as a reliable command link for a mobile robot.

At the same time this repository is an early prototype โ€” 4 commits, 0 stars, no license โ€” with unfinished servo output and, critically, camera servo pins that collide with the W5500 SPI pins. Both PC-side networks also share one subnet. It should therefore be treated as a source of structural ideas whose implementation must be corrected by the reader, not as a reproducible finished build.

๐Ÿ“Œ Key Questions & Clear Answers

1. What problem does PipeInspect solve?

It lets an operator visually inspect the inside of pipework that humans cannot enter, using a dual-steer robot that can manoeuvre in confined space, driven from a PC browser with a live video feed.

2. What role does the W5500 play?

It connects to the ESP32-C3 over SPI and provides a dedicated wired Ethernet interface for control commands. It is not involved in video transport or servo drive. Whether the direct WIZnet socket API or TCP/IP offload is used is not verifiable from the public source.

3. Why isn't the video sent over Ethernet too?

Because the project uses an off-the-shelf SJCAM SJ4000, which only exposes video through its own Wi-Fi AP. Replacing it with an Ethernet camera module would allow a single-network design, and that is the project's most promising improvement.

4. Will the code work if flashed as-is?

No. Servo output is still an analogWrite placeholder, and CAM_PAN_PIN / CAM_TILT_PIN are defined on the same GPIOs as the W5500's SPI_SCK / SPI_MISO. You must move the camera servo pins to free GPIOs and apply a real servo library such as ESP32Servo.

5. What can a developer reuse?

The key-event protocol design built from just three actions (down / up / press), the approach of letting the firmware own the hold state to reduce packet volume, and the Flask stream-proxy pattern that transcodes RTSP to MJPEG with FFmpeg to sidestep CORS.

6. What would it take to turn this into a product?

A safety layer with command timeout and watchdog, PWM-based speed control, a waterproof enclosure and lighting, a tether management scheme, and an explicit license.

Comments

Similar projects you might like

Comments