{"id":505,"date":"2026-06-11T16:23:12","date_gmt":"2026-06-11T20:23:12","guid":{"rendered":"https:\/\/engineeringharmony.com\/?p=505"},"modified":"2026-06-11T16:55:12","modified_gmt":"2026-06-11T20:55:12","slug":"how-to-build-rgb-led-microcontroller-projects","status":"publish","type":"post","link":"https:\/\/engineeringharmony.com\/?p=505","title":{"rendered":"How to build RGB LED microcontroller projects"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I love to play with LEDs and microelectronics, and I have a stack of recent projects. I couldn&#8217;t figure out what to say about them individually, but there seems to be a theme developing, so I figured I&#8217;d write up a little article about them.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Raspberry Pi GPIO control<\/li>\n\n\n\n<li>Adafruit Circuit Playground Express Infrared Control<\/li>\n\n\n\n<li>Adafruit Trinkey Rotary<\/li>\n\n\n\n<li>Micro:bit Control<\/li>\n\n\n\n<li>Adding Servos with Micro:bit Crickit<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Raspberry Pi GPIO control<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I happened to have an old Raspberry Pi lying around, and I built up a circuit that had an three separate LEDs: Red, Green, and Blue. Each was connected to a separate GPIO pin and I used keyboard input to turn on and off the LEDs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once I completed that, I grabbed and RGB LED and wired that into the same GPIO pins, and was able to directly control that through the same method as the individual LEDs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s the circuit with all the LEDs in place:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"925\" src=\"https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084741-1024x925.jpg\" alt=\"\" class=\"wp-image-511\" srcset=\"https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084741-1024x925.jpg 1024w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084741-300x271.jpg 300w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084741-768x694.jpg 768w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084741-1536x1387.jpg 1536w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084741-2048x1849.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Adafruit Circuit Playground Express infrared control<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I also had a <a href=\"https:\/\/learn.adafruit.com\/adafruit-circuit-playground-express\/overview\" title=\"\">Circuit Playground Express<\/a> lying around and it has an infrared receiver. I used a remote control from a commercial LED lightbulb and some code to process the signal and change the onboard RGB LEDs based on button presses from the remote.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/learn.adafruit.com\/adafruit-rotary-trinkey\/overview\" title=\"\">Adafruit Rotary Trinkey<\/a><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I then stumbled on the <a href=\"https:\/\/learn.adafruit.com\/adafruit-rotary-trinkey\/overview\" title=\"\">AdaFruit Rotary Trinkey<\/a> and built some code to change the onboard LED. I wanted to have the knob control the each color of the RGB LED individually.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Micro:bit control<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve been a fan of the Micro:bit ecosystem, so I wanted to use it to control LEDs. I have some experience controlling NeoPixels from a Micro:bit so I wired up a strand something like <a href=\"https:\/\/www.adafruit.com\/product\/3811\" title=\"\">this one<\/a> to the Micro:bit. I have asked Claude to help me build a QLC+ connector in another <a href=\"https:\/\/engineeringharmony.com\/?p=303\" title=\"\">recent project<\/a> so I figured I&#8217;d try to use it again for this one. It built me the Micro:bit firmware and a bridge between QLC+ and the  Micro:bit. Ultimately, I was able to use the sliders in QLC+ to change the individual colors in each LED. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unfortunately, there were a couple things I couldn&#8217;t overcome. First is that I couldn&#8217;t get the protocol timing quite right, so I couldn&#8217;t send QLC+ cues, or any more data than a single slider at a time. (I did have better luck using the Circuit Playground Express, which seemed to have better serial behavior.) Also, the Micro:bit didn&#8217;t provide quite enough voltage, so the LEDs misbehaved a little bit. Overall, I was excited to build a good proof of concept.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Servo control with Micro:bit Crickit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In order to supply better power to the LEDs, and because I bought a <a href=\"https:\/\/www.robotshop.com\/products\/pan-tilt-bracket-kit-single-attachment?qd=86a2e31733433cc671fd511616077586\" title=\"\">servo arm<\/a> that also needed more power, I bought a <a href=\"https:\/\/www.adafruit.com\/product\/3928\" title=\"\">Micro:bit Crickit<\/a>. I was going to buy the <a href=\"https:\/\/www.adafruit.com\/product\/3093\" title=\"\">Circuit Playground Express Crickit<\/a>, but it was out of stock so I figured I&#8217;d give the Micro:bit a shot with better electrical power. The LEDs behaved much better with the Crickit, but the serial was still flakey so I couldn&#8217;t send lots of data from QLC+, so I may ultimately have to move back to the Circuit Playground Express for the serial performance, but this was a good upgrade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As another upgrade, I used the <a href=\"https:\/\/www.adafruit.com\/product\/1558\" title=\"\">breadboard-friendly individual Neopixels<\/a> so that I&#8217;ll be able to move them around. I&#8217;d like to build this into a little scale model of a theater so I could have a fun little theatrical lighting design space that I can use with QLC+.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s the updated setup with the servo and individual LEDs<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084742-1024x768.jpg\" alt=\"\" class=\"wp-image-512\" srcset=\"https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084742-1024x768.jpg 1024w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084742-300x225.jpg 300w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084742-768x576.jpg 768w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084742-1536x1152.jpg 1536w, https:\/\/engineeringharmony.com\/wp-content\/uploads\/2026\/06\/1000084742-2048x1536.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>I love to play with LEDs and microelectronics, and I have a stack of recent projects. I couldn&#8217;t figure out what to say about them individually, but there seems to be a theme developing, so I figured I&#8217;d write up a little article about them. Raspberry Pi GPIO control I happened to have an old [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[9,11],"tags":[],"class_list":["post-505","post","type-post","status-publish","format-standard","hentry","category-documentation","category-projects"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=\/wp\/v2\/posts\/505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=505"}],"version-history":[{"count":7,"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=\/wp\/v2\/posts\/505\/revisions"}],"predecessor-version":[{"id":514,"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=\/wp\/v2\/posts\/505\/revisions\/514"}],"wp:attachment":[{"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/engineeringharmony.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}