littlewire 0.9.7 → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/littlewire.rb +79 -0
- data/examples/i2c/microchip-eeprom.rb +33 -0
- data/examples/i2c/nunchuck.rb +80 -0
- data/examples/i2c/search.rb +5 -0
- data/examples/ws2811/all.rb +44 -0
- data/examples/ws2811/colors.rb +28 -0
- data/examples/ws2811/manual.rb +43 -0
- data/examples/ws2811/scan.rb +26 -0
- data/examples/ws2811/spin.rb +17 -0
- data/examples/ws2811/strobe.rb +93 -0
- data/firmware/1.0.hex +254 -0
- data/firmware/1.1.hex +356 -0
- data/firmware/1.2.hex +364 -0
- data/firmware/cdc232.hex +173 -0
- data/firmware/latest-beta.hex +377 -0
- data/firmware/latest.hex +364 -0
- data/lib/littlewire.rb +16 -14
- data/lib/{analog.rb → littlewire/analog.rb} +0 -0
- data/lib/{digital.rb → littlewire/digital.rb} +1 -1
- data/lib/littlewire/gadgets/micronucleus.rb +171 -0
- data/lib/littlewire/gadgets/nunchuck.rb +102 -0
- data/lib/{hardware-pwm.rb → littlewire/hardware-pwm.rb} +0 -0
- data/lib/littlewire/i2c.rb +92 -0
- data/lib/{one-wire.rb → littlewire/one-wire.rb} +0 -0
- data/lib/{servo.rb → littlewire/servo.rb} +0 -0
- data/lib/{software-pwm.rb → littlewire/software-pwm.rb} +0 -0
- data/lib/{spi.rb → littlewire/spi.rb} +0 -0
- data/lib/littlewire/version.rb +8 -0
- data/lib/{ws2811.rb → littlewire/ws2811.rb} +7 -5
- metadata +40 -16
- data/examples/led pixel.rb +0 -55
- data/lib/i2c.rb +0 -43
@@ -4,11 +4,13 @@ require 'colorist'
|
|
4
4
|
# To use, simply set colours in the 'colors' array property as css color strings
|
5
5
|
# or Colorist::Color objects, then call #output(pin) to send it on it's way
|
6
6
|
#
|
7
|
-
# Note that this requires firmware v1.2
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
7
|
+
# Note that this requires firmware v1.2 and there is a maximum of 64 lights in the
|
8
|
+
# firmware at the time of writing. You can connect 64 leds to each of the digital
|
9
|
+
# pins on the LittleWire or Digispark device, and this enables you a total of
|
10
|
+
# 64 * 4 = 256 lights! Neato! Remember a USB port cannot supply enough current to
|
11
|
+
# power 256 lights at full brightness. Power usage is roughly (20ma * color_channel)
|
12
|
+
# per light. So 64 lights all lit full brightness white consumes 20*3*64 = 3.84 amps!
|
13
|
+
# Wow that's a lot of light for one little wire! And you can have four of those!
|
12
14
|
class LittleWire::WS2811
|
13
15
|
attr_accessor :colors
|
14
16
|
attr_accessor :pin
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: littlewire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bluebie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: libusb
|
@@ -42,30 +42,54 @@ description: A little library for a little wire. Providing a pure ruby interface
|
|
42
42
|
the nonpure libusb gem) to littlewire.cc's wonderful gadget. littlewire.rb provides
|
43
43
|
general purpose digital IO, pulse width modulation analog outputs, analog inputs,
|
44
44
|
SPI, I2C, One Wire, and rough servo control via a friendly interface which responds
|
45
|
-
both to
|
45
|
+
both to familiar Wiring/Arduino style methods and a more concise ruby alternative.
|
46
|
+
LittleWire can be installed on to Digisparkdevices, offering a very extensive firmata-style
|
47
|
+
option for digispark users.
|
46
48
|
email: a@creativepony.com
|
47
|
-
executables:
|
49
|
+
executables:
|
50
|
+
- littlewire.rb
|
48
51
|
extensions: []
|
49
52
|
extra_rdoc_files: []
|
50
53
|
files:
|
51
|
-
- lib/analog.rb
|
52
|
-
- lib/digital.rb
|
53
|
-
- lib/
|
54
|
-
- lib/
|
54
|
+
- lib/littlewire/analog.rb
|
55
|
+
- lib/littlewire/digital.rb
|
56
|
+
- lib/littlewire/gadgets/micronucleus.rb
|
57
|
+
- lib/littlewire/gadgets/nunchuck.rb
|
58
|
+
- lib/littlewire/hardware-pwm.rb
|
59
|
+
- lib/littlewire/i2c.rb
|
60
|
+
- lib/littlewire/one-wire.rb
|
61
|
+
- lib/littlewire/servo.rb
|
62
|
+
- lib/littlewire/software-pwm.rb
|
63
|
+
- lib/littlewire/spi.rb
|
64
|
+
- lib/littlewire/version.rb
|
65
|
+
- lib/littlewire/ws2811.rb
|
55
66
|
- lib/littlewire.rb
|
56
|
-
- lib/one-wire.rb
|
57
|
-
- lib/servo.rb
|
58
|
-
- lib/software-pwm.rb
|
59
|
-
- lib/spi.rb
|
60
|
-
- lib/ws2811.rb
|
61
67
|
- readme.md
|
62
68
|
- license.txt
|
63
69
|
- examples/blinky.rb
|
64
70
|
- examples/digiread.rb
|
65
71
|
- examples/fadey.rb
|
66
|
-
- examples/
|
72
|
+
- examples/i2c/microchip-eeprom.rb
|
73
|
+
- examples/i2c/nunchuck.rb
|
74
|
+
- examples/i2c/search.rb
|
75
|
+
- examples/ws2811/all.rb
|
76
|
+
- examples/ws2811/colors.rb
|
77
|
+
- examples/ws2811/manual.rb
|
78
|
+
- examples/ws2811/scan.rb
|
79
|
+
- examples/ws2811/spin.rb
|
80
|
+
- examples/ws2811/strobe.rb
|
81
|
+
- bin/littlewire.rb
|
82
|
+
- firmware/1.0.hex
|
83
|
+
- firmware/1.1.hex
|
84
|
+
- firmware/1.2.hex
|
85
|
+
- firmware/cdc232.hex
|
86
|
+
- firmware/latest-beta.hex
|
87
|
+
- firmware/latest.hex
|
67
88
|
homepage: http://creativepony.com/littlewire/
|
68
|
-
licenses:
|
89
|
+
licenses:
|
90
|
+
- CC0
|
91
|
+
- Unlicense
|
92
|
+
- Public Domain
|
69
93
|
metadata: {}
|
70
94
|
post_install_message:
|
71
95
|
rdoc_options:
|
@@ -77,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
77
101
|
requirements:
|
78
102
|
- - '>='
|
79
103
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
104
|
+
version: 1.9.1
|
81
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
106
|
requirements:
|
83
107
|
- - '>='
|
data/examples/led pixel.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# Connects to an LPD6803 LED Pixel of the type sold by ladyada, bliptronics, and alibaba
|
2
|
-
# and sends rgb info to the pixel. While these lights have worse colour reproduction than
|
3
|
-
# the PWM in Little Wire, they're chainable so you can run hundreds off one Little Wire!
|
4
|
-
#
|
5
|
-
# This sort: http://bliptronics.com/item.aspx?ItemID=113
|
6
|
-
#
|
7
|
-
# Note if you're running more than five or so from a littlewire you should power them
|
8
|
-
# with an external power supply instead of Little Wire's VCC pin
|
9
|
-
require 'littlewire'
|
10
|
-
|
11
|
-
wire = LittleWire.connect
|
12
|
-
spi = wire.spi
|
13
|
-
|
14
|
-
wire.pin_mode :pin1 => :output, :pin3 => :output
|
15
|
-
|
16
|
-
def lpd6803_data red, green, blue
|
17
|
-
# TODO: could add some dithering here
|
18
|
-
bits = [green, blue, red].map { |v| (v * 31).round.to_s(2).rjust(5, '0') }
|
19
|
-
"1#{bits.join ''}".to_i(2)
|
20
|
-
end
|
21
|
-
|
22
|
-
$lights = [[1.0, 0.0, 1.0]] # just one light, with red, green, blue set to bright violet
|
23
|
-
def update_lights
|
24
|
-
new_sequence = $lights.map { |pix| lpd6803_data(*pix) }
|
25
|
-
new_sequence.unshift 0, 0 # add start frame
|
26
|
-
$data_sequence = new_sequence
|
27
|
-
end
|
28
|
-
|
29
|
-
update_lights
|
30
|
-
|
31
|
-
spi.delay = 10
|
32
|
-
|
33
|
-
$x = 0.0
|
34
|
-
|
35
|
-
require 'benchmark'
|
36
|
-
Benchmark.benchmark do
|
37
|
-
for i in 1..1000000
|
38
|
-
wire.digital_write pin1: true
|
39
|
-
end
|
40
|
-
end
|
41
|
-
# loop do
|
42
|
-
# $data_sequence.each_slice(2) do |cells|
|
43
|
-
# spi.send cells.pack('S>*')
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# $lights = [[0.0, $x % 1.0, 0.0]]
|
47
|
-
# $x += 1.0/32.0
|
48
|
-
# update_lights
|
49
|
-
#
|
50
|
-
# # and now we use software pwm to run the light's clock for a little while
|
51
|
-
# wire.software_pwm_write(pin2: 127)
|
52
|
-
# sleep (1.0/32.0)
|
53
|
-
# wire.software_pwm_enabled = false
|
54
|
-
# end
|
55
|
-
|
data/lib/i2c.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
class LittleWire::I2C
|
2
|
-
def initialize wire
|
3
|
-
@wire = wire
|
4
|
-
@wire.control_transfer(function: :i2c_init)
|
5
|
-
end
|
6
|
-
|
7
|
-
# start an i2c message
|
8
|
-
#
|
9
|
-
# Arguments:
|
10
|
-
# address: (Integer) 7 bit numeric address
|
11
|
-
# direction: (Symbol) :in or :out
|
12
|
-
def start address_7bit, direction
|
13
|
-
direction = 1 if direction == :out || direction == :output || direction == :write
|
14
|
-
direction = 0 if direction != 1
|
15
|
-
config = (address_7bit.to_i << 1) | direction
|
16
|
-
@wire.control_transfer(function: :i2c_begin, wValue: config)
|
17
|
-
@wire.control_transfer(function: :read_buffer, dataIn: 8).bytes.first != 0
|
18
|
-
end
|
19
|
-
|
20
|
-
# read bytes from i2c device, optionally ending with a stop when finished
|
21
|
-
def read length, endWithStop = false
|
22
|
-
@wire.control_transfer(function: :i2c_read, wValue: (length.to_i & 0xFF) << 8 | (endWithStop ? 1 : 0))
|
23
|
-
@wire.control_transfer(function: :read_buffer, dataIn: 8)[0...length.to_i]
|
24
|
-
end
|
25
|
-
|
26
|
-
# write data to i2c device, optionally sending a stop when finished
|
27
|
-
def write send_buffer, end_with_stop = false
|
28
|
-
send_buffer = send_buffer.pack('c*') if send_buffer.is_a? Array
|
29
|
-
raise "Send buffer is too long" if send_buffer.length > 7
|
30
|
-
|
31
|
-
# TODO: Send multiple requests to handle send buffers longer than 7 bytes
|
32
|
-
@wire.control_transfer(
|
33
|
-
wRequest: 0xE0 | send_buffer.length | (end_with_stop << 3),
|
34
|
-
wValue: (send_buffer.bytes[1] << 8) + send_buffer.bytes[0],
|
35
|
-
wIndex: (send_buffer.bytes[3] << 8) + send_buffer.bytes[2]
|
36
|
-
)
|
37
|
-
end
|
38
|
-
|
39
|
-
# set the update delay of LittleWire's i2c module
|
40
|
-
def delay= update_delay
|
41
|
-
@wire.control_transfer(function: :i2c_update_delay, wValue: update_delay.to_i)
|
42
|
-
end
|
43
|
-
end
|