Introduction: HackerBoxes 0020: Summer Camp

Hacker Summer Camp: This month, HackerBox Hackers are working with Electronic Conference Badges while exploring embedded wireless communications and user interface functionality with the ESP32 platform.

This Instructable contains information for working with HackerBoxes #0020, which can be purchased here. If you would like to receive a box like this right in your mailbox each month, now is the time to subscribe at and join the revolution!

Topics and Learning Objectives for HackerBox 0020:

  • Explore the social history of hacker conferences and badges
  • Assemble a custom "conference badge" platform
  • Configure the Arduino IDE for use with the ESP32 processor
  • Use interrupt handlers for capacitive touch sensor inputs
  • Bit-bang melodies on a simple buzzer
  • Demonstrate color-cycling on single-wire LED pixel chains
  • Display text and graphics on a color TFT LCD Display
  • Integrate embedded functions for a wireless game of tag demo

HackerBoxes is the monthly subscription box service for DIY electronics and computer technology. We are hobbyists, makers, and experimenters. And we are the dreamers of dreams.

Step 1: HackerBoxes 0020: Box Contents

  • HackerBoxes #0020 Collectable Reference Card
  • HackerBoxes "Conference Badge" PCB
  • Components and Connector Kit for PCB
  • ESP32 DevKitC Processor Module
  • QVGA Color TFT LCD Display
  • Two-in-One LiPo Battery Manager
  • WS2812 RGB LEDs
  • Piezo Buzzer
  • MicroUSB Cable
  • Female DuPont Jumper Wires
  • Opening Tool for Mobile Devices
  • Exclusive "Hack The Planet" Silicon Wristband
  • Exclusive HackerBoxes Badge Lanyard
  • Exclusive "reverse engineer" Decal

Some other things that will be helpful:

  • Soldering iron, solder, and basic soldering tools
  • LiPo battery pack or USB power supply
  • Double-sided tape or velcro for battery pack
  • Computer with Arduino IDE

Most importantly, you will need a sense of adventure, DIY spirit, and hacker curiosity. Hardcore DIY electronics is not a trivial pursuit. It's a real challenge and when you persist and enjoy the adventure, a great deal of satisfaction can be derived from learning new technology and hopefully getting some projects working. Just take each step slowly, mind the details, and don't hesitate to ask for help.

Step 2: Hacker Summer Camp 2017

Hacker Summer Camp is a term of endearment for the collective activities of one week each summer when tens of thousands of us descend upon Las Vegas, Nevada. These activities center around three conventions: DEF CON, Black Hat, and BSides Las Vegas. For a flavor of the awesomeness, check out the feature length DEF CON Documentary Film. All around Summer Camp 2017, keep an eye out for the BitHead logo on the back of our shirts and say hello. Here are the details for 2017:

Tuscany Suites
Free Admission
Approximately 3,000 Attendees Expected
Keep an eye out for HackerBoxes in the big Chill-Out Room. We are an auction/raffle sponsor, so Lady Luck may come bearing Elite DIY Electronics. Always split Aces and Eights.

Mandalay Bay
Over 15,000 Attendees Expected
We will be out surfing "The Bay" so hit us up for some free commemorative Summer Camp swag.

JULY 27-30:DEF CON 25
Caesars Palace
Over 20,000 Attendees Expected
Here are some events to put on your list:

  • Thursday 8pm: HackerBoxes Meetup - Starbucks inside Caesar’s Palace
  • Friday - Sunday: Visit us at the HackerBoxes table in the Vendor area
  • Saturday 1pm: Attend the "Hardware Hacking: Old Sk00l and New Sk00l" talk by hwbxr (founder of HackerBoxes) in the Village Talks Room just outside the contests area


Step 3: DEF CON Badges

Over its 25 year history, DEF CON has become known for awesome badges.

There are the official badges that are purchased (or earned) and are worn to access the con itself. There is also an entire world of custom unofficial badges.

Step 4: HackerBoxes Badge Platform

