blatyo

blatyo

Conduit Core Team

How do you decide what hardware to buy? Do you do anything special to make sure things are compatible?

Showing Posts 1 to 7

AstonJ

AstonJ

Great question! I was wondering the same :smiley:

ConnorRigby

ConnorRigby

Nerves Core Team

When you say “hardware” do you mean the base system, such as raspberry pi revision/version, or things like sensors?

I usually just go on Alibaba and look for whatever will be cheapest/shortest shipping for both. :wink:

frigidcode

frigidcode

I look for hardware using the following criteria:

  • Supported communication [GPIO, SPI, UART, I2C]
  • Specifications for sending/receiving data (decipher a lot of docs in a Chinese dialect)
  • Power requirements (can I power off the GPIO or do I need a barrel jack + power brick)
  • Digital vs Analog (do I need an MCP3008 chip)

Communication links
https://github.com/nerves-project/nerves_uart
https://github.com/fhunleth/elixir_ale

Places to buy (off the top of my head)
Adafruit
SparkFun
Alibaba

blatyo

blatyo OP

Conduit Core Team

Both

Where’s a good place to learn about these?

Would I need to be able to read a specification to do something? Would one of those communication libraries handle this sort of thing for me, such that understanding a specification isn’t necessary?

frigidcode

frigidcode

I learned by reading the examples in the libraries I linked, going through the source code, and hacking on a project. IIRC I did have to Wikipedia SPI and 1 wire Dallas protocol because I wanted to know more than the libraries provided.

Get a raspberry pi zero w, breadboard, wires, LEDs, and experiment :slight_smile:

Depending on budget, you can get a starter pack with most everything you need.

It depends on the hardware. The temperature sensor I used was as easy as reading a file and parsing out certain characters to get the data. On the flip side, the wind speed sensor required specs and knowledge of binary communication to send/receive data. It wasn’t anything too complex, don’t let that scare anyone.

If you are interested, I can link the code I used for both sensors.

GregMefford

GregMefford

I just want to call more attention to this to say that, unless you have a Pi hat that gives you analog-to-digital conversion, you’ll want to make sure your sensors are digital (SPI, I2C, 1-wire, etc) instead of analog (e.g. 0-5V) because the Raspberry Pi doesn’t have analog pins like an Arduino does.

I’d recommend getting started by just buying Pi hats to connect to your RPi, because then you can be pretty sure that the hardware will work. That way, you can get comfortable with how things work before you branch out into the unknown.

ConnorRigby

ConnorRigby

Nerves Core Team

I want to put something out there that may help someone else out down the line about buying/selecting a device that can run Nerves. Sorry in advance for the huge wall of text you are about to witness.

What it means to “run” Nerves.

I see a lot of confusion here as what it means to run Nerves, so i am going to define this first. Nerves itself is just a lot of tooling that essentially removes everything that might be in your way. This includes building the kernel (hereafter referred to as simply linux) and the root file system (this contains your various root dirs such as /bin, /usr/, /etc and all their contents). these things are related but not the same as some fruity organizations would lead you to believe. So Nerves is just the tooling that brings all those pieces together using a project called buildroot. It compiles both linux, and the rootfs using a cross compiler toolchain. (we won’t get into that, it’s essentially magic).

so what it means to “run” Nerves is the device must have linux support to some extent, and buildroot support. If you start with linux, buildroot is usually pretty easy depending on how true to the kernel build process your manufacturer is.

Now some boards have both linux and buildroot, can’t (read “no one has put the work in yet”) work with Nerves. This includes the elusive C.H.I.P board. I won’t go into the details as to why it doesn’t work easily, but I will say there is a third part that makes Nerves so magic: fwup.

Fwup is how linux, the rootfs, and your elixir project is all packaged. Now supporting fwup is nothing all to special, its just a configuration file with a manifest of all the required files, some block offsets mapping to a block devices, etc that builds a special zip file. the caveat is that while it doesn’t require a certain sort of storage device, it makes it so much easier to get up and running.

If you’re still confused just know that if your device of choice can boot linux somehow, and a root filesystem can be written to an sdcard, you are probably good.

This means Nerves will never “run” on an embedded micro controller such as Arduino, Teensy, etc. They just won’t/can’t meet the requirements that the Nerves tooling expects or requires. That is not to say that Nerves can’t interface with those devices however.

So if looking for a device that “supports” Nerves, just know if you want to “interface” with a Nerves device, or “be” the Nerves device.

— All posts loaded —

Where Next? Top

Trending in Discussions Top

cblavier
Hey there, It’s been more than a year since we started using LiveView as our main UI library and building a whole library of UI componen...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
axelson
Hi there! :wave: @frigidcode and I (but mostly him) have been running an Elixir Book club, we’re almost done with Designing Elixir Syste...
New
achempion
I’ve been using Emacs as my main code editor for more than a two years. It’s a custom build version although I’ve tried doom emacs and sp...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New
jtormey
Lately I’ve been thinking about how to organize components as a LiveView application grows. One of the pain points I’ve found (for myself...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
georgeguimaraes
Just published claude-code-elixir, a plugin marketplace for Claude Code with Elixir support. These are the plugins I’ve been using for my...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews