Consider the world of computers, versus to the tools and components such as Arduino boards, and the wide variety of microcontrollers available to tech-savvy makers. Although there are many differences you might point out, as explained in the Binho “what is a host adapter” page, computers communicate with protocols such as PCIe, SATA, SMBus, and USB, while microcontrollers and the like use SPI, I2C, 1-WIRE, SWI, etc. for information exchange.
This works well most of the time, but what if you get a brand new I2C OLED display, and would like to start using it immediately? You’ll need to find an Arduino and let it work as the control middleman. In other words, you commands go from a computer, to USB connection, to the FTDI to the chip. and finally to your I2C peripheral. While most of this happens behind the scenes, you will need to write or copy a program to your Arduino to transfer information.
What if you want to turn I/O on and off for testing purposes, or read digital/analog signals? Again, it’s a similar procedure, likely with some serial monitor interfacing thrown in. Not extremely difficult, but time consuming, and annoying, as you’ll need to reinvent the wheel over and over.
If that is something that’s been bugging you, Binho (pronounced bee-nyah) aims to fill this need as a multi-protocol USB host adapter. It plugs in to your computer over USB, and can interface with devices that use SPI, I2C, 1-WIRE and SWI. It also features accommodations for digital input, analog input, digital output, and PWM signals.
The device runs on a Microchip SAM D21E Arm Cortex-M0+, and is designed to be robust and easy to use.
Binho sent me one of their units over to try out, complete with a few of their open-source adapters. Physically, it’s fairly small, with a nice anodized aluminum shell, and it has a USB-C connector, meaning you won’t have to reverse it 3 times to get it to plug in. On the other side is the “business end” of the device, with a ribbon cable that plugs into your device.
With any new technology, you expect there to be a bit of a learning curve, but as it turns out, perhaps the hardest thing about getting it to do a LED blink “hello world” with one of its 5 outputs was soldering the headers to the adapter. I then plugged it into a breadboard and attached an LED to ground and IO0—I/O zero that is—though a resistor. I then plugged the USB port into my computer, which was pretty much it.
Actually controlling the device through the GUI was fairly simple as well. QuickStart instructions for the Binho GUI are found here, and there are versions for Windows, MaxOS, and Linux. The only small hiccup for me was that “Windows protected [my] PC,” since the Alpha version of the software isn’t listed with a codesigning certificate, a warning which I easily bypassed, and something that will be fixed at a later date.
From there, you simply select the device’s COM port, and select between Device, IO, SPI, and I2C in the interface tabs. Under the IO tab there are a number of options, including DOUT, and after selecting that for IO0, I hit the “Set High” and “Set Low” buttons. The LED responded in kind without any complaint. Notably, there are also three GND pins, as well as a 3.3V and 5V pin if you need a small amount of power (up to 100mA and 200mA respectively) for your project.
One interesting surprise (to me at least) under the “Device” tab is that the host adapter has an RGB LED built in that you can manipulate as you like. Perhaps most importantly, I2C and SPI tabs let you interface with peripherals using these protocols.
Binho also has Python libraries available that you can use to automate functions via your computer, and for deep device interaction you can also interface with it using an ASCII terminal program. In addition to functions listed above, 1-WIRE and SWI are available via ASCII/Python, and will be added to the GUI in the future.
More information on those usages, as well as the full user guide is available here. The device is on sale here for $149 in both black, and a “Launch Special Edition” grey/black color if you so prefer!