Even if you are not going to DEF CON, your summer will be complete with this cool wearable platform of hackable electronics. Build it, customize it, wear it, display it... endless summer fun.

The HackerBoxes Badge PCB has been designed to support a variety of components and modules. It can be worn on a lanyard, used as a handheld, mounted on the wall, or deployed pretty much anywhere in countless wireless and colorful applications.


  • ESP32 Dual Core 160MHz Processor
  • 2.2 inch QVGA Color TFT LCD Display
  • WiFi 802.11 b/g/n/d/e/i/k/r
  • Bluetooth v4.2 BR/EDR and BLE
  • Five Touch Pad Inputs
  • Five RGB WS2812 LEDs
  • Piezo Buzzer
  • LiPo Battery Charger and Manager

Step 5: Assembling the Platform

The PCB and components can be assembled with a few options depending upon how you would like to use them. Read through this step and also the information about the power supply before deciding on the details of your build and beginning assembly.

Assembly Order:

  • The WS2812 RGB LEDs should be soldered first since they are surface mount devices and the leads are easier to reach without other components in the way.
  • The battery leads should be soldered in from the read of the PCB (solder on the front of the PCB) prior to attaching the battery management module, which may block the battery leads a bit.
  • The electrolytic capacitor should be mounted before the LCD module.
  • The buzzer should be mounted after the LCD module.
  • All other components may be assembled in pretty much any order.

Component Polarities:

  • The WS2812 RGB LEDs have a diagonal notch on one corner to match up with the same marking on the PCB silkscreen.
  • The electrolytic capacitor has a negative (-) stripe above the negative lead. The PCB has a positive (+) marking for the other lead.
  • The ceramic capacitors are not polarized.
  • The buzzer has a positive (+) marking to match up with the same marking on the PCB.
  • The LiPo battery holes have a positive (+) marking on one side - this is for the red wire.

WITHOUT Female Header Sockets:

  • The female headers can be used to make sockets for the ESP32 and the LCD so that the modules can be removed for debugging or reuse. However, the sockets make the assembled PCB much thicker, so they are definitely not the best option for wearable or handheld applications.
  • Mount the battery manager module first.
  • The ESP32 board can be spaced a couple of millimeters up off of the PCB to ensure that the antenna portion clears over the battery manager module. Put something to hold it into place (or just use fingers) while starting the soldering. After that, the solder will hold it in its (very slightly) elevated position.
  • Also, to create more space, the Battery Manager module can be mounted flush against the PCB using only header pins (without the black plastic spacer). Put the pins in from behind (with the black spacer on the rear of the PCB), solder the pins to the PCB (from the top), stack on the module, solder the pins to the module, snip off the plastic spacer and any portions of the pins on both side. Now it should be very low profile.

WITH Female Header Sockets:

  • To cut the female headers to length, just use small wire cutters to snip through the hole ONE PAST where you want the socket strip to end. The pin/hole that you cut through is sacrificed.

Minimal Build Considerations:

  • You may wish to focus on making a lighter and thinner build (to wear it).
  • As mentioned above, the female sockets should be avoided.
  • All five of the capacitors can probably be left off. There is reasonable decoupling on the modules.

Access to SD Slot on LCD Module:

  • We do not use the SD slot in any examples here, but you need to make some accommodations if you plan to use it.
  • The ceramic capacitors need to be left off, or mounted on the rear of the PCB, or replaced with chip capacitors of the same value (100nF).
  • The LCD module should be spaced a couple of millimeters up off of the PCB to clear SD card slot access over the WS2812 LEDs.
  • A shorty MicroSD to SD adapter can be used to prevent a flash card from extending out from behind the LCD module and obstructing the RGB LEDs.

Stabbies and LiPo Battery Mounting:

  • After soldering is complete, there will be a lot of "stabbies" or pin leads protruding from the bottom side of the PCB. These should be trimmed down with small wire cutters (while wearing safety glasses, of course).
  • The LiPo pack can be attached to the back of the board using thick double sided tape or velcro strips. The tape or strips should be thick enough to protect the battery pack (and your shirt) from the remaining stabbie stumps. If not, a bit of card stock or thin plastic can provide a nice mechanical barrier between the back of the PCB and the battery or anything else that the PCB might rub against.

