ser2neo: a serial port to NeoPixel ring bridge.
Find a file
2015-12-31 01:36:05 -08:00
client Added copyright headers everywhere. 2015-12-31 01:20:50 -08:00
attiny85.mk Added copyright headers everywhere. 2015-12-31 01:20:50 -08:00
avr.mk Added copyright headers everywhere. 2015-12-31 01:20:50 -08:00
CONTRIBUTING.md Added copyright headers everywhere. 2015-12-31 01:20:50 -08:00
LICENSE ser2neo: added a README, license, and CLA. 2015-10-27 13:36:28 -07:00
Makefile Added copyright headers everywhere. 2015-12-31 01:20:50 -08:00
neopixel.cc Added a basic doxygen configuration. 2015-12-31 01:34:34 -08:00
neopixel.h Added a basic doxygen configuration. 2015-12-31 01:34:34 -08:00
README.md Added the disclaimer. 2015-12-31 01:36:05 -08:00
ser2neo.cc Added a basic doxygen configuration. 2015-12-31 01:34:34 -08:00
ser2neo.dox Added a basic doxygen configuration. 2015-12-31 01:34:34 -08:00
serial.cc Added a basic doxygen configuration. 2015-12-31 01:34:34 -08:00
serial.h Added a basic doxygen configuration. 2015-12-31 01:34:34 -08:00

ser2neo

Overview

ser2neo makes it easier to drive a NeoPixel ring by implementing the NeoPixel protocol in an ATTINY85 and exposing it through a serial interface.

Note: This is not an official Google product.

Hardware

This software was developed for a OLIMEXINO-85 ATTINY85 USB board with a Adafruit NeoPixel 16 ring. It should work with any other Digispark clone. The implementation is very speed and timing sensitive. If it doesn't work check that PCIntDelay is correct for your CPU, clock speed, and bootloader.

Pins:

  • PB0 is TXD
  • PB1 is DOUT and connects to the NeoPixel DIN
  • PB2 is RXD

Connect the pins to a 3.3V serial interface such as the FTDI serial cable.

See client/ for a simple client library and demo applications.

Implementation

NeoPixels use a single wire, 800 kHz, non-return-to-zero protocol. This implementation uses Timer0 in PWM mode where each PWM cycle is one bit. The PWM duty is updated each cycle.

The serial interface is a half duplex, command/response based protocol that's designed to be mildly computer friendly. Data is transferred at 57600,N,8,1. Character stuffing is used to escape the special values, which are '\r' for end of frame and '+' for escape.

The commands are:

  • ! - sync. Responds with OK sync.
  • ? - query. Responds with OK followed by the system ID, version, type, LED count, and colour order.
  • l - set LEDs. Followed by the LED data with three bytes per RGB LED. Responds with OK.

-- Michael Hope michaelh@juju.net.nz mlhx@google.com