나는 로봇 청소기를 샀다, 클라우드 스파이가 아니다

발행: (2026년 1월 13일 오전 04:21 GMT+9)
10 분 소요
원문: Dev.to

Source: Dev.to

위의 링크에 있는 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 마크다운 형식은 그대로 유지됩니다.)

배경: 중고 로봇 구매

나는 자동 청소가 급히 필요해서 이 로봇 청소기를 사지 않았다.

  • 보증
  • “만지면 고장 날 수도 있다”는 정신적 장벽
  • 실험하기 전에 가격만큼은 “제대로 작동해야 한다”는 기대

새로운 장치는 제조업체로부터 빌리는 느낌이다.

왜 이 모델인가

이 로봇은 Xiaomi Robot Mop Essential입니다.

기대와 현실

  • 로봇은 일을 잘 수행한다.
  • 범퍼로 장애물에 부딪힌다.
  • 휠 인코더로부터 위치를 계산한다.
  • 기본적인 자세 및 움직임 센서를 사용한다.

LiDAR는 없다. 마법도 없다. 단지 접촉, 수학, 그리고 재시도일 뿐이다. 그리고 놀라울 정도로 잘 작동한다.

기계적 문제 및 수리

휠 문제

로봇을 사용한 결과 휠에 마모가 발생했습니다. 저의 해결 방법은 간단하지만 효과적이었습니다:

  1. 금속 부싱에 윤활유를 바른다.
  2. 손상된 플라스틱 좌석에 시아노아크릴레이트 접착제(슈퍼글루) 작은 튜브를 채운다.
  3. 완전 경화될 때까지 약 2 시간 기다린다.
  4. 부싱을 제거하고 다시 설치한다.

결과: 견고하게 맞고 흔들림이 없으며 휠이 복원되었습니다. 이것은 장치가 수리 가능하다는 첫 번째 신호였습니다.

젖은 표면 접지력 (미해결)

아직 남아 있는 기계적 문제: 젖은 표면에서의 접지력.

  • 가능한 원인: 하향력 부족.
  • 모터에 과부하를 주지 않으면서 신뢰할 수 있는 접지력을 얻기 위해 실험 중이다.

습식 청소 시스템

물 노즐이 막혔습니다. 그곳에 있던 동안 물걸레 천에 물을 공급하는 작은 펌프도 수리했습니다.

버튼에서 제어로: 실제 문제가 시작된 곳

기계적 문제를 해결한 후, 로봇은… 거의 작동했다.

  1. 로봇에 다가간다.
  2. 물리적 버튼을 누른다.
  3. Wi‑Fi에 절박하게 연결을 시도하다가 결국 포기하는 모습을 지켜본다.

공장 초기화도 도움이 되지 않았다. 로봇은 Wi‑Fi를 원했지만 절대 완전히 연결되지 않았다.

Xiaomi 로봇 Mop Essential 내부

로봇은 명확한 내부 계층 구조를 가지고 있습니다: 두 개의 두뇌.

모터 제어 두뇌 (MCU)

  • 바퀴 인코더
  • 충돌 센서
  • 자이로스코프 및 자세
  • 네비게이션 로직
  • 지도 생성

사용 가능한 기술 데이터와 유사한 Xiaomi 로봇에 대한 분석을 기반으로, 이 MCU는 일반적으로 다음과 같은 특징을 가집니다:

  • 제어 로직을 위한 32‑bit RISC 코어
  • 실시간 센서 처리를 위한 전용 DSP 코어
  • 네비게이션 및 SLAM 유사 계산에 최적화된 하드웨어 블록
  • 펌웨어와 지도를 위한 외부 플래시 메모리

MCU는 Wi‑Fi에 신경 쓰지 않으며, 클라우드가 무엇인지 모릅니다.

연결 두뇌 (ESP32)

  • Wi‑Fi 연결
  • Xiaomi 클라우드와의 통신
  • OTA 업데이트
  • 명령 및 권한 중계

모터를 구동하지 않습니다.

Source:

Listening Instead of Guessing: UART Sniffing

UART5 RX / TX → MCU
UART7 TX / RX → ESP32