Step 6: Power Supply

The Badge can be powered by either a LiPo (lithium polymer) Battery Pack or by USB. The power supply mode is selected by the jumper block.


  • Switch jumper block to USB side
  • Unplug USB cable so no power is applied


  • Switch jumper block to USB side
  • Plug MicroUSB cable into ESP32 module
  • Power other end of USB cable with a computer, hub, USB wall supply, or mobile power pack
  • The battery manager will automatically charge the LiPo Battery (if one is connected)


  • Remove MicroUSB cable so no power is applied
  • Switch jumper block to BAT side
  • Battery manager discharges battery and boosts it up to 5V

It is suggested not to use a socket for the battery manager. Solder it (using header pins) directly to the PCB. This LiPo battery is a good example of the type to use. They are a little large, but very thin. They fit perfectly on the back of the PCB and they provide many hours of operation between charges.

BATTERY WARNING: Always be aware when charging or discharging LiPo batteries. In rare instances, they can get warm, swell up, or even burst. Do not leave them unattended. These are the type of batteries in mobile phones, tablet computers, and laptops, so they are generally safe and trustworthy for a long time, but it is always better to be safe than sorry.

Step 7: ESP32 and Arduino IDE

The ESP32 is a single chip 2.4 GHz Wi-Fi and Bluetooth combo solution. It is highly integrated, requiring less than ten external components. The ESP32 integrates the antenna switch, RF balun, power amplifier, low noise receive amplifier, filters, and power management modules. As such, the entire solution occupies minimal Printed Circuit Board (PCB) area.

The ESP32DevKitC is a small ESP32-based development board produced by Espressif. Most of the I/O pins are led out to the pin headers on both sides for easy interfacing. A USB interface chip and voltage regulator are integrated into the module.

While the ESP IDF (link below) can be used to directly program and flash the ESP32, support for the ESP32 within the Arduino ecosystem and IDE has been continuously evolving. This Arduino route is a very quick and easy way to work with the ESP32.

The Arduino ESP32 github repository includes installation instructions for LInux, OSX, and Windows. Click to that link and follow the instructions that correspond with the operating system on your computer.

More Resources:
ESP32 Datasheet
ESP32DevKitC Schematic
ESP32 Technical Reference Manual
ESP IDF (IoT Development Framework) Programming Guide

Step 8: Touch Sensor Inputs

The Badge PCB includes five metal pads to serve as user input buttons. These pads are attached to the ESP32 I/O pins numbered 12, 13, 14, 15, and 27. These I/O pins each support touch sensor input.

The attached touch_demo sketch shows how to set up interrupt handling functions to be called whenever one of the touch sensors is triggered. Use the Arduino IDE to compile and flash the demo onto the ESP32DevKitC module. Once flashed, open the Arduino IDE serial monitor, and touch the sensor pads.

Step 9: Buzzer Output

The Badge PCB has the Piezo Buzzer pads wired to ESP32 I/O pin number 18.

The attached buzzer_demo sketch shows how to bit-bang some very retro sounding tones on the simple buzzer.

Step 10: NeoPixel RGB LEDs

The Badge PCB has landing pads for five NeoPixel RGB LEDs (WS2812). They are wired in a chain off of ESP32 I/O pin number 5.
The attached rgbled_demo sketch shows how set and cycle the colors of the five RGB LEDs. The demo uses the popular Adafruit NeoPixel Library, so be sure to have that installed and updated within your Arduino IDE beforehand.

Step 11: Color TFT LCD Display

The Badge Graphical Display is provided by a 2.2 inch TFT LCD Module. The display has 320x240 full color pixels (QVGA). The module is 3.3V compatible and has a 4-Wire SPI Serial Interface to the ILI9340C controller chip.

