ser2neo: a serial port to NeoPixel ring bridge.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Michael Hope 50091b2433 Added the disclaimer. 3 years ago
client Added copyright headers everywhere. 3 years ago
CONTRIBUTING.md Added copyright headers everywhere. 3 years ago
LICENSE ser2neo: added a README, license, and CLA. 3 years ago
Makefile Added copyright headers everywhere. 3 years ago
README.md Added the disclaimer. 3 years ago
attiny85.mk Added copyright headers everywhere. 3 years ago
avr.mk Added copyright headers everywhere. 3 years ago
neopixel.cc Added a basic doxygen configuration. 3 years ago
neopixel.h Added a basic doxygen configuration. 3 years ago
ser2neo.cc Added a basic doxygen configuration. 3 years ago
ser2neo.dox Added a basic doxygen configuration. 3 years ago
serial.cc Added a basic doxygen configuration. 3 years ago
serial.h Added a basic doxygen configuration. 3 years ago

README.md

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