These days we use USB as a default for everything from low-speed serial ports to high-capacity storage, and the ubiquitous connector has evolved into a truly multi-purpose interface. It’s difficult to believe then, that the first Apple Mac to be designed with a USB interface was shipped without it; but that’s the case with 1997’s grey Power Mac G3.
On the personality board are all the footprints for a single USB 1.1 port, but USB-hungry Apple fanboys had to wait for the translucent iMac and later G3 before they had a machine with the parts fitted. [Croissantking] is righting that particular wrong, by piecing together the missing Apple circuit using parts from contemporary cards for PCs. Over a long forum thread there are a few teething problems, but it certainly seems as though grey G3 owners will soon be able to have reliable USB upgrades.
If omitting USB from a 1997 Mac seems unexpected, it’s as well to remember how slow the first USB versions were. At the time SCSI was king in the high-speed peripheral world, and USB seemed more appropriate as a replacement for Apple Desktop Bus and the serial port. Even when they embraced USB they were reluctant to follow the standards of the PC world, as we remember finding out when for curiosity’s sake we tried swapping the mice and keyboards between an iMac and a Windows PC. We have USB’s success to thank for releasing Mac users from a world of hugely overpriced proprietary peripherals.
Once upon a time, USB was still hip, cool, and easy to understand. You could get up to 500 mA out of a port, which wasn’t much, but some companies produced USB cup warmers anyway which were a bit of a joke. However, one enterprising hacker took things further back in 2004, whipping up a potent USB hot plate powered by a cavalcade of ports.
The project was spawned after a USB cup warmer sadly failed to cook a decent fried egg. To rectify this, a souped-up version was built. The cup warmer was stripped of its original hardware, and fitted with six 2-ohm resistors instead. At 5 volts, each would draw 2.5 amps and the total power draw would be on the order of 75 watts. Each resistor would thus need five USB ports to power it to stay under the 500 mA limit, for a total of 30 USB ports in total. Six PCI-to-USB cards were installed in a motherboard for this purpose, providing the requisite ports. A 500 watt power supply meant the computer had plenty of juice to run the hot plate.
Cooking proved successful, generating a decent amount of heat to brown up some beef. Served with some white rice, it proved an adequate meal, though apparently with a noted taste of electronic components.
This wouldn’t be such a challenge today. USB-C is capable of delivering 100 watts through a single port at 20 volts and 5 amps. However, there’s something joyous and charming about cooking on a ridiculous hotplate running off 30 USB 1.1 ports. The ingenuity is to be applauded, and it is truly a project of its time.
Since the ESP8266 came on the scene a few years ago and revolutionized the way microcontrollers communicate with other devices, incremental progress on this chip has occurred at a relatively even pace. First there was the realization that code could be run on the chip itself. Next the ESP32 was released which built more on that foundation. The next step in that process of improvement may be here now as well, with this project which turns the ESP32 into a USB host.
USB is not a native feature on all microcontrollers or even Arduino-compatible boards. While some do have it built in like those based on the 32u4 for example, most either don’t have it at all or rely on a separate on-board chip to do some form of translating. The ESP32 is lacking this advanced feature so the USB needs to be cobbled together from scratch if you want this specific board to be able to interface directly with peripherals. This project does just that, allowing for four USB 1.1 devices to be connected directly to the ESP32 without a separate dedicated chip.
If you’ve been waiting for USB on this tiny, capable microcontroller this might be your chance to try it out. All of the project’s code is available on the project page. And, while it is limited in scope, it’s easily able to handle a keyboard or mouse. This might be a more cost-effective way of doing something like a KVM switch rather than doing it with three Arduinos.