This MartyMacGyver demo using the Adafruit ILI9341 driver can be loaded to show some really nice graphics features. Just be sure to change the pin numbers to match those on the Badge PCB by pasting this block over the stock pin assignments:

// TFT Display Pins<br>#define TFT_CS    19
#define TFT_DC    22
#define TFT_MOSI  23
#define TFT_CLK   26
#define TFT_RST   21
#define TFT_MISO  25

Step 12: Badge Demonstration Firmware - Wireless Tag

Combining all of these functions together, along with some of the wireless communication features of the ESP32, can make for a very cool, interactive badge including a "wireless tag" mode.

Using this sketch, put your handle into the following line after the underscore:
char ssid[]="HackerBoxer_L33tHaX0r";

Your handle text is transmitted via 802.11 as SSID broadcast packets for all to see. Any detected wireless network SSIDs are listed on the display. Detected SSIDs starting with the text "HackerBoxer_" are assumed to be from other such badges and are displayed as IDs that have been tagged.

If two or more such badges encounter each other (for example, at DEF CON), they will display lists of handles from all of the other badges they have tagged. Of course, the badges play sounds and cycle the LED colors along the way. The single touch pad on the right is used to toggle the mute setting on the audio.

HB020_Badge_B (added July 16, 2017)

Rev. B has some UI and aesthetic improvements. Inter-badge comms still compatible with Rev. A. Here is a change log:

  • replaced beep() with post from sconklin
  • added BitHead graphic to LCD functionality
  • clean up display text a little
  • default to muted state
  • display mute indicator on upper left of screen
  • tighten timing loops for more "entertainment"

This is the version we will be demoing at Summer Camp, so please feel free to edit in your handle into the code and load this version onto your badge. Come by the DC25 Vendor table, say hello, and tag our badges!

Non-Badge Applications for Platform
This ESP32 + QVGA platform can support packet sniffing, games, and various other challenges. An interesting application for an office (or other environment where the same people are around day after day) would be to gather packets and then associate the MAC addresses (such as from mobile phones) with the names of their owners. Then, the system could greet your friends and coworkers by displaying their name whenever their MAC address is detected. Unique sound effects and LED modes could even be associated with different identified MAC addresses.

Step 13: Opening Mobile Phones and Tablet Computers

This might be the perfect tool for getting inside mobile devices... "THE OPENING TOOL" from Unlimited Innovation.

Step 14: Hack the Planet

Thank you for joining our adventures into the world of Electronic Conference Badges while exploring embedded wireless communications and user interface functionality. If you have enjoyed this Instrucable and would like to have a box of electronics and computer tech projects like this delivered right to your mailbox each month, please join us by SUBSCRIBING HERE.

Reach out and share your success in the comments below and/or on the HackerBoxes Facebook page. Certainly let us know if you have any questions or need some help with anything. Thank you for being part of HackerBoxes. Please keep your suggestions and feedback coming. HackerBoxes are YOUR boxes. Let's make something great!


Dragonmaster53 made it! (author)2017-07-23

Hi guys I was wondering if there were any videos for these boxes showing how to do all this stuff. I love messing around with electronics but have never soldered a board together or anything. I would really like to be good at this stuff. If anyone could help me out that would be great. I have boxes 19 and 20 plus the starter kit. Thank you!! If u would like to contact through email my email is

MartinW114 made it! (author)2017-07-23

how do i get it to scan all ssid? I am terrible with code

TylerE33 made it! (author)2017-07-22
TylerE33 made it! (author)2017-07-20

I made a game of snake to run on the badge. The code isn't pretty, but it works!

There are a couple bugs, but nothing game-breaky.

If you want the code, I put it on github:

MoahM made it! (author)MoahM2017-07-21

Way cool man! Nice work!

r0mbas1c made it! (author)2017-07-17

any ideas on how to capture wifi probe packets with this thing? been attempting to find libraries, etc to help capture a probe packet, strip the SSID, and compare that SSID against a list. Everything is working, except the most important part - grabbing the probe. Any ideas?

