# Welcome to Nerves Livebook
## Introduction
Thanks for trying out Nerves Livebook!
With this [Livebook](https://github.com/livebook-dev/livebook) image, you can
work through tutorials, create your own code notebooks and save them on device,
and import notebooks from others. We're just getting started and are super
excited with what Livebook can already do. We hope that you'll enjoy learning
about embedded systems and working with hardware in the notebook environment
too!
## Getting started
You've already figured out how to install the Nerves Livebook to your device
and how to open this file, so you're well on your way!
The next steps are to try out the notebooks in the samples directory. They're
all read-only so you'll need to *fork* them just like you did to open this
file. Livebook and Nerves Livebook are rapidly evolving so some notebooks are a
work-in-progress. We recommend starting with the following:
* [Configure WiFi](samples/networking/configure_wifi.livemd) - connect to a WiFi access point
* [LEDs](samples/basics/sys_class_leds.livemd) - learn about the built-in LEDs on your device
* [VintageNet](samples/networking/vintage_net.livemd) - learn about networking on Nerves devices
* [Firmware Update](samples/networking/firmware_update.livemd) - download the latest Nerves Livebook firmware
## Saving and copying files
This file and the samples are read-only since they're built into Nerves
Livebook. Your files can be saved anywhere in `/data` which is writable like a
drive on your computer. Firmware updates using the `firmware_update.livemd`
won't erase your files. Be careful, though, if you remove the MicroSD card and
re-initialize it in your computer. That will erase them.
If you want to copy a file off the Nerves Livebook image, open up a shell on
your computer and run `sftp livebook@nerves.local`. The password is `nerves`.
Once you're logged in, navigate to `/data/livebook` or where ever you stored
your files and run `get` to copy them off.
## Limitations
If you've used Livebook before, the Nerves Livebook image has a few
differences:
1. All code gets evaluated in one Erlang VM. This is convenient for Nerves
devices, but you may be surprised when a module defined in one notebook is
then accessible in another.
2. Installing hex dependencies is not supported. Nerves Livebook includes many
libraries as a convenience, though. We still recommend using `Mix.install/1`
to document what dependencies your notebook requires, but if the dependency
is not already loaded, it will raise an error.
## Pre-installed libraries
Since you cannot install libraries through hex, we include the libraries listed below.
If there is a dependency you want to see included in the `nerves_livebook` distribution,
please file an [issue](https://github.com/livebook-dev/nerves_livebook/issues)
or make a PR to include new libraries in the main image.
- **[`Kino`](https://hex.pm/packages/kino)**, interactive widgets for Livebook
- **[`VegaLite`](https://hex.pm/packages/vega_lite)**, Elixir bindings for the interactive graphic library [Vega-Lite](https://vega.github.io/vega-lite) (supported by `Kino`)
- **[`Phoenix.PubSub`](https://hexdocs.pm/phoenix_pubsub)**, a realtime publisher/subscriber service
- **[`Circuits.UART`](https://hexdocs.pm/circuits_uart)**, allowing you to use UARTs, serial ports, Bluetooth virtual serial port connections and more
- **[`Circuits.GPIO`](https://hexdocs.pm/circuits_gpio)**, letting you control or read from GPIOs
- **[`Circuits.I2C`](https://hexdocs.pm/circuits_i2c)**, letting you communicate with hardware devices using the I2C protocol
- **[`Circuits.Spi`](https://hexdocs.pm/circuits_spi)**, providing high level abstractions for interfacing to SPI busses
- **[`NervesKey`](https://hexdocs.pm/nerves_key)**, tools for interacting with Nerves hardware security modules (HSMs)
- **[`Pigpiox`](https://hexdocs.pm/pigpiox)**, a wrapper around the the [pigpio](https://abyz.me.uk/rpi/pigpio/) library for driving `GPIO` pins
- **[`RamoopsLogger`](https://hexdocs.pm/ramoops_logger)**, a `Logger` backend for forwarding to a [ramoops](https://www.kernel.org/doc/html/v4.19/admin-guide/ramoops.html) in the event of a system crash
- **[`BMP280`](https://hexdocs.pm/bmp280)**, support for the Bosch BMP180, BMP280, BME280, and BME680 temperature/pressure sensors
- **[`ScrollHat`](https://hexdocs.pm/scroll_hat)**, a driver for Pimoroni Scroll Hat LED boards
- **[`InputEvent`](https://hexdocs.pm/input_event)**, an interface to Linux input event devices such as keyboards, joysticks, mice, touchscreens, etc
- **[`Nx`](https://github.com/elixir-nx/nx/tree/main/nx#readme)**, a multi-dimensional tensors library with CPU/GPU support
- **[`BlueHeron`](https://hexdocs.pm/blue_heron)**, for communicating with Bluetooth LE modules via HCI
- **[`BlueHeron.HCI.Transport.UART`](https://hexdocs.pm/blue_heron_transport_uart)**, UART support for `BlueHeron`
- **[`NervesTimeZones`](https://hexdocs.pm/nerves_time_zones)**, local time and time zone support for Nerves devices
## Learn more
* Official docs: https://hexdocs.pm/nerves/getting-started.html
* Official website: https://nerves-project.org/
* Forum: https://elixirforum.com/c/nerves-forum
* Discussion Slack elixir-lang #nerves ([Invite](https://elixir-slackin.herokuapp.com/))
* Source: https://github.com/nerves-project/nerves