From 5045ae539ba17c38d1ca1c8c88a325fe93f7e28b Mon Sep 17 00:00:00 2001 From: Marcus Lorentzon Date: Sat, 16 Feb 2019 23:03:47 +0100 Subject: [PATCH 1/7] Add WS2812B binding --- samples/neo-pixels-x8/Program.cs | 41 +++++++++++++ samples/neo-pixels-x8/README.md | 31 ++++++++++ samples/neo-pixels-x8/neo-pixels-x8.csproj | 31 ++++++++++ samples/neo-pixels-x8/rpi-neo-pixels.fzz | Bin 0 -> 24088 bytes samples/neo-pixels-x8/rpi-neo-pixels_bb.png | Bin 0 -> 107752 bytes .../Iot.Device.Bindings.csproj | 6 ++ src/Iot.Device.Bindings/Utils/BitmapImage.cs | 34 +++++++++++ src/Iot.Device.Bindings/Utils/Color.cs | 57 ++++++++++++++++++ src/devices/Ws2812B/BitmapImageNeo3.cs | 57 ++++++++++++++++++ src/devices/Ws2812B/Ws2812B.cs | 25 ++++++++ 10 files changed, 282 insertions(+) create mode 100644 samples/neo-pixels-x8/Program.cs create mode 100644 samples/neo-pixels-x8/README.md create mode 100644 samples/neo-pixels-x8/neo-pixels-x8.csproj create mode 100644 samples/neo-pixels-x8/rpi-neo-pixels.fzz create mode 100644 samples/neo-pixels-x8/rpi-neo-pixels_bb.png create mode 100644 src/Iot.Device.Bindings/Utils/BitmapImage.cs create mode 100644 src/Iot.Device.Bindings/Utils/Color.cs create mode 100644 src/devices/Ws2812B/BitmapImageNeo3.cs create mode 100644 src/devices/Ws2812B/Ws2812B.cs diff --git a/samples/neo-pixels-x8/Program.cs b/samples/neo-pixels-x8/Program.cs new file mode 100644 index 0000000000..abd4bf5e95 --- /dev/null +++ b/samples/neo-pixels-x8/Program.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Iot.Device.Bindings.Utils; +using Iot.Device.Bindings.WS2812B; + +namespace led_blink +{ + class Program + { + static void Main() + { + var spi = new System.Device.Spi.Drivers.UnixSpiDevice(new System.Device.Spi.SpiConnectionSettings(0, 0)); + var neo = new WS2812B(spi, 8); + + // Display basic colors for 5 sec + BitmapImageNeo3 img = neo.Image; + img.SetPixel(0, 0, Color.White >> 6); // Shift down color brightness (same as divide each component by 64) + img.SetPixel(1, 0, Color.Red >> 6); + img.SetPixel(2, 0, Color.Green >> 6); + img.SetPixel(3, 0, Color.Blue >> 6); + img.SetPixel(4, 0, Color.Yellow >> 6); + img.SetPixel(5, 0, Color.Cyan >> 6); + img.SetPixel(6, 0, Color.Magenta >> 6); + img.SetPixel(7, 0, (Color)0xffff8000 >> 6); // Create orange from ARGB constant + neo.Update(); + System.Threading.Thread.Sleep(5000); + + // Fade in first pixel + byte b = 0; + img.Clear(); + while (true) + { + img.SetPixel(0, 0, new Color(b++)); + neo.Update(); + System.Threading.Thread.Sleep(10); + } + } + } +} diff --git a/samples/neo-pixels-x8/README.md b/samples/neo-pixels-x8/README.md new file mode 100644 index 0000000000..a738a18896 --- /dev/null +++ b/samples/neo-pixels-x8/README.md @@ -0,0 +1,31 @@ +# Drive Neo pixel strip (x8) from Raspberry Pi + +This [sample](Program.cs) demonstrates how to use the [Bitmap library](../../src/Iot.Device.Bindings/Utils/BitmapImage.cs) and the [Neo pixel binding](../../src/devices/Ws2812B/Ws2812B.cs) to drive an 8 Neo Pixel stick from a Raspberry Pi. + +## Run the sample + +This sample can be built and run with .NET Core 3.0. Use the following commands from the root of the repo: + +```console +cd samples +cd neo-pixels-x8 +dotnet build -c release -o out +sudo dotnet out/neo-pixels-x8.dll +``` + +## Breadboard layout + +The following [fritzing diagram](rpi-neo-pixels.fzz) demonstrates how you should wire your device in order to run the [program](Program.cs). It uses the GND, 5V and MOSI pins on the Raspberry Pi. + +![Raspberry Pi Breadboard diagram](rpi-neo-pixels_bb.png) + +## Hardware elements + +The following elements are used in this sample: + +* [Raspberry Pi 3](https://www.adafruit.com/product/3055) +* [Neo pixels x8 stick](https://www.adafruit.com/product/1426) + +## Resources + +* [Using .NET Core for IoT Scenarios](../README.md) diff --git a/samples/neo-pixels-x8/neo-pixels-x8.csproj b/samples/neo-pixels-x8/neo-pixels-x8.csproj new file mode 100644 index 0000000000..aaad9ff977 --- /dev/null +++ b/samples/neo-pixels-x8/neo-pixels-x8.csproj @@ -0,0 +1,31 @@ + + + + Exe + netcoreapp3.0 + neo_pixels_x8 + + + + + + + + + + + + + + + + + 192.168.1.109 + + /home/pi/neopix + pi + malooreader + OnBuildSuccess + + + diff --git a/samples/neo-pixels-x8/rpi-neo-pixels.fzz b/samples/neo-pixels-x8/rpi-neo-pixels.fzz new file mode 100644 index 0000000000000000000000000000000000000000..c258a21e933f5efa6a23b3f03341401138f07a0f GIT binary patch literal 24088 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 + + + + + + RuntimeIdentifier=linux diff --git a/src/Iot.Device.Bindings/Utils/BitmapImage.cs b/src/Iot.Device.Bindings/Utils/BitmapImage.cs new file mode 100644 index 0000000000..36b1fdc0a4 --- /dev/null +++ b/src/Iot.Device.Bindings/Utils/BitmapImage.cs @@ -0,0 +1,34 @@ +using System; + +namespace Iot.Device.Bindings.Utils +{ + public abstract class BitmapImage + { + protected BitmapImage(byte[] data, int width, int height, int stride) + { + _data = data; + Width = width; + Height = height; + Stride = stride; + } + + private readonly byte[] _data; + public Span Data => _data; + public int Width { get; } + public int Height { get; } + public int Stride { get; } + + public abstract void SetPixel(int x, int y, Color c); + + public virtual void Clear(Color c = default) + { + for (int y = 0; y < Height; y++) + { + for (int x = 0; x < Width; x++) + { + SetPixel(x, y, c); + } + } + } + } +} diff --git a/src/Iot.Device.Bindings/Utils/Color.cs b/src/Iot.Device.Bindings/Utils/Color.cs new file mode 100644 index 0000000000..ae64bd1ebf --- /dev/null +++ b/src/Iot.Device.Bindings/Utils/Color.cs @@ -0,0 +1,57 @@ +using System.Runtime.InteropServices; + +namespace Iot.Device.Bindings.Utils +{ + [StructLayout(LayoutKind.Explicit)] + public struct Color + { + public Color(byte r, byte g, byte b, byte a = 0xff) : this() + { + A = a; + R = r; + G = g; + B = b; + } + + public Color(byte level) : this(level, level, level) { } + + public Color(uint argb) : this() { ARGB = argb; } + + public static explicit operator Color(uint value) => new Color(value); + public static explicit operator uint(Color c) => c.ARGB; + + public static Color operator /(Color c, int div) + => new Color((byte)(c.R / div), (byte)(c.G / div), (byte)(c.B / div), c.A); + + public static Color operator *(Color c, int mul) + => new Color((byte)(c.R * mul), (byte)(c.G * mul), (byte)(c.B * mul), c.A); + + public static Color operator <<(Color c, int shift) + => new Color((byte)(c.R << shift), (byte)(c.G << shift), (byte)(c.B << shift), c.A); + + public static Color operator >>(Color c, int shift) + => new Color((byte)(c.R >> shift), (byte)(c.G >> shift), (byte)(c.B >> shift), c.A); + + [FieldOffset(0)] + public byte B; + [FieldOffset(1)] + public byte G; + [FieldOffset(2)] + public byte R; + [FieldOffset(3)] + public byte A; + [FieldOffset(0)] + public uint ARGB; + + public static readonly Color Black = new Color(0, 0, 0); + public static readonly Color White = new Color(255, 255, 255); + public static readonly Color Red = new Color(255, 0, 0); + public static readonly Color Green = new Color(0, 255, 0); + public static readonly Color Blue = new Color(0, 0, 255); + public static readonly Color Yellow = new Color(255, 255, 0); + public static readonly Color Cyan = new Color(0, 255, 255); + public static readonly Color Magenta = new Color(255, 0, 255); + + public override string ToString() => ARGB.ToString("x8"); + } +} diff --git a/src/devices/Ws2812B/BitmapImageNeo3.cs b/src/devices/Ws2812B/BitmapImageNeo3.cs new file mode 100644 index 0000000000..4014dfcc12 --- /dev/null +++ b/src/devices/Ws2812B/BitmapImageNeo3.cs @@ -0,0 +1,57 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Iot.Device.Bindings.Utils; + +namespace Iot.Device.Bindings.WS2812B +{ + ///

+ /// Special 24bit RGB format for Neo pixel LEDs where each bit is converted to 3 bits. + /// A one is converted to 110, a zero is converted to 100. + /// + public class BitmapImageNeo3 : BitmapImage + { + const int BytesPerComponent = 3; + const int BytesPerPixel = BytesPerComponent * 3; + const int ResetDelayInBytes = 30; // 100us @ 2.4Mbps + + public BitmapImageNeo3(int width, int height) + : base(new byte[width * height * BytesPerPixel + ResetDelayInBytes], width, height, width * BytesPerPixel) + { + } + + public void SetPixel(int x, int y, uint color) => SetPixel(x, y, new Color(color)); + public void SetPixel(int x, int y, byte level) => SetPixel(x, y, new Color(level)); + + public override void SetPixel(int x, int y, Color c) + { + var offset = y * Stride + x * BytesPerPixel; + Data[offset++] = _lookup[c.G * BytesPerComponent + 0]; + Data[offset++] = _lookup[c.G * BytesPerComponent + 1]; + Data[offset++] = _lookup[c.G * BytesPerComponent + 2]; + Data[offset++] = _lookup[c.R * BytesPerComponent + 0]; + Data[offset++] = _lookup[c.R * BytesPerComponent + 1]; + Data[offset++] = _lookup[c.R * BytesPerComponent + 2]; + Data[offset++] = _lookup[c.B * BytesPerComponent + 0]; + Data[offset++] = _lookup[c.B * BytesPerComponent + 1]; + Data[offset++] = _lookup[c.B * BytesPerComponent + 2]; + } + + private static readonly byte[] _lookup = new byte[256 * BytesPerComponent]; + static BitmapImageNeo3() + { + for (int i = 0; i < 256; i++) + { + int data = 0; + for (int j = 7; j >= 0; j--) + { + data = (data << 3) | 0b100 | ((i >> j) << 1) & 2; + } + _lookup[i * BytesPerComponent + 0] = unchecked((byte)(data >> 16)); + _lookup[i * BytesPerComponent + 1] = unchecked((byte)(data >> 8)); + _lookup[i * BytesPerComponent + 2] = unchecked((byte)(data >> 0)); + } + } + } +} diff --git a/src/devices/Ws2812B/Ws2812B.cs b/src/devices/Ws2812B/Ws2812B.cs new file mode 100644 index 0000000000..83415f2c80 --- /dev/null +++ b/src/devices/Ws2812B/Ws2812B.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Device.Spi; + +namespace Iot.Device.Bindings.WS2812B +{ + public class WS2812B + { + private readonly SpiDevice _spiDevice; + public BitmapImageNeo3 Image { get; } + + public WS2812B(SpiDevice spiDevice, int width, int height = 1) + { + _spiDevice = spiDevice; + _spiDevice.ConnectionSettings.ClockFrequency = 2_400_000; + _spiDevice.ConnectionSettings.Mode = SpiMode.Mode0; + _spiDevice.ConnectionSettings.DataBitLength = 8; + Image = new BitmapImageNeo3(width, height); + } + + public void Update() => _spiDevice.Write(Image.Data); + } +} From 05c743e9b00055eb9cf04f9b6b12fbae31d925f0 Mon Sep 17 00:00:00 2001 From: Marcus Lorentzon Date: Sun, 17 Feb 2019 05:15:55 +0100 Subject: [PATCH 2/7] Fix merge typo --- src/Iot.Device.Bindings/Iot.Device.Bindings.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj index 9ce3f57c75..19916fc9f2 100644 --- a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj +++ b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj @@ -25,6 +25,7 @@ + RuntimeIdentifier=linux From 49af48e5cb46b2afe1671cb65535586c6c7e0675 Mon Sep 17 00:00:00 2001 From: Marcus Lorentzon Date: Sun, 17 Feb 2019 05:28:46 +0100 Subject: [PATCH 3/7] Revert to .Net Core 2.1 --- samples/neo-pixels-x8/neo-pixels-x8.csproj | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/samples/neo-pixels-x8/neo-pixels-x8.csproj b/samples/neo-pixels-x8/neo-pixels-x8.csproj index aaad9ff977..cc0cc30e9d 100644 --- a/samples/neo-pixels-x8/neo-pixels-x8.csproj +++ b/samples/neo-pixels-x8/neo-pixels-x8.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.0 + netcoreapp2.1 neo_pixels_x8 @@ -11,7 +11,9 @@ - + + RuntimeIdentifier=linux + From 5f3583342bf11d717c28bb5dd2ff4669af15a9d7 Mon Sep 17 00:00:00 2001 From: Marcus Lorentzon Date: Sun, 17 Feb 2019 05:38:09 +0100 Subject: [PATCH 4/7] Remove WIP file refs --- src/Iot.Device.Bindings/Iot.Device.Bindings.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj index 19916fc9f2..fbcb5b3f2b 100644 --- a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj +++ b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj @@ -20,8 +20,6 @@ - - From bbf7c1594a49a88c003bed385df4c60cd7ad99b4 Mon Sep 17 00:00:00 2001 From: Marcus Lorentzon Date: Sun, 17 Feb 2019 05:48:45 +0100 Subject: [PATCH 5/7] Remove ssh deploy config for CI --- samples/neo-pixels-x8/neo-pixels-x8.csproj | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/samples/neo-pixels-x8/neo-pixels-x8.csproj b/samples/neo-pixels-x8/neo-pixels-x8.csproj index cc0cc30e9d..ece95051ad 100644 --- a/samples/neo-pixels-x8/neo-pixels-x8.csproj +++ b/samples/neo-pixels-x8/neo-pixels-x8.csproj @@ -16,18 +16,4 @@ - - - - - - - 192.168.1.109 - - /home/pi/neopix - pi - malooreader - OnBuildSuccess - - From f4c74b93e186a0991948f6bb0499106d4b14dbee Mon Sep 17 00:00:00 2001 From: Marcus Lorentzon Date: Sun, 17 Feb 2019 17:36:22 +0100 Subject: [PATCH 6/7] Fix review comments --- samples/neo-pixels-x8/Program.cs | 41 ------------- samples/neo-pixels-x8/README.md | 31 ---------- samples/neo-pixels-x8/neo-pixels-x8.csproj | 19 ------ .../Iot.Device.Bindings.csproj | 7 +-- src/Iot.Device.Bindings/Utils/Color.cs | 57 ------------------ .../Iot/Device/Graphics}/BitmapImage.cs | 9 ++- src/devices/Ws2812B/BitmapImageNeo3.cs | 18 +++--- src/devices/Ws2812B/README.md | 27 +++++++++ src/devices/Ws2812B/Ws2812B.cs | 6 +- src/devices/Ws2812B/Ws2812b.csproj | 17 ++++++ src/devices/Ws2812B/samples/README.md | 26 ++++++++ src/devices/Ws2812B/samples/Ws2812b.Sample.cs | 44 ++++++++++++++ .../Ws2812B/samples/Ws2812b.Samples.csproj | 12 ++++ .../Ws2812B/samples}/rpi-neo-pixels.fzz | Bin .../Ws2812B/samples}/rpi-neo-pixels_bb.png | Bin 15 files changed, 148 insertions(+), 166 deletions(-) delete mode 100644 samples/neo-pixels-x8/Program.cs delete mode 100644 samples/neo-pixels-x8/README.md delete mode 100644 samples/neo-pixels-x8/neo-pixels-x8.csproj delete mode 100644 src/Iot.Device.Bindings/Utils/Color.cs rename src/{Iot.Device.Bindings/Utils => devices/Common/Iot/Device/Graphics}/BitmapImage.cs (74%) create mode 100644 src/devices/Ws2812B/README.md create mode 100644 src/devices/Ws2812B/Ws2812b.csproj create mode 100644 src/devices/Ws2812B/samples/README.md create mode 100644 src/devices/Ws2812B/samples/Ws2812b.Sample.cs create mode 100644 src/devices/Ws2812B/samples/Ws2812b.Samples.csproj rename {samples/neo-pixels-x8 => src/devices/Ws2812B/samples}/rpi-neo-pixels.fzz (100%) rename {samples/neo-pixels-x8 => src/devices/Ws2812B/samples}/rpi-neo-pixels_bb.png (100%) diff --git a/samples/neo-pixels-x8/Program.cs b/samples/neo-pixels-x8/Program.cs deleted file mode 100644 index abd4bf5e95..0000000000 --- a/samples/neo-pixels-x8/Program.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Iot.Device.Bindings.Utils; -using Iot.Device.Bindings.WS2812B; - -namespace led_blink -{ - class Program - { - static void Main() - { - var spi = new System.Device.Spi.Drivers.UnixSpiDevice(new System.Device.Spi.SpiConnectionSettings(0, 0)); - var neo = new WS2812B(spi, 8); - - // Display basic colors for 5 sec - BitmapImageNeo3 img = neo.Image; - img.SetPixel(0, 0, Color.White >> 6); // Shift down color brightness (same as divide each component by 64) - img.SetPixel(1, 0, Color.Red >> 6); - img.SetPixel(2, 0, Color.Green >> 6); - img.SetPixel(3, 0, Color.Blue >> 6); - img.SetPixel(4, 0, Color.Yellow >> 6); - img.SetPixel(5, 0, Color.Cyan >> 6); - img.SetPixel(6, 0, Color.Magenta >> 6); - img.SetPixel(7, 0, (Color)0xffff8000 >> 6); // Create orange from ARGB constant - neo.Update(); - System.Threading.Thread.Sleep(5000); - - // Fade in first pixel - byte b = 0; - img.Clear(); - while (true) - { - img.SetPixel(0, 0, new Color(b++)); - neo.Update(); - System.Threading.Thread.Sleep(10); - } - } - } -} diff --git a/samples/neo-pixels-x8/README.md b/samples/neo-pixels-x8/README.md deleted file mode 100644 index a738a18896..0000000000 --- a/samples/neo-pixels-x8/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Drive Neo pixel strip (x8) from Raspberry Pi - -This [sample](Program.cs) demonstrates how to use the [Bitmap library](../../src/Iot.Device.Bindings/Utils/BitmapImage.cs) and the [Neo pixel binding](../../src/devices/Ws2812B/Ws2812B.cs) to drive an 8 Neo Pixel stick from a Raspberry Pi. - -## Run the sample - -This sample can be built and run with .NET Core 3.0. Use the following commands from the root of the repo: - -```console -cd samples -cd neo-pixels-x8 -dotnet build -c release -o out -sudo dotnet out/neo-pixels-x8.dll -``` - -## Breadboard layout - -The following [fritzing diagram](rpi-neo-pixels.fzz) demonstrates how you should wire your device in order to run the [program](Program.cs). It uses the GND, 5V and MOSI pins on the Raspberry Pi. - -![Raspberry Pi Breadboard diagram](rpi-neo-pixels_bb.png) - -## Hardware elements - -The following elements are used in this sample: - -* [Raspberry Pi 3](https://www.adafruit.com/product/3055) -* [Neo pixels x8 stick](https://www.adafruit.com/product/1426) - -## Resources - -* [Using .NET Core for IoT Scenarios](../README.md) diff --git a/samples/neo-pixels-x8/neo-pixels-x8.csproj b/samples/neo-pixels-x8/neo-pixels-x8.csproj deleted file mode 100644 index ece95051ad..0000000000 --- a/samples/neo-pixels-x8/neo-pixels-x8.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Exe - netcoreapp2.1 - neo_pixels_x8 - - - - - - - - - RuntimeIdentifier=linux - - - - diff --git a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj index fbcb5b3f2b..62a15a15bb 100644 --- a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj +++ b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj @@ -1,4 +1,4 @@ - + netcoreapp2.1 @@ -18,11 +18,6 @@ - - - - - RuntimeIdentifier=linux diff --git a/src/Iot.Device.Bindings/Utils/Color.cs b/src/Iot.Device.Bindings/Utils/Color.cs deleted file mode 100644 index ae64bd1ebf..0000000000 --- a/src/Iot.Device.Bindings/Utils/Color.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Runtime.InteropServices; - -namespace Iot.Device.Bindings.Utils -{ - [StructLayout(LayoutKind.Explicit)] - public struct Color - { - public Color(byte r, byte g, byte b, byte a = 0xff) : this() - { - A = a; - R = r; - G = g; - B = b; - } - - public Color(byte level) : this(level, level, level) { } - - public Color(uint argb) : this() { ARGB = argb; } - - public static explicit operator Color(uint value) => new Color(value); - public static explicit operator uint(Color c) => c.ARGB; - - public static Color operator /(Color c, int div) - => new Color((byte)(c.R / div), (byte)(c.G / div), (byte)(c.B / div), c.A); - - public static Color operator *(Color c, int mul) - => new Color((byte)(c.R * mul), (byte)(c.G * mul), (byte)(c.B * mul), c.A); - - public static Color operator <<(Color c, int shift) - => new Color((byte)(c.R << shift), (byte)(c.G << shift), (byte)(c.B << shift), c.A); - - public static Color operator >>(Color c, int shift) - => new Color((byte)(c.R >> shift), (byte)(c.G >> shift), (byte)(c.B >> shift), c.A); - - [FieldOffset(0)] - public byte B; - [FieldOffset(1)] - public byte G; - [FieldOffset(2)] - public byte R; - [FieldOffset(3)] - public byte A; - [FieldOffset(0)] - public uint ARGB; - - public static readonly Color Black = new Color(0, 0, 0); - public static readonly Color White = new Color(255, 255, 255); - public static readonly Color Red = new Color(255, 0, 0); - public static readonly Color Green = new Color(0, 255, 0); - public static readonly Color Blue = new Color(0, 0, 255); - public static readonly Color Yellow = new Color(255, 255, 0); - public static readonly Color Cyan = new Color(0, 255, 255); - public static readonly Color Magenta = new Color(255, 0, 255); - - public override string ToString() => ARGB.ToString("x8"); - } -} diff --git a/src/Iot.Device.Bindings/Utils/BitmapImage.cs b/src/devices/Common/Iot/Device/Graphics/BitmapImage.cs similarity index 74% rename from src/Iot.Device.Bindings/Utils/BitmapImage.cs rename to src/devices/Common/Iot/Device/Graphics/BitmapImage.cs index 36b1fdc0a4..e98ed4cc66 100644 --- a/src/Iot.Device.Bindings/Utils/BitmapImage.cs +++ b/src/devices/Common/Iot/Device/Graphics/BitmapImage.cs @@ -1,6 +1,11 @@ -using System; +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. -namespace Iot.Device.Bindings.Utils +using System; +using System.Drawing; + +namespace Iot.Device.Graphics { public abstract class BitmapImage { diff --git a/src/devices/Ws2812B/BitmapImageNeo3.cs b/src/devices/Ws2812B/BitmapImageNeo3.cs index 4014dfcc12..1b9a4c4c38 100644 --- a/src/devices/Ws2812B/BitmapImageNeo3.cs +++ b/src/devices/Ws2812B/BitmapImageNeo3.cs @@ -2,9 +2,10 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Iot.Device.Bindings.Utils; +using Iot.Device.Graphics; +using System.Drawing; -namespace Iot.Device.Bindings.WS2812B +namespace Iot.Device.Ws2812b { /// /// Special 24bit RGB format for Neo pixel LEDs where each bit is converted to 3 bits. @@ -12,17 +13,20 @@ namespace Iot.Device.Bindings.WS2812B /// public class BitmapImageNeo3 : BitmapImage { - const int BytesPerComponent = 3; - const int BytesPerPixel = BytesPerComponent * 3; - const int ResetDelayInBytes = 30; // 100us @ 2.4Mbps + private const int BytesPerComponent = 3; + private const int BytesPerPixel = BytesPerComponent * 3; + // The Neo Pixels require a 50us delay (all zeros) after. Since Spi freq is not exactly + // as requested 100us is used here with good practical results. 100us @ 2.4Mbps and 8bit + // data means we have to add 30 bytes of zero padding. + private const int ResetDelayInBytes = 30; public BitmapImageNeo3(int width, int height) : base(new byte[width * height * BytesPerPixel + ResetDelayInBytes], width, height, width * BytesPerPixel) { } - public void SetPixel(int x, int y, uint color) => SetPixel(x, y, new Color(color)); - public void SetPixel(int x, int y, byte level) => SetPixel(x, y, new Color(level)); + public void SetPixel(int x, int y, uint color) => SetPixel(x, y, Color.FromArgb((int)color)); + public void SetPixel(int x, int y, byte level) => SetPixel(x, y, Color.FromArgb(0xff, level, level, level)); public override void SetPixel(int x, int y, Color c) { diff --git a/src/devices/Ws2812B/README.md b/src/devices/Ws2812B/README.md new file mode 100644 index 0000000000..f9660e77b7 --- /dev/null +++ b/src/devices/Ws2812B/README.md @@ -0,0 +1,27 @@ +# Ws2812b + +## Summary + +This binding allows you to update the RGB LEDs on Ws2812b based strips and matrices. + +To see how to use the binding in code, see the [sample](samples/README.md). + +## Device Family + +* WS2812B: [Datasheet](https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) + +## Binding Notes + +### Raspberry Pi setup (/boot/config.txt) + +* Make sure spi is enabled
+ `dtparam=spi=on` + +* Make sure SPI don't change speed fix the core clock
+ `core_freq=250`
+ `core_freq_min=250` + +## References + +* [Neo pixels guide](https://learn.adafruit.com/adafruit-neopixel-uberguide) +* [Neo pixels x8 stick](https://www.adafruit.com/product/1426) diff --git a/src/devices/Ws2812B/Ws2812B.cs b/src/devices/Ws2812B/Ws2812B.cs index 83415f2c80..71672b5396 100644 --- a/src/devices/Ws2812B/Ws2812B.cs +++ b/src/devices/Ws2812B/Ws2812B.cs @@ -4,14 +4,14 @@ using System.Device.Spi; -namespace Iot.Device.Bindings.WS2812B +namespace Iot.Device.Ws2812b { - public class WS2812B + public class Ws2812b { private readonly SpiDevice _spiDevice; public BitmapImageNeo3 Image { get; } - public WS2812B(SpiDevice spiDevice, int width, int height = 1) + public Ws2812b(SpiDevice spiDevice, int width, int height = 1) { _spiDevice = spiDevice; _spiDevice.ConnectionSettings.ClockFrequency = 2_400_000; diff --git a/src/devices/Ws2812B/Ws2812b.csproj b/src/devices/Ws2812B/Ws2812b.csproj new file mode 100644 index 0000000000..b3ac6402f9 --- /dev/null +++ b/src/devices/Ws2812B/Ws2812b.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp2.1 + + false + latest + + + + + + + + + + diff --git a/src/devices/Ws2812B/samples/README.md b/src/devices/Ws2812B/samples/README.md new file mode 100644 index 0000000000..7a4829f20c --- /dev/null +++ b/src/devices/Ws2812B/samples/README.md @@ -0,0 +1,26 @@ +# Drive Neo pixel strip (x8) from Raspberry Pi + +This [program](Ws2812b.Sample.cs) demonstrates how to use the [Neo pixel binding](../Ws2812b.cs) to drive an 8 Neo Pixel stick from a Raspberry Pi. + +It shows how to set the colors of each LED using `SetPixel` and `Update`. Then it shows how to fade in one of the LEDs in a loop. + +## Run the sample + +```console +cd samples +dotnet build -c release -o out +dotnet out/Ws2812b.Samples.dll +``` + +## Breadboard layout + +The following [fritzing diagram](rpi-neo-pixels.fzz) demonstrates how you should wire your device in order to run the program. It uses the GND, 5V and MOSI pins on the Raspberry Pi. + +![Raspberry Pi Breadboard diagram](rpi-neo-pixels_bb.png) + +## Hardware elements + +The following elements are used in this sample: + +* [Raspberry Pi 3](https://www.adafruit.com/product/3055) +* [Neo pixels x8 stick](https://www.adafruit.com/product/1426) diff --git a/src/devices/Ws2812B/samples/Ws2812b.Sample.cs b/src/devices/Ws2812B/samples/Ws2812b.Sample.cs new file mode 100644 index 0000000000..7dc241d9d8 --- /dev/null +++ b/src/devices/Ws2812B/samples/Ws2812b.Sample.cs @@ -0,0 +1,44 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Device.Spi; +using System.Device.Spi.Drivers; +using System.Drawing; + +namespace Iot.Device.Ws2812b.Samples +{ + class Program + { + static void Main() + { + // Create a Neo Pixel x8 stick on spi 0.0 + var spi = new UnixSpiDevice(new SpiConnectionSettings(0, 0)); + var neo = new Ws2812b(spi, 8); + + // Display basic colors for 5 sec + BitmapImageNeo3 img = neo.Image; + img.SetPixel(0, 0, Color.White); + img.SetPixel(1, 0, Color.Red); + img.SetPixel(2, 0, Color.Green); + img.SetPixel(3, 0, Color.Blue); + img.SetPixel(4, 0, Color.Yellow); + img.SetPixel(5, 0, Color.Cyan); + img.SetPixel(6, 0, Color.Magenta); + img.SetPixel(7, 0, 0xffff8000); + neo.Update(); + System.Threading.Thread.Sleep(5000); + + // Fade in first pixel + byte b = 0; + img.Clear(); + while (true) + { + img.SetPixel(0, 0, Color.FromArgb(0xff, b, b, b)); + neo.Update(); + System.Threading.Thread.Sleep(10); + b++; + } + } + } +} diff --git a/src/devices/Ws2812B/samples/Ws2812b.Samples.csproj b/src/devices/Ws2812B/samples/Ws2812b.Samples.csproj new file mode 100644 index 0000000000..e360eb0f55 --- /dev/null +++ b/src/devices/Ws2812B/samples/Ws2812b.Samples.csproj @@ -0,0 +1,12 @@ + + + + Exe + netcoreapp2.1 + + + + + + + diff --git a/samples/neo-pixels-x8/rpi-neo-pixels.fzz b/src/devices/Ws2812B/samples/rpi-neo-pixels.fzz similarity index 100% rename from samples/neo-pixels-x8/rpi-neo-pixels.fzz rename to src/devices/Ws2812B/samples/rpi-neo-pixels.fzz diff --git a/samples/neo-pixels-x8/rpi-neo-pixels_bb.png b/src/devices/Ws2812B/samples/rpi-neo-pixels_bb.png similarity index 100% rename from samples/neo-pixels-x8/rpi-neo-pixels_bb.png rename to src/devices/Ws2812B/samples/rpi-neo-pixels_bb.png From 9448dd47eeb4e4513be2ed12037e2c57e57c8a63 Mon Sep 17 00:00:00 2001 From: Marcus Lorentzon Date: Sun, 17 Feb 2019 23:13:59 +0100 Subject: [PATCH 7/7] Fix review comments --- src/devices/Ws2812B/BitmapImageNeo3.cs | 3 --- src/devices/Ws2812B/Ws2812b.csproj | 2 +- src/devices/Ws2812B/samples/Ws2812b.Sample.cs | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/devices/Ws2812B/BitmapImageNeo3.cs b/src/devices/Ws2812B/BitmapImageNeo3.cs index 1b9a4c4c38..5bdfe5b415 100644 --- a/src/devices/Ws2812B/BitmapImageNeo3.cs +++ b/src/devices/Ws2812B/BitmapImageNeo3.cs @@ -25,9 +25,6 @@ public BitmapImageNeo3(int width, int height) { } - public void SetPixel(int x, int y, uint color) => SetPixel(x, y, Color.FromArgb((int)color)); - public void SetPixel(int x, int y, byte level) => SetPixel(x, y, Color.FromArgb(0xff, level, level, level)); - public override void SetPixel(int x, int y, Color c) { var offset = y * Stride + x * BytesPerPixel; diff --git a/src/devices/Ws2812B/Ws2812b.csproj b/src/devices/Ws2812B/Ws2812b.csproj index b3ac6402f9..80c40400cc 100644 --- a/src/devices/Ws2812B/Ws2812b.csproj +++ b/src/devices/Ws2812B/Ws2812b.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/devices/Ws2812B/samples/Ws2812b.Sample.cs b/src/devices/Ws2812B/samples/Ws2812b.Sample.cs index 7dc241d9d8..2135df201a 100644 --- a/src/devices/Ws2812B/samples/Ws2812b.Sample.cs +++ b/src/devices/Ws2812B/samples/Ws2812b.Sample.cs @@ -25,7 +25,7 @@ static void Main() img.SetPixel(4, 0, Color.Yellow); img.SetPixel(5, 0, Color.Cyan); img.SetPixel(6, 0, Color.Magenta); - img.SetPixel(7, 0, 0xffff8000); + img.SetPixel(7, 0, Color.FromArgb(unchecked((int)0xffff8000))); neo.Update(); System.Threading.Thread.Sleep(5000);