MoahM made it! (author)MoahM2017-07-17
r0mbas1c made it! (author)r0mbas1c2017-07-18

Thanks @MoahM -- not enough brain power to digest that page & code quickly, but that page led me to .... seems to have a full suite of utilities for this chip.

My add-on project for this is to receive client probe packets and check the SSID being probed against a list of SSIDs I built from Basically (proof of concept) - I used API to scrape the closest 500 SSIDs to a few geolocations of federal law enforcement headquarters (the nearby coffee shops, etc) and put those SSIDs into a list. In the spirit of the "Find a Fed" game at DEFCON, the theory is that if my code matches an SSID probe to one of the unique SSIDs on my list, I will have "found a fed" and the NeoPixels will flash blue & red and the offending SSID and agency will be displayed.

Works great as long as I am just scanning active SSIDs, but haven't been able to figure out how to capture the probes from clients.

MoahM made it! (author)MoahM2017-07-19

This is awesome!!!!! Light up a branch on my github and push your code up! I'd love to include it in my iteration of the game firmware.

r0mbas1c made it! (author)r0mbas1c2017-07-19

Will do --- but the code isn't done quite yet! Right now it will only pick up SSID beacons, so the "Found a Fed" will only fire off if the same SSID name from is found by the board.... meaning it would be most likely one of the mobile access points that was picked up in the vicinity of one of those headquarters, and that person is at the con with the SSID running. That is why I wanted to include SSID it would fire off from client devices that had connected to those SSIDs -- a MUCH bigger pool of people. I unfortunately won't have time between now and BSidesLV to get that code figured out.... but I will push to github tonight and you can give it a crack

MoahM made it! (author)MoahM2017-07-20

If we can't figure out how to get the client probes via promiscuous mode, we might be able to ID a fed by broadcasting the SSIDs(with the same encryption type,etc) from those places ourselves, then triggering on when a station tries to join. The thought being that only handsets that have those SSIDs saved in their connection list will try to join. Since they'd be protected networks, you wouldn't get all the folks set to auto-join opens. A little more effort, but might work. Does that make sense?

r0mbas1c made it! (author)r0mbas1c2017-07-20

Makes sense, but how do you get the little ESP32 to replicate 500+ access points simultaneously, and only for a short duration? I mucked up the code somehow last night while pulling in the rest of the agencies' data, so I still need to clean that up a bit....then I will release it. It is nothing fancy and is version 0.1 .... so it is likely pretty inefficient, but I will tweak it a bit over time.

MoahM made it! (author)MoahM2017-07-20

Maybe something like this? Completely untested, but the logic should be straight.

root ="/ourlistofAPs.txt")

