Introduction: HackerBox 0070: Radio Over Internet
With HackerBox 0070, we will configure a dual core ESP32 development kit supporting both Bluetooth and Wi-Fi communications. Work through the Bluetooth Capture the Flag challenge. Assemble the HackerBox Internet Radio Platform while exploring rotary encoder user input, infrared remote control, full-color LCD graphical user interfaces, audio decoder hardware, MicroSD memory card file storage, shared Serial Peripheral Interface (SPI) buses, and leveraging embedded web servers for application control and configuration. Uswksj Uahzwj Cryptanalysis.
HackerBoxes is the monthly subscription box for enthusiasts of electronics and computer technology - Hardware Hackers - The Dreamers of Dreams.
There is a wealth of information for current and prospective members in the HackerBoxes FAQ. Almost all of the non-technical support emails that we receive are already answered there, so we'd really appreciate it if you can take a few minutes to read the FAQ.
This Instructable contains information for getting started with HackerBox 0070. The full box contents are listed on the product page for HackerBox 0070 where the box is also available for purchase while supplies last. If you would like to automatically receive a HackerBox like this right in your mailbox each month with a $15 discount, you can subscribe at HackerBoxes.com and join the revolution!
A soldering iron, solder, and basic soldering tools are generally needed to work on the monthly HackerBox. A computer for running software tools is also required. Have a look at the HackerBox Deluxe Starter Workshop for a set of basic tools and a wide array of introductory activities and experiments.
Most importantly, you will need a sense of adventure, hacker spirit, patience, and curiosity. Building and experimenting with electronics, while very rewarding, can be tricky, challenging, and even frustrating at times. The goal is progress, not perfection. When you persist and enjoy the adventure, a great deal of satisfaction can be derived from this hobby. Take each step slowly, mind the details, and don't be afraid to ask for help.
Step 1: Biohacking With Isochronic Tones
Enjoy this DEEP FOCUS house music mix while working on HackerBox 0070. The mix creator has embedded beta wave isochronic tones intended to induce a high-focus mental state for completing complex tasks. The session starts off beating at 10Hz and ramps up to 18Hz by the 6-minute mark. It stays at 18Hz until the final 5 minutes where it ramps back down again.
Isochronic tones are regular beats of a single tone that are used alongside monaural beats and binaural beats in the process called brainwave entrainment. At its simplest level, an isochronic tone is a tone that is being turned on and off rapidly. They create sharp, distinctive pulses of sound. (Wikipedia)
Step 2: ESP-WROOM-32 Development Kit and the Arduino IDE
The ESP32 is a single chip computer. It is highly integrated featuring 2.4 GHz Wi-Fi and Bluetooth. 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.
There are several types of ESP32 Development Boards. The one used here is a variant of the "DOIT ESP32 DevKit". It is one of our favorites and has been widely tested in various maker/hacker applications. Most of the SoC's I/O pins are run out to the pin headers on both sides for easy interfacing. A USB interface chip and voltage regulator are integrated into the module. The ESP32 is supported within the Arduino ecosystem and IDE, which is a very quick and easy way to work with the ESP32.
PROGRAMMING THE DEVELOPMENT BOARD
Make these initial tests of the ESP32 board BEFORE soldering to it or connecting to any of its pins. You'll only need a microUSB cable to interface the board to your computer.
If necessary, download the Arduino IDE software and set up the ESP32 support package in the Arduino IDE.
Under tools>board in the Arduino IDE, select the "DOIT ESP32 DEVKIT V1" which is the same board used in the link above.
As an initial test, you can try the WiFiScan sketch as shown in the link, or stick with the traditional LED "blink" sketch. Either way, make sure you can compile, flash, and run a sketch on the ESP32 before connecting the module to anything else.
You may get a timeout error while attempting to program the ESP32 as if it just never makes a connection with your computer. This timeout problem can be mitigated as explained in the link above. On that page, scroll down to the "Troubleshooting" heading and read about how to use the BOOT and ENABLE buttons during the flashing process.
Step 3: Bluetooth Low Energy (BLE) Capture the Flag (CTF)
The BLE CTF is designed to teach the core concepts of Bluetooth Low Energy client and server interactions. While it is a lot of fun, it was primarily built with the intent to teach and reinforce core concepts that are needed to plunge into the world of Bluetooth hacking. After completing the CTF, you should have everything you need to start fiddling with any BLE GATT device you can find.
BLE CTF can run on the ESP-WROOM-32 Development Kit.
Spoiler Alert: BLE CTF Walkthrough
Next Level: BLE CTF Infinity - continuation of the original BLE CTF.
Step 4: Internet Radio
Like traditional broadcast radio stations, Internet radio offers news, sports, talk, and various genres of music. Many Internet radio services are associated with a corresponding traditional (terrestrial) radio station or radio network, although low start-up costs have allowed a substantial proliferation of independent Internet-only radio stations.
Streaming technology is used to distribute Internet radio, typically using a lossy audio codec. Streaming audio formats include MP3, Ogg Vorbis, Ogg Opus, Windows Media Audio, RealAudio, AAC and HE-AAC. Audio data is continuously transmitted serially (streamed) over the local network or internet in TCP or UDP packets, then reassembled at the receiver.
Popular examples of modern-day internet radio platforms and applications include TuneIn Radio, iHeartRadio, and Sirius XM. In the U.S., unlike over-the-air broadcast radio, an FCC license is not required to operate an Internet radio service. (Wikipedia)
Click here to sample over 22,000 Internet Radio Stations.
What is ROI? Silicon Valley: Radio On Internet (NSFW).
Step 5: Rotary Encoders
The exclusive HackerBox ROI (Radio Over Internet) platform starts with the supercool purple ROI PCB.
As a first step, populate only the ESP-WROOM-32 module and the Rotary Encoder
The Rotary Encoder is a position sensor used to determine the angular position of a rotating shaft. Sort of like a potentiometer, it makes for a nice control knob, but rotary encoders work in an entirely different way. This one is an EC11 Rotary Encoder with a Push-Button Switch. It's an incremental encoder, which means it reads changes in the angular displacement of the shaft instead of reading the absolute angle of the shaft.
The two output signals, A and B, are square waves that are generated when the encoder shaft rotates. The two square waves have a frequency indicating the speed of shaft rotation. The two waves are in quadrature with the phase relationship between them indicating the direction of shaft rotation.
Grab the sample sketch Rotary_Encoder_Demo.ino attached here. After loading the sketch to the board, use Tools > Serial Monitor (set to 9600 baud) to observe the sketch output. Rotate the encoder shaft and depress the shaft button.
The demo sketch is already hard-coded to the wiring of the ROI PCB with EncoderPinA, EncoderPinB, and SwitchPin assigned to I/O pins 25, 26, and 27 respectively. Note that all three pins are configured with pinMode parameter INPUT_PULLUP, which invokes pullup resisters internal to the ESP32 microcontroller. These are used instead of having to solder the three pullup resistor components on the PCB (just above the rotary encoder). As such, these three resistor components can be left unpopulated on the PCB as shown.
Step 6: Infrared Remote Control
Solder the three-pin VS1838B Infrared Receiver Module (datasheet) onto the ROI PCB as shown. The IR module can "stand up" facing the PCB edge or it can folded down against the PCB facing outward from the surface of the ROI PCB.
In the Arduino IDE, navigate to Tools > Manage Libraries to search and install the library IRremote by shirriff et al.
Grab the sketch IR_Demo.ino attached here. Open the sketch and note that I/O pin 35 is defined as the IR receive signal according to the connection on the ROI PCB. The command value decodes in the sketch correspond to the "Car MP3" infrared remote. Output from sketch is presented via the Serial Monitor at 9600 baud.
Step 7: Full Color 128x160 LCD Display
The LCD Display features 128 x 160 Full Color Pixels and it measures 1.8 inch on the diagonal. The ST7735S Driver Chip (datasheet) provides the interface from the ESP32 microcontroller using a Serial Peripheral Interface (SPI) bus.
Solder the LCD modules eight-pin header to the ROI PCB. Because the connection is only along one side of the module, it is helpful to pad the space between the LCD module and the ROI PCB with 2 or 3mm of cardboard and a bit of double-sided or rolled tape. This allows the LCD module to lie firmly parallel to the ROI PCB instead of sloping downward away from its eight-pin header.
The library called "Adafruit ST7735 and ST7789" can be found in the Arduino IDE using menu Tools > Manage Libraries. While installing, the library manager will suggest a few dependent libraries that go with that library. Allow it to install those as well.
Once that library is installed, open up Files > Examples > Adafruit ST7735 and ST7789 Library > graphicstest
The I/O pins defined within graphicstest have to be updated to match the wired connections within the ROI PCB.
Under the line:
#else // For the breakout board, you can use any 2 or 3 pins
change TFT_CS from 10 to 15
change TFT_RST from 9 to -1
change TFT_DC from 8 to 2
Under OPTION 1, Comment out the line:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
Under OPTION 2,
Uncomment the line for TFT_MOSI and change the value from 11 to 23
Uncomment the line for TFT_SCLK and change the value from 13 to 18
Finally, uncomment the line:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Compile and upload graphicstest. This will produce a colorful graphics demo on the LCD display. You might notice some rows and columns of noisy pixels at the edge of the display. These noisy pixels can be fixed by changing the TFT init function used near the top of the setup(void) function.
Comment out the line of code :
And uncomment the line a couple of lines down:
Reprogram the demo and the noisy pixels along the edges should be gone.
Step 8: Final Assembly of the HackerBox ROI Platform
There are now only two elements of the HackerBox ROI platform that remain to be installed...
MicoSD Card Module
For connecting the MicroSD module, the module must be oriented such that the GND pin is closest to the LCD display module. If the header pins are already soldered onto the MicroSD module, they are probably on the wrong side than what we would like. There are two ways to deal with this. The easiest option is to just mount the MicroSD module from the bottom of the ROI PCB. Note how that will position the GND pin next to the LCD. The trickier option is to unsolder the header pins from the MicroSD module and then resolder them onto the backside of the MicroSD module. Then, the module can be mounted onto the top of the ROI PCB (as shown) while still positioning the GND pin next to the LCD.
The MicroSD Card Module connects to the ESP32 using an SPI bus that is shared between the MicroSD, the LCD, and the VS1053. This bus uses ESP32 pins 18 for CLK, 19 for MISO, and 23 for MOSI. The chip select (CS) for the SD card is ESP32 pin 22. While the MicroSD card module appears to work 100% by itself, the shared bus can introduce some problems when the MicroSD card is used at the same time as the LCD display. Some reports imply that using a higher speed MicroSD card may mitigate these issues.
VS1053 MP3 Audio Decoder Module
The VS1053 chip (datasheet) is a monolithic MP3 / Ogg Vorbis / AAC / WMA / MIDI audio decoder based on a high performance, proprietary, low-power DSP processor core. Also integrated are working data memory, 16KB instruction RAM for user applications, and 0.5 KB of data RAM. With 8 available general-purpose IO ports and a serial port, the chip also comes with a variable sampling rate stereo ADC, a high-performance stereo DAC, and audio headphone amplifier.
The VS1053 audio module is soldered to the ROI PCB using the included 2x5 pin header. Because the header connection is in one corner of the module, it is helpful to pad the space between the module and the ROI PCB with 2 or 3mm of cardboard and a bit of double-sided or rolled tape. This allows the module to lie firmly parallel to the ROI PCB instead of sloping downward away from its header connection.
Step 9: ESP32-Radio
ESP32-Radio is an amazing Internet radio project based on the ESP32, VS1053, and an LCD screen. It can be compiled and installed through using the Arduino IDE.
Download the project from the repo linked above and start by flashing the project to the ROI platform using the ESP32-Radio.ino file which is an Arduino sketch wrapper for all of the actual project code. Also start digging into the main PDF documentation located in the doc folder.
In particular, note page 18 of the PDF document entitled Configuration. It explains how upon first launch, the ESP32-Radio code on the ESP32 is not connected to your network and the I/O pins are not defined correctly.
The ESP32 will default to acting as a Wi-Fi Access Point (AP) with the name “ESP32Radio”. You can connect to this AP from your PC using the password “ESP32Radio”. Once connected to the AP, browse to 192.168.4.1 to access the ESP32-Radio configuration screen.
From the configuration screen, various settings and preferences may be entered. The Wi-Fi SSID and password for your local network can be entered (usually near the bottom of the configuration) and the ESP32 I/O pins can be set corresponding to the wiring in the ROI PCB Schematic...
pin_enc_clk = 25 # GPIO Pin number for rotary encoder "CLK" pin_enc_dt = 26 # GPIO Pin number for rotary encoder "DT" pin_enc_sw = 27 # GPIO Pin number for rotary encoder "SW" pin_ir = 35 # GPIO Pin number for IR receiver VS1838B pin_sd_cs = 22 # GPIO Pin number for SD card "CS" pin_spi_miso = 19 # GPIO Pin number for SPI bus MISO pin_spi_mosi = 23 # GPIO Pin number for SPI bus MOSI pin_spi_sck = 18 # GPIO Pin number for SPI bus clock pin_tft_cs = 15 # GPIO Pin number for TFT "CS" pin_tft_dc = 2 # GPIO Pin number for TFT "DC" pin_vs_cs = 5 # GPIO Pin number for VS1053 "CS" pin_vs_dcs = 16 # GPIO Pin number for VS1053 "DCS" pin_vs_dreq = 4 # GPIO Pin number for VS1053 "DREQ"
Once entered, the contents of this page must be stored into the ESP32-Radio Preferences by clicking the “Save” button. Changes will take effect upon the next restart of the ESP-Radio, so click the “Restart” button.
Step 10: Spork Multitool With Carabiner
We learned about this crazy spork survival multitool from renowned hardware hacker and engineer Joe Grand (Kingpin). Joe mentioned the spork as one of his favorite tools in an interview on the Cool Tools Podcast. We figured if this crazy spork is good enough for Joe, we needed to get one for every HackerBox member.
Step 11: Dwyg Pda Lhwjap
We hope you are enjoying this month's HackerBox adventure into electronics, computer technology, and hacker culture. Reach out and share your success in the comments below or other social media. Also, remember that you can email firstname.lastname@example.org anytime if you have a question or need some help.
What's Next? Join the revolution. Live the HackLife. Get a cool box of hackable gear delivered right to your mailbox each month. Surf over to HackerBoxes.com and sign up for your monthly HackerBox subscription.