Interacting with vehicles can be pretty tough. Cars are electrically noisy environments and, being powerful and heavy metal machines, a little tricky (read, dangerous) to play with. Worse, they’re all different! Even with the advent of the CAN system and standard, manufacturers can be infuriating in their insistance on doing everything in their own particular way.
Thankfully, there are a handful of companies that specialize in abstracting away many of the differences to allow you to interact with cars in an easier way. One that I particularly like is Fortin, and I’ve recently had the chance to play with their EVO-All box.
EVO-All is a, sweet, universal all-in-one data bypass module that can be used to interface with hundreds of vehicles and allow you to act as a remote starter, security system or anything else you can conceive of. A 4-wire, two-way, datalink protocol lets you send simple byte-codes to the EVO-All to do anything from disabling the security system and popping the trunk, to actually starting and stopping the car.
The only downside I found with using the datalink protocol was that timing issues and figuring out if you’re doing things right can be tough when you’re debugging a bunch of bytes… is this:
0x46 0x1E 0x2B 0x13 0x11
really the sequence I wanted? Is the timing ok? Enter EvoLink, a cross-platform library that handles the byte codes and timing for you. With EvoLink, that same sequence becomes:
EVO.wakeUp(); EVO.alarmOff(); EVO.starterKillOff(); EVO.systemDisarm(); EVO.unlock();
which is a lot easier on the eyes and handles the timing-related logic for you. The library also implements an event notification system, to have asynchronous events (doors, brakes, etc.).
EvoLink was just released under the GPL (so it’s open source and free for tinkerers) and available under a dual-licensing system, should you want to incorporate it into a closed/proprietary product. With the library, currently implemented for Arduino/Xmegaduino but easily portable to other platforms, you’ll also find examples covering the basics, the event notification system (e.g. for brake, door, etc events) and an EVO-All simulator you can use to debug your code.