if (root) {

while (root.available()) {

//* read the file and set the AP name to SSID from list

WiFi.softAP(, NULL, 1, 0, 1);

delay(10000); // or longer





SlackerX made it! (author)2017-07-19

Thank you guys for an awesome project! First HackerBox project and I'm stoked! Great kit and easy to follow directions. Will be subscribing, can't wait to see what's instore for the next box. Thank you for your hard work in creating such a cool and fun project!

JeffG187 made it! (author)2017-07-09

Has anyone gotten the sd card reader / writer to work? I've been trying since the box arrived and can't seem to figure it out.

MoahM made it! (author)MoahM2017-07-17

I got it!!!

Github is here

Checkout the repo, the Defcon25Game project has working code to access the SD. Cruise the readme and install the lib called out.

@Hackerboxes : I've framed a little game for defcon and started work on it. Added some details and TODO's to my repo above. I'd love some support in getting the word out and having others join in on coding this up. I'd love your thoughts. If you can bless the intention, and add your feedback/support, it would be awesome. Maybe even do a little communication to the world. I know if we band together, we can have something cool built by Defcon.

JeffG187 made it! (author)JeffG1872017-07-17

HAHAHAHA oh give me a break. SD.Begin with custom pin definitions!!! HOW did I not notice that?! Ughhhh.

Thank you so much, that's awesome! I'll try to hop in and contribute something to your report this week! I'm excited to give it a try!

MoahM made it! (author)MoahM2017-07-17

Pretty sure theres some other secret sauce in that alternate lib too, but haven't checked yet.

JeffG187 made it! (author)JeffG1872017-07-17

I'm noticing that I have to have the flash button pressed on my badge to make the sd card stuff work. Have you found a way around that?! ( does the same with your code and the mysd examples. )

MoahM made it! (author)MoahM2017-07-18

There are two tiny pads on the back of the TFT labeled "j1", drop a blob of solder across them.

JeffG187 made it! (author)JeffG1872017-07-18

Really?! How did you figure that out?
Nice work, and thank you so much!!!

MoahM made it! (author)MoahM2017-07-19

Ah ha! Here's where I got my inspiration from. Folks are replacing resistors, being all proper and gentle. Then this guy comes in with the solderblob job. Anyhoo, your milage may vary, but it works for me.

MoahM made it! (author)MoahM2017-07-19

I found the jumper tip on one of the pages I came across researching the TFT for SD support. And held out on actually jumping it till I was frustrated enough to not care if I broke it. But once I did, it worked. Hackerboxes knows better than me though. It's their kit/design. I'm just a hack trying to bend it to my will. Implement at your own risk.

HackerBoxes made it! (author)HackerBoxes2017-07-18

From what I understand, shorting J1 on the LCD module bypasses the voltage regulator that converts the incoming 5V to the 3.3V needed by the LCD. J1 is intended to be shorted if you are providing 3.3V to the module to begin with. Shorting J1 is probably not a great idea if the supply to the module is 5V.

JeffG187 made it! (author)JeffG1872017-07-11


( I think ) I see that there is a way to change VSPI pins, but I don't see a way to do it from within Arduino code. This must be the intended usage as the pins you chose for the SD card do not seem to correlate to any particular set of SPI pins, including the port the TFT display is on. So what did you have in mind for the usage given this choice of pins? If it's setting up custom pins for one of the SPI ports, is this even possible without going lower level then the typical Arduino language?

ewagnerjr2000 made it! (author)ewagnerjr20002017-07-18

Jeff, it looks like the pins are hard set based on the schematics. It would have been faster to use the hardware spi.

JeffG187 made it! (author)JeffG1872017-07-18

Yeah, unfortunately it kinda "is what it is" as it's baked into the board. I may try just soldering on what I need to permanently do what the 'flash' button is doing when you press it. I hate that idea, but if it doesn't cause more problems I'll take it.

0n10nsman made it! (author)2017-07-18

Completed the build last night and have 3 of the 5 LED's working. Initially it was only the first, but applying a very light pressure with some tweezers and carefully / quickly heating the solder to the second LED, two more fired up. Going to investigate the remaining two tonight. This is a SUPER cool Hackerbox and I can't wait to see what folks have done in Vegas next week.

I'm currently working on simulating RED BOX tones with the piezo buzzer triggered by the touch sensors.

If someone would like to give it a shot, here's what I'm starting with.

1700 Hz and 2200 Hz tones together. One 66 ms tone represents a nickel. A set of 2 66 ms tones separated by 66 ms intervals represent a dime, and a quarter is represented by a set of 5 33 ms tones with 33 ms pauses.

Also, some BlueBox or GreenBox tones might be fun. I'm experienced at understanding / adapting Arduino code, but not awesome at writing it, so I'm looking forward to this little challenge.

Earthwormchris made it! (author)2017-07-09

For some reason I had to change the line

WiFi.softAP(ssid, NULL, 1, 0, 1);


WiFi.softAP(ssid, NULL, 1, 0);

No idea why that line was like that in the code, but it works for me now.

0n10nsman made it! (author)0n10nsman2017-07-18

Earthwormchris. Many thanks! I set up a fresh install of the Arduino IDE on a windows box yesterday, and after several updates to all the things, I was getting a compile error with Wifi.soft..... That tweak got it working right quick. Cheers!

(and thanks Hackerboxes. Good to know if I run updates in the IDE and it breaks things, chances are I can tweak it back to NULL, 1, 0, 1 FTW)

HackerBoxes made it! (author)HackerBoxes2017-07-10

You might be using an older library.

chris25b made it! (author)2017-07-05

I made some revisions to the hardware, switch not jumper, big cap hidden under display and of course the ring of neopixels. Firmware revisions; different display patterns to accommodate the neopixel ring, and adding a splash screen that pops up twice duning the main loop.

Astalon made it! (author)Astalon2017-07-16

This is Awesome !!! Do you mind sharing the code for the Screen Graphic?

chris25b made it! (author)chris25b2017-07-16 here's the firmware I'm running.

Astalon made it! (author)Astalon2017-07-16

Thank you VERY Much Chris... I have never messed with Arduino boards before and I am not a programmer... I have always been the server and Infrastructure, and network guy, but never really got into programing..... I have been learning SO MUCH just by looking at other peoples code and examples and I UNDERSTAND What is going on :) Not sure how you converted the Bitmap to Hex.... did you just right click on the file and copy and paste the binary? or is there a conversion process? Again THANK YOU for the help... Every example I take a lok at gives me more Ideas and things to try!!!!

chris25b made it! (author)chris25b2017-07-17

If you go to tutorial on the adafruit GFX library, there's a link that will generate the array for you from a .bmp file. The trick is you have to use Windows Paint for it to work. Even though other software says it saved it as a .bmp - im looking at you adobe.

seaprimate made it! (author)seaprimate2017-07-07

Thanks for the switch tip. It's such an obvious revision, yet I still overlooked it. Desoldered the jumper pins, then added a spdt switch for much easier use. Thanks!

chris25b made it! (author)chris25b2017-07-07

YW, it helped that I had a bag of them on my desk, since I needed one for another project. Otherwise I may have overlooked it as well. ;)

