---
title: "ESP32S3-MicroROS"
url: "https://maker.wiznet.io/lawrence/projects/esp32s3-microros/"
markdown_url: "https://maker.wiznet.io/lawrence/projects/esp32s3-microros/md"
type: "UCC: User Created Content"
author: "Disha Anchan"
author_url: "https://github.com/103031430/ESP32S3-MicroROS"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "Disha Anchan"
original_url: "https://github.com/103031430/ESP32S3-MicroROS"
published: "2025-12-02"
language: "en"
tags: ["micro-ROS", "ESP32-S3", "W5500", "C/C++", "Robotics"]
hardware: ["WIZnet W5500", "Espressif ESP32"]
likes: 0
views: 961
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# ESP32S3-MicroROS

> Implements a Micro-ROS publisher on ESP32-S3-ETH via W5500. It ensures stable wired Ethernet connectivity for ROS 2, solving the S3's lack of internal MAC

Original author: Disha Anchan (source: https://github.com/103031430/ESP32S3-MicroROS)

## Components

- **WIZnet W5500** x 1 ([docs](https://docs.wiznet.io/Product/Chip/Ethernet/W5500))
- **Espressif ESP32** x 1 ([docs](https://www.espressif.com/en/products/socs/esp32))

WIZnet parts: W5500 ([Datasheet](https://docs.wiznet.io/Product/Chip/Ethernet/W5500/datasheet?utm_source=maker&utm_medium=project&utm_campaign=w5500), [product hub](https://maker.wiznet.io/products/w5500/))

## Documents and links

- [Source code](https://github.com/103031430/MicroROS-Pub/tree/main) (code)

## Article

### 1. 프로젝트 개요 및 분석

이 프로젝트는 **ESP32-S3** 칩셋과 **W5500 이더넷 모듈**이 결합된 하드웨어를 사용하여 **ROS 2(Robot Operating System 2)** 네트워크에 참여하는 **Micro-ROS Publisher(퍼블리셔)** 노드를 구현한 것입니다.

**프로젝트 레벨:기초(Basic) ~ 중급(Intermediate) 레벨**의 커넥티비티(Connectivity) 구현 프로젝트입니다.

복잡한 로봇 제어 알고리즘보다는, **"ESP32-S3에서 안정적인 유선 통신(Ethernet)을 통해 Micro-ROS를 구동하는 것"** 자체가 핵심 목표인 프로젝트입니다.

일반적으로 Micro-ROS는 Wi-Fi를 많이 사용하지만, 이 프로젝트는 산업용이나 신뢰성이 중요한 환경을 위한 **유선 이더넷 기반의 통신 드라이버** 성격이 강합니다.

### 2. Micro-ROS 사용 방식 분석

이 프로젝트에서 Micro-ROS는 다음과 같은 구조로 구현되었을 것입니다.

**Transport Layer (전송 계층):**

가장 중요한 부분입니다. 일반적인 ESP32 Micro-ROS 예제는 Wi-Fi Transport를 사용하지만, 이 프로젝트는 **Custom Transport** 혹은 **Arduino Ethernet 라이브러리 기반의 Transport**를 사용합니다.

W5500은 SPI 통신을 하므로, `micro_ros_platformio` 라이브러리 설정에서 시리얼이나 Wi-Fi 대신 **W5500 Ethernet**을 통신 매체로 지정하여 ROS 2 에이전트(Agent)와 데이터를 주고받습니다.

**Node & Publisher:초기화(Init):** `rclc_support_init` 함수를 통해 Micro-ROS 에이전트와 연결을 시도합니다. (이때 IP 주소 할당 및 Agent IP 연결이 수행됨)

**토픽 발행(Publish):** `rclc_publisher_init_default`를 사용하여 특정 토픽(예: 센서 데이터, 카운터 값 등)을 생성하고, 타이머 인터럽트(Timer Callback)를 통해 주기적으로 메시지를 ROS 2 네트워크로 쏘아 올립니다.

### 3. 왜 W5500이 있는 ESP32-S3-ETH 보드를 사용했는가? (핵심 분석)

이 부분이 기술적으로 가장 중요한 포인트입니다. 두 가지 이유가 결합되어 있습니다.

**① ESP32-S3 칩의 하드웨어적 제약 (MAC 부재)**

기존 **ESP32(Original)** 칩은 내부에 **Ethernet MAC(Media Access Control)** 컨트롤러가 내장되어 있어, 외부에는 저렴한 PHY 칩(예: LAN8720)만 달면 이더넷 구현이 가능했습니다.

하지만 **ESP32-S3**는 성능은 좋아졌지만 내부 **Ethernet MAC이 제거**되었습니다.

따라서 ESP32-S3에서 이더넷을 쓰려면, MAC과 PHY 기능이 모두 들어있는 **외부 이더넷 컨트롤러**가 필수적입니다. **W5500**은 MAC+PHY가 통합되어 있고 **SPI 인터페이스**로 통신하므로, MAC이 없는 ESP32-S3에 이더넷을 달기 위한 가장 표준적인 솔루션입니다.

**② 로봇 시스템에서의 통신 안정성 (Stability)Latency & Jitter:** 로봇 제어에서 Wi-Fi는 무선 간섭으로 인해 통신 지연(Latency)이 튀는 현상(Jitter)이 발생할 수 있습니다. 이는 실시간 제어(Real-time Control)에 치명적입니다.

**W5500:** 유선 이더넷은 패킷 손실이 거의 없고 통신 속도가 일정하므로, 로봇의 센서 데이터(IMU, Lidar 등)를 **신뢰성 있게** 전송하기 위해 이 보드를 선택한 것입니다.

![](https://maker.wiznet.io/upload/ckeditor5/624672051%5F1766141502%2Epng)

### 4. ROS 2 타겟 시스템 분석

이 프로젝트는 다음과 같은 ROS 2 시스템을 대상으로 합니다.

**ROS 2 배포판(Distro):**

ESP32-S3가 비교적 최신 칩셋이므로, **ROS 2 Humble Hawksbill** (LTS 버전) 혹은 **Foxy Fitzroy** 시스템을 타겟으로 했을 가능성이 매우 높습니다.

현재 Micro-ROS 생태계에서 가장 안정적으로 지원되는 버전이 Humble입니다.

**시스템 아키텍처:Micro-ROS Agent:** PC(Ubuntu 리눅스) 측에 `micro-ros-agent`가 Docker 컨테이너나 네이티브 패키지로 실행되고 있어야 합니다.

**통신 프로토콜:** Micro-XRCE-DDS 프로토콜을 사용하며, W5500을 통해 **UDP** 패킷으로 PC의 에이전트와 통신합니다.

![](https://maker.wiznet.io/upload/ckeditor5/624672051%5F1766141606%2Epng)

![](https://maker.wiznet.io/upload/ckeditor5/624672051%5F1766141531%2Epng)

![](https://maker.wiznet.io/upload/ckeditor5/624672051%5F1766141575%2Epng)

**의존성 자동 해결 (Dependency Management)**:

사용자가 일일이 라이브러리 버전을 맞출 필요가 없습니다. 설정 파일에 명시된 대로 **Micro-ROS 라이브러리와 WIZnet 드라이버의 정확한 버전**이 자동으로 다운로드되고 링킹됩니다.

**복잡한 빌드 과정의 추상화**:

Micro-ROS는 정적 라이브러리(`.a`) 링크 등 복잡한 컴파일 옵션이 필요합니다. PlatformIO는 이를 스크립트로 자동화하여, 위즈네트 칩을 사용하는 개발자가 **"복잡한 설정 없이 원클릭으로"** 이더넷 통신을 시작할 수 있게 해줍니다.

`platformio.ini`의 환경 설정만 바꾸면, 동일한 코드를 STM32, RP2040, ESP32 등 다양한 MCU로 쉽게 이식할 수 있습니다.

![](https://maker.wiznet.io/upload/ckeditor5/1052286577%5F1766393525%2Epng)

![](https://maker.wiznet.io/upload/ckeditor5/1052286577%5F1766393538%2Epng)

**요약하자면:** 이 프로젝트는 "내부 MAC이 없는 고성능 ESP32-S3 칩셋에 W5500을 붙여, 로봇 시스템에 필수적인 '끊김 없는 유선 통신'을 확보하기 위한 Micro-ROS 통신 모듈 구현체"입니다.

---

Source: https://maker.wiznet.io/lawrence/projects/esp32s3-microros/
