{"id":688,"date":"2020-03-03T17:15:09","date_gmt":"2020-03-03T16:15:09","guid":{"rendered":"https:\/\/blog.e-ika.com\/?p=688"},"modified":"2020-03-17T08:53:07","modified_gmt":"2020-03-17T07:53:07","slug":"neopixel","status":"publish","type":"post","link":"https:\/\/www.turibot.es\/blog\/index.php\/2020\/03\/03\/neopixel\/","title":{"rendered":"Neopixel. WS2812B"},"content":{"rendered":"\n<div class=\"wp-block-media-text alignwide is-stacked-on-mobile is-vertically-aligned-top\" style=\"grid-template-columns:35% auto\"><figure class=\"wp-block-media-text__media\"><img decoding=\"async\" loading=\"lazy\" width=\"400\" height=\"300\" src=\"https:\/\/blog.e-ika.com\/wp-content\/uploads\/2020\/03\/neopixel.jpg\" alt=\"\" class=\"wp-image-689\" srcset=\"https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg 400w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-300x225.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p>Neopixel es el nombre (acu\u00f1ado por <a href=\"https:\/\/www.adafruit.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Adafruit (opens in a new tab)\"><strong>Adafruit<\/strong><\/a>) que se le da a un tipo especial de led RGB, el WS2812B. Se trata de un led con l\u00f3gica integrada, de manera que podemos conectar multitud de ellos secuencialmente y acceder individualmente a cada uno.<\/p>\n\n\n\n<p>Te\u00f3ricamente no hay l\u00edmite en el n\u00famero de leds que podemos encadenar m\u00e1s all\u00e1 de lo que soporte nuestra fuente de alimentaci\u00f3n.<\/p>\n<\/div><\/div>\n\n\n\n<p>Cada led se compone de un circuito integrado que controla tres leds internos de cada uno de los colores RGB. Este integrado es capaz de recibir la informaci\u00f3n que debe controlar sus leds internos y pasar la informaci\u00f3n necesaria al siguiente led de la cadena en el array.<\/p>\n\n\n\n<section class=\"wp-block-uagb-section uagb-section__wrap uagb-section__background-color uagb-block-3caa8c51-2cc0-4b4f-9fa0-b27fda7047f9\"><div class=\"uagb-section__overlay\"><\/div><div class=\"uagb-section__inner-wrap\">\n<h4 class=\"wp-block-heading\">Caracter\u00edsticas generales<\/h4>\n\n\n\n<ul><li>Alimentaci\u00f3n: 3,5 &#8211; 5,3 V<\/li><li>Consumo: M\u00e1ximo 60 mA por led (20 mA por cada led interno) Blanco a m\u00e1xima intensidad<\/li><\/ul>\n\n\n\n<p class=\"has-text-align-right\"><em>Mas informaci\u00f3n en el <a href=\"https:\/\/cdn-shop.adafruit.com\/datasheets\/WS2812B.pdf\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"datasheet (opens in a new tab)\"><strong>datasheet<\/strong><\/a><\/em><\/p>\n<\/div><\/section>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Podemos encontrar arrays de estos leds en distintas combinaciones, como matrices, anillos, tiras, etc. Todas ellas se manejan de la misma forma.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.e-ika.com\/wp-content\/uploads\/2020\/03\/neopixel-disposiciones-1024x756.jpg\" alt=\"\" class=\"wp-image-697\" width=\"581\" height=\"428\" srcset=\"https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-disposiciones-1024x756.jpg 1024w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-disposiciones-300x221.jpg 300w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-disposiciones-768x567.jpg 768w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-disposiciones.jpg 1043w\" sizes=\"(max-width: 581px) 100vw, 581px\" \/><figcaption>Algunas disposiciones comunes de neopixel<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Conexi\u00f3n<\/h3>\n\n\n\n<p>Cada una de estas disposiciones tiene tres pines, dos de alimentaci\u00f3n VCC y GND y uno de se\u00f1al DIN. Cada led alimenta y pasa la se\u00f1al al siguiente por lo que s\u00f3lo tenemos que conectar el primer led.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.e-ika.com\/wp-content\/uploads\/2020\/03\/neopixel-conexion.jpg\" alt=\"\" class=\"wp-image-704\" width=\"404\" height=\"106\" srcset=\"https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-conexion.jpg 464w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-conexion-300x79.jpg 300w\" sizes=\"(max-width: 404px) 100vw, 404px\" \/><figcaption>Conexi\u00f3n neopixel<\/figcaption><\/figure><\/div>\n\n\n\n<p>Es importante tener en cuenta que debemos usar siempre una fuente externa para alimentar los arrays dado que pueden tener un considerable consumo. Es necesario a\u00f1adir una resistencia de 470 \u2126 en el pin DIN para evitar que se da\u00f1en los primeros leds de la tira.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.e-ika.com\/wp-content\/uploads\/2020\/03\/neopixel-arduino-connection2-1024x529.jpg\" alt=\"\" class=\"wp-image-725\" width=\"670\" height=\"345\" srcset=\"https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-arduino-connection2-1024x529.jpg 1024w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-arduino-connection2-300x155.jpg 300w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-arduino-connection2-768x397.jpg 768w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-arduino-connection2-1536x794.jpg 1536w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-arduino-connection2.jpg 1584w\" sizes=\"(max-width: 670px) 100vw, 670px\" \/><figcaption>Conexi\u00f3n Neopixel con Arduino<\/figcaption><\/figure><\/div>\n\n\n\n<p>Notar que usamos una fuente de alimentaci\u00f3n externa para alimentar el array de leds. En general, la salida 5V de Arduino no nos proporcionar\u00e1 suficiente corriente para alimentar el array y corremos el riesgo de da\u00f1ar nuestro Arduino.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo Arduino<\/h3>\n\n\n\n<p>Para controlar qu\u00e9 leds queremos encender y con qu\u00e9 color e intensidad, podemos usar la librer\u00eda <a rel=\"noreferrer noopener\" aria-label=\"FastLED (opens in a new tab)\" href=\"https:\/\/github.com\/FastLED\/FastLED\" target=\"_blank\"><strong>FastLED<\/strong><\/a>. En el siguiente c\u00f3digo definimos un array de 48 leds y asociamos la se\u00f1al DIN al pin digital 6 de Arduino. En el <code>loop<\/code> definimos un bucle <code>for<\/code> que recorre cada led del array encendi\u00e9ndolo en rojo y apag\u00e1ndolo tras 100 milisegundos. Podemos modificar la velocidad de avance cambiando el valor del <code>delay()<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n#include &lt;FastLED.h&gt;\n\n#define NUM_LEDS 48\n#define DATA_PIN 6\n\nCRGB leds&#x5B;NUM_LEDS];\n\nvoid setup() { \n    FastLED.addLeds&lt;NEOPIXEL, DATA_PIN&gt;(leds, NUM_LEDS);\n    FastLED.setBrightness(100);\n}\n\nvoid loop() { \n  for(int i = 0; i &lt; NUM_LEDS; i++){\n\tleds&#x5B;i] = CRGB::Red;\n\tFastLED.show();\n\t\n\tdelay(100);\n\t\n\tleds&#x5B;i] = CRGB::Black;\n\tFastLED.show();\n  }\n}\n<\/pre><\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Matrices y caracteres<\/h3>\n\n\n\n<p>Podemos representar caracteres (n\u00fameros y letras) usando matrices de neopixel. Estas matrices se encadenan unas detr\u00e1s de otras pudiendo obtener matrices de matrices de anchura y altura arbitraria.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"512\" height=\"366\" src=\"https:\/\/blog.e-ika.com\/wp-content\/uploads\/2020\/03\/matrices.jpg\" alt=\"\" class=\"wp-image-745\" srcset=\"https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/matrices.jpg 512w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/matrices-300x214.jpg 300w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><figcaption>Varias matrices encadenadas<\/figcaption><\/figure><\/div>\n\n\n\n<p>En la siguiente imagen podemos ver c\u00f3mo conectar dos matrices encadenadas, de manera que s\u00f3lo tenemos que conectar una de ellas a nuestro Arduino.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.e-ika.com\/wp-content\/uploads\/2020\/03\/dos-matrices-neopixe-conexion-arduino.jpg\" alt=\"\" class=\"wp-image-753\" width=\"620\" height=\"350\" srcset=\"https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/dos-matrices-neopixe-conexion-arduino.jpg 768w, https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/dos-matrices-neopixe-conexion-arduino-300x169.jpg 300w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><figcaption>Conexi\u00f3n de dos matrices neopixel con Arduino<\/figcaption><\/figure><\/div>\n\n\n\n<p>La forma m\u00e1s sencilla de gestionar los caracteres que queremos representar es usar la librer\u00eda <a rel=\"noreferrer noopener\" aria-label=\"Neomatrix  (se abre en una nueva pesta\u00f1a)\" href=\"https:\/\/learn.adafruit.com\/adafruit-neopixel-uberguide\/neomatrix-library\" target=\"_blank\"><strong>Neomatrix <\/strong><\/a>de Adafruit (tambi\u00e9n es necesario instalar la librer\u00eda <a href=\"https:\/\/github.com\/adafruit\/Adafruit_NeoPixel\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Neopixel (se abre en una nueva pesta\u00f1a)\"><strong>Neopixel<\/strong><\/a>). En el siguiente ejemplo vemos el c\u00f3digo necesario para manejar dos matrices y representar algunos n\u00fameros. Se muestra un contador de \u00ab00\u00bb a \u00ab99\u00bb que se incrementa a intervalos de 200 ms y cambia de color cada 10 valores.<\/p>\n\n\n\n<p>En la l\u00ednea 9, se crea el objeto <code>matrix <\/code>que representa a las matrices. El primer par\u00e1metro es el n\u00famero de leds que tienen las filas de cada matriz, el segundo es el n\u00famero de leds que tiene cada columna de cada matriz, el tercero es el n\u00famero de matrices dispuestas en horizontal, el cuarto es el n\u00famero de matrices dispuestas en vertical, el quinto es el pin de control y el sexto indica d\u00f3nde se sit\u00faa el led origen y el tipo de led. <\/p>\n\n\n\n<p>En la l\u00ednea 29, usamos la funcion <code>sprintf <\/code>para que el n\u00famero representado siempre tenga dos d\u00edgitos. En su lugar podemos descomentar la l\u00ednea 26 y comentar las l\u00edneas de la 28 a la 30.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n#include &lt;Adafruit_GFX.h&gt;\n#include &lt;Adafruit_NeoMatrix.h&gt;\n#include &lt;Adafruit_NeoPixel.h&gt;\n\n#define PIN 6\nint colorIndex = 0;\nint counter = 0;\n\nAdafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, 8, 2, 1, PIN,\n  NEO_MATRIX_TOP + NEO_MATRIX_LEFT,\n  NEO_GRB + NEO_KHZ800);\n\nconst uint16_t colors&#x5B;] = {\n  matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };\n\nvoid setup() {\n  matrix.begin();\n  matrix.setTextWrap(false);\n  matrix.setBrightness(40);\n  matrix.setTextColor(colors&#x5B;0]);\n}\n\nvoid loop() {\n  matrix.fillScreen(0);\n  matrix.setCursor(2, 0);\n  \/\/matrix.print(counter++);\n\n  char str&#x5B;2];\n  sprintf(str, &quot;%2d&quot;, counter++);\n  matrix.print(str);\n\n  if(counter % 10 == 0) colorIndex++;\n  if(colorIndex &gt;= 3) colorIndex = 0;\n  matrix.setTextColor(colors&#x5B;colorIndex]);\n\n  if(counter &gt; 99) counter = 0;\n  matrix.show();\n  delay(200);\n}\n\n<\/pre><\/div>\n\n<div class=\"e-pnt-maindiv\">\r\n<a href=\"https:\/\/www.e-ika.com\/search?q=ws2812\" target=\"_blanc\">\r\n<table class=\"e-pnt-maintable\">\r\n\t<tr class=\"e-pnt-tr\">\r\n\t\t<td style=\"width:70px; border: none;\">\r\n\t\t\t<img decoding=\"async\" src=\"https:\/\/blog.e-ika.com\/wp-content\/uploads\/2020\/02\/logo-e-ika.png\" style=\"width:60px;\">\r\n\t\t<\/td>\r\n\t\t<td style=\"text-align: left; border: none;\">\r\n\t\t\t<p style=\"margin-bottom: 0; font-weight: bold; font-size: 20px\">Producto en nuestra tienda<\/p>\r\n\t\t\t<h3 style=\"color: darkblue; border: none; padding: 0\">WS2812B<\/h3>\r\n\t\t<\/td>\r\n\t<\/tr>\r\n\t<tr class=\"e-pnt-tr\">\r\n\t\t<td colspan=\"2\" style=\"text-align: left; border: none;\">\r\n\t\t\t<p>Distintas configuraciones de neopixel. Anillos, matrices, tiras rgb, etc.<\/p>\n\t\t<\/td>\r\n\t<\/tr>\r\n<\/table>\r\n<\/a>\r\n\r\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Neopixel es el nombre (acu\u00f1ado por Adafruit) que se le da a un tipo especial de led RGB, el WS2812B. Se trata de un led con l\u00f3gica integrada, de manera que podemos conectar multitud&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":689,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":""},"categories":[2,3],"tags":[],"uagb_featured_image_src":{"full":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false],"thumbnail":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-150x150.jpg",150,150,true],"medium":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-300x225.jpg",300,225,true],"medium_large":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false],"large":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false],"1536x1536":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false],"2048x2048":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false],"thumb-small":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-160x160.jpg",160,160,true],"thumb-standard":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-320x300.jpg",320,300,true],"thumb-medium":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel-400x245.jpg",400,245,true],"thumb-large":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false],"thumb-xlarge":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false],"thumb-xxlarge":["https:\/\/www.turibot.es\/blog\/wp-content\/uploads\/2020\/03\/neopixel.jpg",400,300,false]},"uagb_author_info":{"display_name":"Vicente Gras","author_link":"https:\/\/www.turibot.es\/blog\/index.php\/author\/vicen\/"},"uagb_comment_info":0,"uagb_excerpt":"Neopixel es el nombre (acu\u00f1ado por Adafruit) que se le da a un tipo especial de led RGB, el WS2812B. Se trata de un led con l\u00f3gica integrada, de manera que podemos conectar multitud&#46;&#46;&#46;","_links":{"self":[{"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/posts\/688"}],"collection":[{"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=688"}],"version-history":[{"count":43,"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/posts\/688\/revisions"}],"predecessor-version":[{"id":760,"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/posts\/688\/revisions\/760"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/media\/689"}],"wp:attachment":[{"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.turibot.es\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}