


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




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

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


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.
/LinksysWRT54GLWi-FiWireless-GBroadbandRouter-597a4ebf685fbe001117d42b.jpg)

WiFi
Use cases
- Hobby projects
- Prototyping
- Commercial use



WiFi
Drawbacks
- Even with Vintage Net, wireless networking may present confusing situations.
Benefits
- No wires!
- Commonly available
- Vintage Net
- Vintage Net Wizard

40
IEx

IEx
Use cases
- Host development
- Testing during development
- Remote shell sessions
- Pretty much anytime!

IEx
Warning
- Use caution when changing code in memory
Benefits
- Interact with runtime
- RingLogger
- RamoopsLogger
- Toolshed

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?


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
- Security considerations
- Overwriting notebooks by burning
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.
- 467



























