{"id":21018767,"url":"https://github.com/simonrupf/extreme-feedback-blinker","last_synced_at":"2026-05-05T22:36:29.489Z","repository":{"id":148362207,"uuid":"191431306","full_name":"simonrupf/extreme-feedback-blinker","owner":"simonrupf","description":"A simple extreme feedback device (XFD) based on an ESP8266 microcontroller and one or multiple WS2812 Neopixels, providing an HTTP GET interface over WiFi","archived":false,"fork":false,"pushed_at":"2019-09-16T17:17:33.000Z","size":898,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-20T12:33:52.772Z","etag":null,"topics":["alarm","arduino","ci-cd","cpp","esp8266","esp8266-arduino","extreme-feedback","mcu","neopixel","wifi","wifimanager","ws2812","ws2812b"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simonrupf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-11T18:46:11.000Z","updated_at":"2024-11-16T07:52:50.000Z","dependencies_parsed_at":"2023-05-19T21:15:30.461Z","dependency_job_id":null,"html_url":"https://github.com/simonrupf/extreme-feedback-blinker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonrupf%2Fextreme-feedback-blinker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonrupf%2Fextreme-feedback-blinker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonrupf%2Fextreme-feedback-blinker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonrupf%2Fextreme-feedback-blinker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simonrupf","download_url":"https://codeload.github.com/simonrupf/extreme-feedback-blinker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243447639,"owners_count":20292453,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alarm","arduino","ci-cd","cpp","esp8266","esp8266-arduino","extreme-feedback","mcu","neopixel","wifi","wifimanager","ws2812","ws2812b"],"created_at":"2024-11-19T10:27:35.703Z","updated_at":"2026-05-05T22:36:29.456Z","avatar_url":"https://github.com/simonrupf.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Extreme Feedback Blinker\n\nA simple extreme feedback device (XFD) based on an ESP8266 microcontroller and\none or multiple WS2812 Neopixels, providing an HTTP GET interface over WiFi to\nset the colors of the LEDs. The device is intended to be integrated into a CI/CD\nor monitoring system providing a simple visual representation of the current\nstatus.\n\n## Usage\n\nWhen first powered up, the WifiManager library will throw up a WLAN with SSID\n\"Blinker\" and no password protection. When connecting to it using a WiFi enabled\ndevice (notebook, smart phone, etc.), you should be redirected to a\nconfiguration website that lets you select your main WLANs SSID and store the\nWPA2 password on the microcontroller. Whenever the device is reset or powered up\n*and* doesn't find the configured WiFi or fails to connect to it, it will return\nto this configuration mode. The LED(s) should display red, blue, green as a test\npattern during this time.\n\nOnce connected to configured WLAN, the LEDs should start to shimmer in the\ndefault color. At this point in time you can connect to the device via a\nwebbrowser to see a page with multiple buttons to change the color of the LEDs.\nYou can find the IP of the device via your DHCP servers leases.\n\n![web interface, state set to \"all clear\"](https://raw.githubusercontent.com/simonrupf/extreme-feedback-blinker/master/webinterface.png)\n\nThe color is controlled via a GET parameter called \"color\" and expects the 24\nbit RGB color in hexadecimal notation (like in CSS). Click the example buttons\nto see some URLs with the codes for the labeled colors. It should be easy to\nintegrate such a URL into your CI/CD or monitoring system or you can call it in\nyour shell scripts using curl or wget.\n\nIn a production setup you would want to persist the IP address of the device and\ngive it a resolvable hostname in your DNS, so that you can replace the device\nwithout changing your CI/CDs or monitoring systems configuration. If possible,\nkeep the device on a segregated WiFi SSID apart from other users. Set up packet\nfilter rules to only allow the necessary host to access the devices port 80.\n\n## Prerequisites\n\n- Any ESP8266 module, i.e. NodeMCU or Wemos D1 mini, etc.\n- Arduino IDE setup to support your particular module\n- one or multiple WS281**2**, WS281**2b** or WS281**3** Neopixels that are 3.3 V\n  tolerant (not WS281**1**)\n- jumper wires and bread board *or* light soldering skills and equipment\n\n## Wiring\n\nExample wiring of a NodeMCU with 470 Ohm resistor on the WS2812's data line:\n\n![NodeMCU with WS2812 Neopixel](https://raw.githubusercontent.com/simonrupf/extreme-feedback-blinker/master/NodeMCU%20WS2812.png)\n\nFor a bare bones ESP-12 two pull-up/down resistors (10 kΩ) and a few capacitors\nare needed when using 5 V USB power via a linear voltage regulator:\n\n![ESP-12 with WS2812 Neopixel](https://raw.githubusercontent.com/simonrupf/extreme-feedback-blinker/master/ESP8266%20WS2812.png)\n\nCapacitor ratings are:\n- C1 100 nF (5 V to GND at voltage regulator)\n- C2 2.2 µF (3.3 V to GND at voltage regulator)\n- C3 470 µF (3.3 V to GND at ESP-12)\n- C4 100 nF (3.3 V to GND at ESP-12)\n\nResistor ratings are:\n- R3 10 kΩ (pull-down from ESP-12 GND to GPIO 15)\n- R4 10 kΩ (pull-up from ESP-12 3.3 V to enable)\n- R5 470 Ω (data line from ESP-12 GND to WS2812 data-in)\n\n## Configuration\n\nThe Arduino sketch has a number of constants at the top that can be adjusted:\n- `LED_NUM` - number of Neopixels you want to control, see note below\n- `LED_PIN` - you can use any available digital pin to drive your pixels, pin\n  14 lends itself as one of the PWM capable pins\n- `ANIMATION_DELAY` - ms to wait between each color change, decrease to speed up\n  the \"breathing\" animation of the colors\n- `ANIMATION_MINIMUM` - the darkest the LEDs go before increasing their\n  brightness, if set to 0 the LEDs will briefly turn off each cycle\n- If you have a FLORA version 1 Neopixel, you also have to change `NEO_GRB +\n  NEO_KHZ800` to `NEO_RGB + NEO_KHZ400`\n\n\u003e Note that while you may increase the number of pixels controlled, your NodeMCU\n\u003e powered via USB will probably not let you safely drive more then 5 pixels. For\n\u003e larger numbers please use an additional 3.3 V power supply, battery or similar\n\u003e and inject the power every 5 - 10 pixels or so. If using a power supply it is\n\u003e also advisable to add a large 1000 µF before the power gets injected to the\n\u003e pixels in order to prevent voltage bursts on power-up damageing your LEDs.\n\n## Limitations\n\n- By it's nature, black is displayed as the absence of light, so the LED will\n  appear off. In general dark colors will appear dimmer then brighter ones.\n- All content is served over HTTP only.\n- There is no authentication implemented, anyone with access to that network\n  can change the color.\n- The microcontroller runs single-threaded and can only handle a single request\n  at a time.\n- The configuration page used to set the password of your WPA2 secured WLAN is\n  served over an unsecured WiFi. The password is transmitted unencrypted.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonrupf%2Fextreme-feedback-blinker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonrupf%2Fextreme-feedback-blinker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonrupf%2Fextreme-feedback-blinker/lists"}