Last year, my friend Mike tipped me off to a new Bluetooth product that had been released by Adafruit. The tiny EZ-Key device…
…was a $19.95 “ready to go” switches-to-Bluetooth board. All you had to do was feed it power (3V-16V) and then hook switches (say, joysticks or arcade buttons) to the 12 input pins and ground and you were set. Power it up, hold down the pair button for a few moments, and let it connect to your computer. After that, any press of those switches would send a preprogrammed character. By default, they were:
- #0 – Up Arrow
- #1 – Down Arrow
- #2 – Left Arrow
- #3 – Right Arrow
- #4 – Return
- #5 – Space
- #6 – the number ‘1’
- #7 – the number ‘2’
- #8 – lowercase ‘w’
- #9 – lowercase ‘a’
- #10 – lowercase ‘s’
- #11 – lowercase ‘d’
You can find a full tutorial here:
And the online user manual (with pinouts, wiring examples, etc.) here:
If the default keys are not good for you, the device can be reprogrammed to send a different single character when a switch is pressed. This seems to involve using an adapter to hook the EZ-Key’s TX/RX pins to the PC, then running a special program that sends sequences to the EZ-Key to remap it.
The device can also be remapped over Bluetooth, which sounds like an easier option since you probably have Bluetooth (if you are using a Bluetooth adapter like this) and probably don’t have a TTL-to-Serial USB adapter. (Okay, some of you reading this probably do, but I don’t…) ((Actually, maybe I do. That may be the thing I use to program BASIC Stamps, though I didn’t know that at the time I bought it.)) (((But I digress…)))
For simple projects, the EZ-Key and a power supply is all you would need, provided whatever you are hooking to (like the MAME emulator) uses simple key presses. One emulator I have on my Mac uses the CTRL key for the FIRE button, so I would at the very least have to remap the EZ-Key to send a CTRL press.
For things like the iCade, which uses dual keypresses (one key for “press button down” and another for “release button”), this will not work. The EZ-Key only does single key presses.
Fortunately, the EZ-Key can also act as a Bluetooth gateway. You can hook it up to a serial port on an Arduino (or Teensy, or anything else with a UART) and write data to it at 9600 baud. This data is either sent out as a simple key down/key up press, or you can do more advanced things like send modifier keys (CTR+ALT+DEL) or even mouse movement and button clicks.
Using four wires, I connected an Arduino up to the EZ-Key:
I was using the Software Serial Arduino library to turn pins 10 and 11 in to TX and RX:
This let me open the EZ-Key just like I would open the console and read/write data to it:
#define RX_PIN 10
#define TX_PIN 11
// Initialize the Software Serial port.
SoftwareSerial EZKey(RX_PIN, TX_PIN); // RX, TX
// We talk to the EZ-Key at 9600 baud.
EZKey.begin(9600);
EZKey.write('x'); // send 'x'
It would be very easy to make a sketch that read data through the Arduino serial console port, and sent that out via Bluetooth:
#include <SoftwareSerial.h>
#define RX_PIN 10
#define TX_PIN 11
// Initialize the Software Serial port.
SoftwareSerial EZKey(RX_PIN, TX_PIN); // RX, TX
void setup()
{
Serial.begin(9600);
// We talk to the EZ-Key at 9600 baud.
EZKey.begin(9600);
}
void loop()
{
char ch;
// If data is available from the USB serial console...
while(Serial.available()>0)
{
// Read a character from the Serial console.
ch = Serial.read();
// If nothing was read, it returns -1...
if (ch>=0)
{
// Write that character out to the EZKey via UART.
EZKey.write(ch);
// Echo back to the serial console.
Serial.write(ch);
}
}
}
I paired the EZ-Key to my iPad, then opened the Serial Monitor on the Arduino IDE and was able to type things there and see them show up on the iPad (inside of Notepad, or anything else that accepted keyboard input).
The next step, for me, will be to integrate EZ-Key support in my iCade interface. Right now, I support reading digital inputs and writing out iCade commands as USB keyboard presses. With just a few lines of code, I should be able to expand this to use the EZ-Key and support Bluetooth as well.
Eventually, I will roll this in to my experimental USB Host Shield version, so it can also read USB joysticks (rather than just digital input switches) and output them as iCade USB keyboard or Bluetooth messages.
My EZ-Key sample program is now on GitHub:
Stay tuned…
Pingback: Adafruit EZ-Key Remapper | Sub-Etha Software
Hi, I would like to make a Bluetooth hid gamepad with analog sticks and I read in my topic (http://forum.pjrc.com/threads/25224-Bluetooth-hid-game-controller-with-Teensy-3-1?p=43922#post43922) that you were making a similar project. Have you finally found a solution?
Because I’m still struggling.
The EZ-Key will work for keyboard control like MAME, but it does not act like a Bluetooth joystick. I just found out about another $20 bluetooth module which can appear as a joystick, and will post links when I can get a moment,
Oops. Sparkfun. https://www.sparkfun.com/products/11601