본문으로 이동

하드웨어

Rust 펌웨어를 사용하는 오픈 소스 ESP8266 로봇 팔

오픈 소스 펌웨어는 서보 모터 다섯 개를 갖춘 ESP8266 로봇 팔에서 동작하며 시뮬레이터의 관절 모형을 제공합니다. 시뮬레이터는 실물 장비와의 직렬, Bluetooth, 네트워크 연결이 필요 없습니다.

설계

정책은 Rust가, 하드웨어 기능은 C++가 담당

의존성은 한 방향으로만 흐릅니다. 외부 하드웨어 함수를 선언하는 crate는 하나뿐이며 경계에서는 Arduino 문자열, C++ 객체, 라우트, JSON, 애플리케이션 상태가 아닌 바이트만 전달합니다.

Rust 담당

  • 시작 정책 및 협력형 실행기
  • Hotaru 라우팅 및 프로토콜
  • HTTP 파싱 및 응답
  • 서보 검증 및 상태

C++ 담당

Arduino 또는 ESP8266 심벌이 필요한 작업만:

  • 클록, 인터럽트 마스킹, 워치독, 재시작, 힙, 난수, 직렬 통신
  • Wi-Fi 액세스 포인트 및 스테이션 모드, 저수준 TCP·UDP 핸들
  • 캡티브 DNS 및 SPIFFS 핸들
  • GPIO, PWM, 서보 펄스 쓰기, 저수준 OTA 쓰기

Native WiFiClient, File, and Servo 객체는 C++ 쪽에서 정수 핸들 뒤에 유지됩니다. 임베디드 Arduino 펌웨어에는 일반적인 Rust fn main(), 가 없으므로 게이트웨이는 반환하지 않는 C 진입점 하나만 내보내며 이를 setup() calls once.

작업 공간

크레이트 구성

hcr-gateway
애플리케이션 본체입니다. 시작 정책, 라우팅, Arduino가 한 번 호출하는 단일 C 진입점을 담당합니다.
hcr-http
no_std 환경의 HTTP 파싱 및 응답과 Hotaru 프로토콜.
hcr-io-esp8266
플랫폼 TCP를 통한 Hotaru 전송.
hcr-rt-esp8266
런타임, 시간 및 임계 구역.
hcr-platform
워크스페이스 전체에서 공유하는 플랫폼 트레이트와 값.
ffi/hcr-ffi
외부 하드웨어 함수를 선언하는 유일한 crate이며 그 위에 안전한 어댑터를 제공합니다.

프로토콜

현재 기기 API와 hcr.v1 서비스 계약

Rust 서비스는 추가 확장형 hcr.v1 봉투와 JSON·CBOR 바인딩을 사용합니다. 현재 ESP8266 Rust 게이트웨이는 제한된 HTTP/JSON 서보 API를 제공하며 MQTT는 아직 구현되지 않았습니다.

클라이언트별 전송 바인딩 및 인코딩
클라이언트전송 방식인코딩
브라우저 앱(현재)HTTPS request–responseJSON
Rust 서비스 계약hcr.v1 HTTP 바인딩JSON 및 CBOR
ESP8266 Rust 게이트웨이(현재)기기 액세스 포인트의 HTTPJSON
MQTT 기기 경로(계획)MQTT over TCP/TLSCBOR

봉투 내부의 상관관계

연결 정보는 MQTT 5 속성에 넣지 않습니다. 기기가 3.1.1을 협상할 수 있고 HTTP 바인딩에는 이런 속성이 없기 때문입니다. 일부에서만 작동하는 두 방식보다 어디서나 작동하는 한 방식이 더 안정적입니다.

타임스탬프는 순서를 정하지 않습니다

기기 시계는 신뢰할 수 없고 ESP8266은 라우터가 켜져 있을 때만 NTP에 연결됩니다. 순서는 송신 측 시계가 아닌 토픽별 FIFO로 정합니다.

마이너 버전은 기능 추가만 허용

선택 필드, 종류, 토픽을 새로 추가할 수 있습니다. 수신 측은 모르는 내용을 만나면 기록하고 버리며 전체 처리를 실패시키지 않습니다.