왜 그냥 ESP32만 사용하지 않았을까? 나는 동시에 세 개의 UART 포트가 필요했기 때문이다:

  • MCU ↔ ESP32 통신
  • ESP32 ↔ MCU 통신
  • MCU 진단 포트 (UART5를 해제한 뒤에 연결)

Orange Pi가 조용히 모든 트래픽을 스니핑했다: 주입도, 수정도 없이 단순히 관찰만 했다. 나는 진단 UART와 공식 ESP32 UART를 동시에 하나의 터미널 창에서 읽었다.

관찰 내용

  • 잘못된 명령이 감지됨.
  • 진단 UART는 모터 전류, 엔코더 값, 자이로 측정값, 내부 플래그 등을 보여준다.

청소를 시작할 때의 진단 출력 예시:

Oc[3]=410  Ic[3]=-43  k p=101  
Oc[3]=363  Ic[3]=-58  
p offsg 213  
gyrod=10029  
sg 181  
crc=15fb  
STL start clean  
default map enable:1

공식 UART를 통해 MCU에 전송된 명령은 상태 코드(ok, error…)를 숫자로 반환한다.

MCU -> ESP32 : platform_name
ESP32 -> MCU : ok
MCU -> ESP32 : firmware_id
ESP32 -> MCU : ok
MCU -> ESP32 : mac_device ?
ESP32 -> MCU : 
MCU -> ESP32 : “Can I request OTA updates?”
ESP32 -> MCU : ok

MCU가 단순히 ESP32에게 허가를 요청하고 있다는 것이 명확해지자, 해결책은 명확했다: 디버깅용 시리얼 터미널, 모든 UART 트래픽을 기록하는 로거, 그리고 듀얼‑UART 모니터링을 갖춘 최소한의 ESP32 펌웨어 아키텍처.

Current Status

The ESP32 firmware is still under development. Most of the core system is functional — about 80 % complete.

  • Dual‑UART monitoring works.
  • Dispatcher, scheduler, and multicore systems are running.
  • Basic MIOT‑like protocol handling (JSON API) is implemented.
  • OTA module is integrated, which will simplify future modifications (e.g., connecting a display).

When finished, the robot will have full local control, reliable telemetry, and optional display feedback — all without ever needing the cloud.

물리적 모드: 버튼을 “헤드”로 교체하기

소프트웨어와 UART 제어가 구현된 후, 다음 단계는 물리적 접근성이었습니다.

  • 버튼 / UART를 ESP32 및 진단 포트에 병렬 연결.
  • 버튼과 LED를 임시로 설치.

이 물리적 수정은 여러 목표를 달성합니다:

  • 앱 없이도 로봇과의 상호작용을 직관적으로 만들 수 있습니다.
  • 시각적 상태 표시기를 간단하고 눈에 띄게 유지합니다.
  • 원래 버튼을 선택적으로 사용하면서도 MCU의 전체 제어를 유지할 수 있습니다.

이를 “명령 타워”라고 생각하면 됩니다 — 로봇에 개성을 부여하고 명확한 인터페이스를 제공하는 작은 조종석입니다.

이 로봇을 설계한다면 바꾸고 싶은 점

샤오미 로봇 Mop Essential을 처음부터 설계한다면, 저는 다음과 같이 할 것입니다:

  1. 클라우드 텔레메트리를 선택적으로 만들고, 명확히 권한 기반으로 설정합니다.
  2. 고급 사용자를 위해 공식 UART 또는 API를 공개합니다.
  3. 맞춤형 인터페이스를 위해 LED와 버튼을 쉽게 교체하거나 확장할 수 있게 합니다.
  4. 디스플레이나 추가 센서를 부착할 수 있는 모듈식 설계를 포함합니다.

이러한 변경을 통해 엔지니어와 취미 개발자는:

  • 로봇이 무엇을 하고 있는지 이해할 수 있습니다.
  • 행동을 안전하게 맞춤 설정할 수 있습니다.
  • 단순 청소 로봇이 의도치 않은 클라우드 스파이로 변하는 것을 방지할 수 있습니다. 😁
Back to Blog

관련 글

더 보기 »

안녕, 뉴비 여기요.

안녕! 나는 다시 S.T.E.M. 분야로 돌아가고 있어. 에너지 시스템, 과학, 기술, 공학, 그리고 수학을 배우는 것을 즐겨. 내가 진행하고 있는 프로젝트 중 하나는...