chris25b made it! (author)chris25b2017-07-05

link for video of full loop

HackerBoxes made it! (author)2017-07-16

PLEASE NOTE: We just made an edit to Step 12 to add a Rev. B of the Badge Firmware.


replaced beep() with code posted by sconklin

added BitHead graphic to LCD functionality

clean up display text a little

default to muted state

display mute indicator on upper left of screen

tighten timing loops for more "entertainment"

HackerBoxes made it! (author)2017-07-16

PLEASE NOTE: We just made an edit to Step 2 to add specific event details of interest to those heading out to Summer Camp in Las Vegas next week. We hope to see you there!

rob_hunt made it! (author)2017-07-16

I don't get to go to Def Con this year, partly because it conflicts with CA Extreme ( which I am going to. Since CA Extreme is a gaming conference, I thought I'd get this running on the badge :

Now if I can just figure out how to flip the display... And get the controls to work.

chris25b made it! (author)2017-07-06

found bug in the HB020_Badge_A sketch, I set my Mobile hotspot to act like a badge by giving it the SSID of HackerBoxer_T3chG1rlMN, and it showed up just fine. But when I turned the hotspot off, to replicate being out of range, it still showed as a tagged ID until I reset the badge.

Racer1TN made it! (author)Racer1TN2017-07-12

Isn't the idea to capture the Hacker SSID's from other hacker boxes? If matching scanned SSID's got erased each loop, you would not capture a logging essentially. To add complexity, it would be a good loop to avoid duplicates already logged.

DavidM903 made it! (author)DavidM9032017-07-12

Agreed....from reading the code, that seems to be the intended output - only resets after the 14th HackerBoxer_ is found

sconklin made it! (author)2017-07-06

Great fun! The beep() function wasn't generating tones correctly in either the buzzer_demo or the HB020_Badge_A sketches. Here's a replacement function that fixes that:

void beep(int tone, int duration)


int noteDelay = int(500000.0/tone);

