{"id":977,"date":"2021-02-26T10:02:23","date_gmt":"2021-02-26T10:02:23","guid":{"rendered":"http:\/\/www.igfasouza.com\/blog\/?p=977"},"modified":"2021-04-19T22:09:40","modified_gmt":"2021-04-19T21:09:40","slug":"rainbow-hat-and-java","status":"publish","type":"post","link":"http:\/\/www.igfasouza.com\/blog\/rainbow-hat-and-java\/","title":{"rendered":"Rainbow HAT and Java"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/PXL_20210224_202642207-1024x768.jpg\" alt=\"\" class=\"alignnone size-large wp-image-978\" width=\"625\" height=\"469\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/PXL_20210224_202642207-1024x768.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/PXL_20210224_202642207-300x225.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/PXL_20210224_202642207-768x576.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/PXL_20210224_202642207-624x468.jpg 624w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><b>How\u2019s it going there?<\/b><br \/>\n<small style=\"color:#9f9f9f\">2021\/02\/26<\/small><\/p>\n<p>The Rainbow HAT is an add-on board for Raspberry Pi, is a collection of sensors, inputs and outputs from popular components in one board, which we can attach the 40 pin pin-out of the Pi.<br \/>\nAfter Google announced Android Things Pimoroni designed the all-singing, all-dancing Rainbow HAT. Jam-packed with LEDs, buttons and sensors, it enables you to experiment with Android Things and use it with the wide range of protocols available on the Raspberry Pi.<\/p>\n<p>Rainbow HAT is designed to stimulate ideas &#8211; a development platform that can be used to build new and exciting IoT hardware and software. It\u2019s also meant to be fun to use, and that should be apparent just by looking at it &#8211; the playful rainbow formed from the seven APA102 LEDs and the barometer type markings below it.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/android-things-starter-kit-1-1024x681.jpg\" alt=\"\" class=\"size-large wp-image-979\" width=\"625\" height=\"416\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/android-things-starter-kit-1-1024x681.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/android-things-starter-kit-1-300x200.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/android-things-starter-kit-1-768x511.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/android-things-starter-kit-1-624x415.jpg 624w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/android-things-starter-kit-1.jpg 1623w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><b>Technical Specification:<\/b><\/p>\n<ul>\n<li>Seven APA102 multicolor LEDs<\/li>\n<li>Four 14-segment alphanumeric displays (green LEDs)<\/li>\n<li>HT16K33 display driver chip<\/li>\n<li>Three capacitive touch buttons<\/li>\n<li>Atmel QT1070 capacitive touch driver chip<\/li>\n<li>Blue, green, and red LEDs<\/li>\n<li>BMP280 temperature and pressure sensor<\/li>\n<li>Piezo buzzer<\/li>\n<li>Breakout pins for servo, 12C, SPI, and UART (all 3v3)<\/li>\n<\/ul>\n<p>The board is designed specifically to show off the wide range of protocols available on the Raspberry Pi, including SPI (the APA102 LEDs), 12C (the BPM280 sensor and 14-segment displays), GPIO (the capacitive touch buttons and LEDs), and PWM (the piezo buzzer).<\/p>\n<p><a href=\"https:\/\/pinout.xyz\/pinout\/rainbow_hat\" rel=\"noopener\" target=\"_blank\">GPIO<\/a><\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/DHEZW0UPd2M\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" width=\"560\" height=\"315\" frameborder=\"0\"><\/iframe><\/p>\n<p><b>Android Things<\/b><\/p>\n<p>Originally known as Project Brillo, Google\u2019s relaunched Android Things operating system is designed to be used with IoT devices. The smart home project got its start in 2015 under the name Brillo, which was meant to provide the \u201cunderlying operating system for the internet of things.\u201d In 2016, Google revamped Brillo and relaunched the initiative as Android Things, which was likewise meant to run on products like connected speakers, security cameras, and routers. By relying on Android, the OS was supposed to be familiar to developers and easy to get started with. Google envisioned it as an operating system that would let developers code for a whole world of smart devices using the tools they already knew from coding for Android phones. At the time, that included speakers and displays, but also more experimental gadgets, like small robots, art installations, a projector, a 3D printer, and more.<\/p>\n<p>In 2018, some initial smart speakers and smart displays came out using the underlying OS, and then nothing happened. Nearly two years later, and Android Things is now on track to be shut down. Google recently announced phasing out its Android Things IoT platform. New projects will not be accepted after January 5, 2021, and the Android Things console will be turned down for all projects in 2022.<\/p>\n<p><a href=\"https:\/\/developer.android.com\/things\/\" rel=\"noopener\" target=\"_blank\">https:\/\/developer.android.com\/things\/<\/a><\/p>\n<p><b>Getting started with the Rainbow HAT<\/b><\/p>\n<p>For information on how to get started with Android Things and RainbowHAT visit the official developer site for Android Things. To put the latest Android Things image on your SD card, see the instructions <a href=\"https:\/\/developer.android.com\/things\/hardware\/raspberrypi.html\" rel=\"noopener\" target=\"_blank\">here<\/a>.<\/p>\n<p>You can find the driver and samples published in the official <a href=\"https:\/\/github.com\/androidthings\" rel=\"noopener\" target=\"_blank\">GitHub organization<\/a>.<\/p>\n<p>With Raspbian you can check the Python library <a href=\"https:\/\/github.com\/pimoroni\/rainbow-hat\" rel=\"noopener\" target=\"_blank\">here<\/a>.<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/zbghbVHx7Xc\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" width=\"560\" height=\"315\" frameborder=\"0\"><\/iframe><\/p>\n<p>The Rainbow HAT uses the same 14 segments display that I showed in the <a href=\"http:\/\/www.igfasouza.com\/blog\/raspberry-pi-helidon-14-segment-display\/\" rel=\"noopener\" target=\"_blank\">Helidon demo<\/a>.<\/p>\n<p><b>HT16K33 driver<\/b><\/p>\n<p>The  HT16K33  is  a  memory  mapping  and  multi-function  LED  controller  driver.  The  max.  Display  segment numbers in the device is 128 patterns (16 segments and 8 commons) with a 13*3 (MAX.) matrix  key  scan  circuit.  The  software  configuration  features  of  the  HT16K33  make  it  suitable  for  multiple  LED  applications  including  LED  modules  and  display  subsystems.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/rainbowhat01-1024x512.png\" alt=\"\" class=\"alignnone size-large wp-image-980\" width=\"625\" height=\"313\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/rainbowhat01-1024x512.png 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/rainbowhat01-300x150.png 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/rainbowhat01-768x384.png 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/rainbowhat01-624x312.png 624w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/rainbowhat01.png 1280w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/p>\n<p>I created a Java API to control the Rainbow Hat 14 segments display, using the HT16K33 driver.<\/p>\n<p>This is just a simple test and I create the driver just for the 14 segment display, but one idea is to complete the driver to control all other Rainbow HAT components.<br \/>\nI follow the idea of the <a href=\"https:\/\/github.com\/androidthings\/contrib-drivers\" rel=\"noopener\" target=\"_blank\">Android thing<\/a> and translate it to PI4j.<\/p>\n<p>This time I decided to do an example with Javalin.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/javalin.png\" alt=\"\" class=\"alignnone size-full wp-image-981\" width=\"460\" height=\"133\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/javalin.png 460w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/javalin-300x87.png 300w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/p>\n<p>Javalin is a very lightweight web framework for Java 8 (and later) and Kotlin. It supports modern features such as HTTP\/2, WebSocket, and asynchronous requests. Javalin is servlet-based, and its main goals are simplicity, a great developer experience, and first-class interoperability between Java and Kotlin. Javalin is built on top of Jetty, and its performance is equivalent to raw Jetty code.<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/G74cmekf-5M\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" width=\"560\" height=\"315\" frameborder=\"0\"><\/iframe><\/p>\n<h2>Idea<\/h2>\n<p>A simple Javalin example that shows a 14 segments display and control in real-time using my Java API Rainbow Hat 14 segments display. A 14 segments display &#8211; 5421AG with HT16K33 Driver<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/result01.jpg\" alt=\"\" class=\"alignnone size-full wp-image-982\" width=\"822\" height=\"1077\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/result01.jpg 822w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/result01-229x300.jpg 229w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/result01-768x1006.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/result01-782x1024.jpg 782w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/result01-624x818.jpg 624w\" sizes=\"auto, (max-width: 822px) 100vw, 822px\" \/><\/p>\n<h2>Code<\/h2>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> main<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> args<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">try<\/span> <span class=\"br0\">&#123;<\/span><br \/>\nAlphanumericDisplay segment <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> AlphanumericDisplay<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;I2C1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nsegment.<span class=\"me1\">setBrightness<\/span><span class=\"br0\">&#40;<\/span>Ht16k33.<span class=\"me1\">HT16K33_BRIGHTNESS_MAX<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nsegment.<span class=\"me1\">display<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Igor&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nsegment.<span class=\"me1\">setEnabled<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span> <span class=\"kw1\">catch<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+ioexception\"><span class=\"kw3\">IOException<\/span><\/a> <span class=\"sy0\">|<\/span> UnsupportedBusNumberException e<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\ne.<span class=\"me1\">printStackTrace<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Disclaimer \u2013 I got the CSS and JS <a href=\"http:\/\/www.3quarks.com\/en\/SegmentDisplay\/\" rel=\"noopener\" target=\"_blank\">here<\/a>.<\/p>\n<p>You can get the full code on my <a href=\"https:\/\/github.com\/igfasouza\/javalin-RainbowHat\" rel=\"noopener\" target=\"_blank\">GitHub<\/a>.<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/eHCS3B79mOU\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" width=\"560\" height=\"315\" frameborder=\"0\"><\/iframe><\/p>\n<p>Another cool thing about this idea is that some other Hats use the HT16K33 driver as well, and this means that we can reuse this code just by changing the GPIO numbers. For example the Four Letter pHat.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/four_letter_phat.jpg\" alt=\"\" class=\"alignnone size-full wp-image-988\" width=\"628\" height=\"560\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/four_letter_phat.jpg 628w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/four_letter_phat-300x268.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/02\/four_letter_phat-624x556.jpg 624w\" sizes=\"auto, (max-width: 628px) 100vw, 628px\" \/><\/p>\n<h2>Links<\/h2>\n<p><a href=\"https:\/\/javalin.io\/\" rel=\"noopener\" target=\"_blank\">https:\/\/javalin.io\/<\/a><\/p>\n<p><a href=\"https:\/\/pdf1.alldatasheet.com\/datasheet-pdf\/view\/683745\/FORYARD\/FYD-5421AX-32.html\" rel=\"noopener\" target=\"_blank\">https:\/\/pdf1.alldatasheet.com\/datasheet-pdf\/view\/683745\/FORYARD\/FYD-5421AX-32.html<\/a><\/p>\n<p><a href=\"https:\/\/pinout.xyz\/pinout\/rainbow_hat\" rel=\"noopener\" target=\"_blank\">https:\/\/pinout.xyz\/pinout\/rainbow_hat<\/a><\/p>\n<p><a href=\"https:\/\/shop.pimoroni.com\/products\/rainbow-hat-for-android-things\" rel=\"noopener\" target=\"_blank\">https:\/\/shop.pimoroni.com\/products\/rainbow-hat-for-android-things<\/a><\/p>\n<p><a href=\"https:\/\/developer.android.com\/things\" rel=\"noopener\" target=\"_blank\">https:\/\/developer.android.com\/things<\/a><\/p>\n<p><a href=\"https:\/\/shop.pimoroni.com\/products\/four-letter-phat\" rel=\"noopener\" target=\"_blank\">https:\/\/shop.pimoroni.com\/products\/four-letter-phat<\/a><\/p>\n<p><a href=\"https:\/\/cdn-shop.adafruit.com\/datasheets\/ht16K33v110.pdf\" rel=\"noopener\" target=\"_blank\">https:\/\/cdn-shop.adafruit.com\/datasheets\/ht16K33v110.pdf<\/a><br \/>\n<a href=\"https:\/\/www.adafruit.com\/product\/1427\" rel=\"noopener\" target=\"_blank\">https:\/\/www.adafruit.com\/product\/1427<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How\u2019s it going there? 2021\/02\/26 The Rainbow HAT is an add-on board for Raspberry Pi, is a collection of sensors, inputs and outputs from popular components in one board, which we can attach the 40 pin pin-out of the Pi.&hellip; <a href=\"http:\/\/www.igfasouza.com\/blog\/rainbow-hat-and-java\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":978,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[17,13],"class_list":["post-977","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-java","tag-raspberry-pi"],"_links":{"self":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/comments?post=977"}],"version-history":[{"count":8,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/977\/revisions"}],"predecessor-version":[{"id":1126,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/977\/revisions\/1126"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media\/978"}],"wp:attachment":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media?parent=977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/categories?post=977"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/tags?post=977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}