We built a scalable, modular, distributed self-pour draft beer system with facial recognition authentication. The system included:
- Credit card payment
- An iPad app at the tap
- Beer flow measurement at the tap
- Beer inventory tracking
- White-labeling capabilities
- User management
With this system, patrons walk up to the kiosk, create an account, have their photo taken, and enter payment information. After creating an account, customers approach a tap and enter their phone number. The iPad application at the tap scans their face and uses facial recognition to authenticate their identity. Upon authentication, they are free to pour beer, and their credit card is charged for only the ounces they pour.
The IoT Firmware Problem
During this project, we faced a common problem with building IoT solutions — your devices out in the field can only reach out to your server, but you can’t reach into any of them and make updates or changes. To improve a product, you need to continually ship new code, but this is an issue with devices in the field. It’s often messy, unreliable, not secure, and really slow to iterate. Thus, for many IoT products, firmware updates and new features don’t come often. It’s a very different experience for web development, where you ship new features every day or even multiple times per day.
Nerves is a complete paradigm shift that makes this problem much easier. Why do we love it? First off, it has everything we love about Elixir as a language, and it gives us the ability to leverage Elixir tooling built at web pace. It also (mostly) avoids the complexities of embedded Linux. And importantly, it’s a full-stack solution that handles over-the-air firmware updates, the build of your Linux distribution, packaging of your application code, and the update process.
Watch this 45-minute talk to learn more about the project and why we love using Nerves!