What is Nerves?

A set Elixir libraries for embedded hardware development.

+

What is Nerves?

This Talk

Explore workflows for Nerves in various contexts.

Develop, debug, and deploy firmware to Nerves targets.

Nerves #FTW

  • Developer experience (DX)
  • Documentation
  • Open source community
  • Nerves Core Team
  • Hardware support

Now is the best time to get started with Nerves.

"What about the chip shortage? Why now?"

Reasons

Workflows:

  • Host
  • SD Card
  • Serial Cable
  • HDMI Cable
  • USB Cable

 

  • WiFi
  • IEx
  • Hotswap
  • OTP
  • Livebook
  • NervesHub

What's in store?

Host

Host

What/how?

Code written on and for the host environment.

 

 

It works, ship it!

Keep application and hardware code separate.

Add hardware abstraction layers or adapters.

Host

What/how?

Nerves Project

Dependencies

Configuration

Application Code

Hardware

Host

Test

Host

Use cases

  • Literally everywhere
  • Testing
  • Except for HAL
  • Mocking HAL

Resources

Host

Benefits

  • Best DX
  • Shortest feedback loop
  • Separation of concerns
  • Hardware interoperability
  • Faster debugging
  • Code easier to reason about
  • Simplified tests

Drawbacks

  • More configuration
  • Mocking
  • Not actual hardware
5

SD Card

What/How?

Burning firmware to a microSD card is the most primitive workflow for Nerves.

 

Use one of: mix burn, fwup, dd, or Etcher.

SD Card

Use cases

  • Early development
  • Custom Nerves system
  • Unsupported development board/hardware
  • Device provisioning sequences

SD Card

Drawbacks

  • Cumbersome
  • Interrupts "flow"
  • Wears out SD cards

Benefits

  • Ensures fresh firmware
  • Sometimes it's faster than WiFi

 

5.25"
5.25"
45

Serial Cable

What/How?

Allows you to open a direct console connection to the Nerves target through a terminal emulator like screen.

Serial Cable

Use cases

  • Early development
  • Firmware debugging
  • Hardware debugging

Can I help?

Serial Cable

Drawbacks

  • Wires
  • Confusing tx/rx
  • Impaired console
  • Not always available

Benefits

  • See console output immediately
  • No networking or configuration!

 

HDMI Cable

What/How?

Some Nerves targets include micro HDMI or mini HDMI ports that you can connect directly to an external display.

HDMI Cable

Use cases

  • Early development
  • Hardware debugging
  • Kiosks

HDMI Cable

Warning

  • May require config

Benefits

  • See console output early
  • No networking or configuration!*

Drawbacks

  • Wires
  • Not always available

USB Cable

What/How?

The suggested path of least resistance for connecting to a Nerves target in the official Getting Started guide.

USB Cable

Use cases

  • New to Nerves
  • Early development
  • Other options unavailable

USB Cable

Drawbacks

  • Wires
  • Requires DATA cable, not just power

Benefits

  • Fast, easy, convenient
  • Supplies both power and data
25

WiFi

What/How?

Nerves targets can be configured to connect to WiFi.

OTA firmware updates via nerves_ssh.

Vintage Net supports a myriad of WiFi configurations.

WiFi

Use cases

  • Hobby projects
  • Prototyping
  • Commercial use

WiFi

Drawbacks

  • Even with Vintage Net, wireless networking may present confusing situations.

Benefits

40

IEx

What/How?

An interactive shell or REPL for Elixir.

Nerves enables IEx sessions over ssh.

IEx

Use cases

  • Host development
  • Testing during development
  • Remote shell sessions
  • Pretty much anytime!

IEx

Warning

  • Use caution when changing code in memory

Benefits

Hotswap

What/How?

Enables fast and easy OTA updates to Nerves targets.

Passes compiled modules to IEx.Helpers.nl/2, which leverages Erlang's rpc:call to load new BEAM code.

Hotswap

Use cases

  • Firmware development
  • Hardware hacking
  • Debugging application startup

Fixed it!

Hotswap

Drawbacks

  • All modules replaced each time
  • Doesn't support changes to config or deps

Benefits

  • No wires!
  • Tight feedback loop
  • Relatively easy to setup
  • Great DX with OTP

Warning

  • May present confusing situations
15

OTP

What/How?

A special blend of powerful abstractions rolled into a small set of battle-tested Erlang libraries. Including the classics like supervisors, processes, links, and GenServer.

OTP

Use cases

  • Concurrent process management
  • Tweaking startup sequences
  • Designing supervision trees
  • Debugging failure conditions

OTP

Drawbacks?

Benefits

  • Fault tolerant, self-healing
  • Direct control over process restarts
  • Great DX with Hotswap or IEx
  • Process inspection and communication

Livebook

What/How?

A library for managing live, interactive, and collaborative code notebooks. Get started by downloading a pre-built firmware release that includes Livebook and some demo notebooks.

Livebook

Use cases

  • Experimenting with new hardware
  • Documentation and guides
  • Onboarding developers
  • Demos!

Livebook

Warnings

Benefits

  • It's a live coding journal that runs on Nerves!
  • Collaborative
  • Reproducible
  • Tight feedback loop

NervesHub

What/How?

"An open-source firmware updates server"...

Also includes:

Install on AWS with nerves-hub/terraform repo.

Run as separate services on another platform.

NervesHub

Use cases

  • Commercial IoT
  • Consultancy
  • Community

NervesHub

Drawbacks

  • Community hosted version no longer available
  • Hard to configure self-hosted Nerves Hub

Benefits

  • OTA updates
  • Products
  • Deployments
  • Tags
  • Remote IEx
180

Workflows:

  • Host
  • SD Card
  • Serial Cable
  • HDMI Cable
  • USB Cable

 

  • WiFi
  • IEx
  • Hotswap
  • OTP
  • Livebook
  • NervesHub

Rewind Recap

Advanced Workflows:

Thoughts? Questions?

How are you using Nerves?

Thanks!

Workflows and use cases for Elixir Nerves (ElixirConf 2022)

By Jason Johnson

Workflows and use cases for Elixir Nerves (ElixirConf 2022)

Presented at ElixirConf US 2022.

  • 297