for (float i = 0.0; i < float(duration/1000.0); i += (1.0/tone))


digitalWrite(buzzerPin, HIGH);


digitalWrite(buzzerPin, LOW);





rob_hunt made it! (author)rob_hunt2017-07-09

I swapped in your beep code and yeah, it does sound better!

Building on that, I added the underworld theme from super mario bros :

// -------------------------------------------------------------------

void UnderworldTheme() {

const int measure = 1000;

const int n8 = measure / 8;

const int n4 = measure / 4;

const int n3 = n4 / 3;

for (int i = 0; i < 2; i++) {

beep(c4, n8);

beep(cH, n8);

beep(a3, n8);

beep(a, n8);

beep(aS3, n8);

beep(aS, n8);

vTaskDelay(1200 / portTICK_RATE_MS);


for (int i = 0; i < 2; i++) {

beep(f3, n8);

beep(f, n8);

beep(d3, n8);

beep(d, n8);

beep(e3, n8);

beep(dS, n8);

if (i < 1) {

vTaskDelay((n4 * 2) / portTICK_RATE_MS);


vTaskDelay(n4 / portTICK_RATE_MS);


beep(dS, n3);

beep(d, n3);

beep(cS4, n3);

beep(c4, n8);

vTaskDelay(n8 / portTICK_RATE_MS);

beep(dS, n8);

vTaskDelay(n8 / portTICK_RATE_MS);

beep(d, n8);

vTaskDelay(n8 / portTICK_RATE_MS);

beep(a, n8);

vTaskDelay(n8 / portTICK_RATE_MS);

beep(g3, n8);

vTaskDelay(n8 / portTICK_RATE_MS);

beep(cS4, n8);

vTaskDelay(n8 / portTICK_RATE_MS);

beep(c4, n3);

beep(fS, n3);

beep(f, n3);

beep(e, n3);

beep(aS, n3);

beep(a, n3);

beep(gS, n3);

vTaskDelay(n3 / portTICK_RATE_MS);

beep(dS, n3);

vTaskDelay(n3 / portTICK_RATE_MS);

beep(b3, n3);

vTaskDelay(n3 / portTICK_RATE_MS);

beep(aS3, n3);

vTaskDelay(n3 / portTICK_RATE_MS);

beep(a3, n3);

vTaskDelay(n3 / portTICK_RATE_MS);

beep(g3, n3);


// -------------------------------------------------------------------

Oh, I had to fill in some missing notes in the constants section too :

// -------------------------------------------------------------------

// Audio Buzzer Values

const int buzzerPin = 18;

const int c3 = 131;

const int d3 = 147;

const int e3 = 165;

const int f3 = 175;

const int g3 = 196;

const int a3 = 220;

const int aS3 = 233;

const int b3 = 247;

const int c4 = 262;

const int cS4 = 277;

const int d = 294;

const int dS = 311;

const int e = 330;

const int f = 349;

const int fS = 370;

const int gS = 415;

const int a = 440;

const int aS = 466;

const int b = 494;

const int cH = 523;

const int eH = 659;

const int fH = 698;

const int e6 = 1319;

const int g6 = 1568;

const int a6 = 1760;

const int as6 = 1865;

const int b6 = 1976;

const int c7 = 2093;

const int d7 = 2349;

const int e7 = 2637;

const int f7 = 2794;

const int g7 = 3136;

// -------------------------------------------------------------------

Racer1TN made it! (author)Racer1TN2017-07-12

I like the Underworld theme, added it in and got it to work. Now if we just had more...Donkey Kong, Defender, Galaga or others.....

ewagnerjr2000 made it! (author)2017-07-12

Does the lipo charger have a spec? How are the light suppose to blink? I am getting charged but want to make sure there aren't any shorts.


Racer1TN made it! (author)2017-07-10

Assembly was a breeze. Setting up the IDE took me a couple of days to debug. Esspecially after working all weekend...Got it working tonight. This is pretty cool! Only made it thru the first three sketches. Looking forward to playing more tomorrow!