Rubyduino 소개: Matz의 Spinel을 기반으로 한 Ruby‑to‑Arduino UNO 컴파일러
Source: Dev.to

개요
Rubyduino (GitHub)는 Ruby 스케치를 Arduino 보드용으로 컴파일하고 생성된 펌웨어를 업로드합니다. 내부적으로는 Spinel(Matz의 Ruby AOT 컴파일러)을 고정된 리비전으로 vendoring하여 사용합니다.
작동 원리
Rubyduino는 Spinel이 생성한 C 코드 위에 작은 Arduino 런타임을 추가합니다. digital_write, delay_ms, analog_read, serial_print, pulse_in 같은 함수들은 Arduino UNO 하드웨어 레지스터와 직접 상호 작용하는 작은 AVR C 함수에 매핑됩니다.
그 다음 일반 AVR 툴체인이 이어서 동작합니다:
- Ruby 스케치 → Spinel이 C 코드로 변환
- Rubyduino가 Arduino UNO 런타임을 추가
avr-gcc가 C 코드를 펌웨어로 컴파일avrdude가 펌웨어를 보드에 업로드
Arduino는 Ruby를 해석하지 않으며, Ruby에서 시작된 컴파일된 AVR 머신 코드를 실행합니다. Firmata나 RAD가 전혀 관여하지 않는 완전히 새로운 접근 방식입니다.
튜토리얼
gem install rubyduino
touch blink.rb
# blink.rb
pin_mode(ArduinoUNO::LED_BUILTIN, ArduinoUNO::OUTPUT)
loop do
digital_write(ArduinoUNO::LED_BUILTIN, ArduinoUNO::HIGH)
delay_ms(100)
digital_write(ArduinoUNO::LED_BUILTIN, ArduinoUNO::LOW)
delay_ms(100)
end
rubyduino blink.rb
결과:
