I developed a nifty way to send data from any microcontroller to any PC running any operating system with zero components and hardware you probably already have sitting in front of you. Traditional interface methods (namely serial port and usb port, both have been referenced on Electronics-Lab) have drawbacks. For serial, you need a level converter IC (like a max232) and an archaic PC with a serial port, or a USB serial port adapter (many of which don’t run on Linux or newer versions of windows), and a crystal specifically chosen for transfer at a certain bit rate. FTDI makes a series of USB/serial interfaces, but they’re expensive and SMT only I don’t feel like paying even more for a breakout board just to communicate with a $1 microcontroller. Also, many ATMEL chips (most of the ATTiny series) don’t have rs232 capability built in, so you have to bit bang it in software (not fun). USB is another option, but requires a crystal and some level conversion circuitry, and isn’t supported by most small/cheap ATMEL chips. It’s built in some simple PICs (like some of the 18F series) but I don’t want to switch architecture just to send a few bytes to a PC! The V-USB project helps ATMEL chips bit-bang the USB protocol, and I’ve gotten it to work, but it’s not easy (their hello world program is hundreds of lines of code), and you have to mess with writing USB drivers or interfacing pre-made USB drivers with OS-specific solutions, it’s not fun either.
I’ve long wished there were an easier way! In this post, I demonstrate a simple way to send data from a microcontroller to a PC (and a more advanced second example showing bidirectional communication) using PC a sound card! Although the one built in most PCs would work, I decided to do it with $1.30 sound cards that are all over eBay. The chip sends pulses of data to the PC and a Python script (which can be run on virtually any OS) listens to the sound card with the pyAudio library and waits for data. When it’s received, it measures distances between pulses and dumps data values to the screen (optionally logging them to a CSV file ready for graphing by Excel or some other program). A series of calibration pulses precede the data stream allowing the PC to adapt to incoming data at any speed (no specific clock speed or crystal is required).
Although it’s not a refined method suitable for consumer applications, it sure is a useful hack for anyone looking to quickly exchange data between a microcontroller and a PC!
Sound Card Microcontroller / PC Communication - [Link]