Elixir is an excellent general purpose language. It has features that let you write programs that are more reliable, easier to understand, and highly concurrent. Many of those same capabilities make Elixir an ideal language for embedded systems.
Embedded systems are smaller, special purpose computers used to control hardware. As embedded processors get more sophisticated, the demand for more complex systems grows, such as fridges that double as web browsers and doorbells that double as security cameras and networked intercoms. To support these new requirements, we need higher level languages with more powerful features.
Enter Nerves, Because many of today’s embedded apps are full-featured distributed, concurrent systems, they are ideally matched to functional programming languages like Elixir.
A few years after the creation of Elixir, Justin Schneck and Frank Hunleth recognized the need for advanced programming languages in the embedded community and founded the Nerves project. Nerves is the platform you’ll use to build embedded systems with Elixir. On the project’s website, you’ll find this description:
Nerves is the open-source platform and infrastructure you need to build, deploy, and securely manage your fleet of IoT devices at speed and scale.
As the years go by, more people join the community. Nerves is a staple at the yearly ElixirConf conferences and more successful projects emerge every year. In this course, you’re going to find out why.
Groxio courses focus on concepts rather than features. We’ll spend more time building your intuition about Nerves from the ground up.
The classic light blinking project will teach you to burn firmware, build a boundary layer that can talk to hardware through Circuits.GPIO, build an adapter layer that can run the same program three ways: in tests, in IEx, and on hardware, and configure your project with config files.
The binary clock project will teach you to build a core, write genservers, and control hardware with OTP and your core. Two sensor projects will show you how to use a light sensor that will both report a state on demand, access your sensors over a network, and deal with a barametric sensor.