klingberg

klingberg

Hi there!

I am kind of new to nerves and electronics and was hoping that someone here could give me some pointers.
I struggle with reading the soil sensor connected to a raspberry pi zero.

I2C.detect_devices gives:
Devices on I2C bus “i2c-1”:

  • 54

The documentation says that the default address for the sensor is 0x36.
When I try to read from the sensor all I get is <<255>>?

I2C.read(ref, 0x36, 11) gives:
{:ok, <<255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255>>}

If anyone has any experience with this sensor or could explain whats going on here I would really appreciate it!

Showing Posts 1 to 2

fhunleth

fhunleth

Co-author of Nerves

Hi klingberg!

For I2C, it’s normal to send a command to the device and then do the read. For example, a command could be to return the current soil moisture and then you’d read a few bytes back that would be the soil moisture.

The API for talking to devices is normally found in something called a datasheet that you can download from the manufacturer. I took a quick look at the soil sensor link. From what I can tell, Adafruit has a microcontroller on the soil sensor board and they programmed it themselves with something called the seesaw firmware.

I could not find a datasheet or API guide that lists commands from Adafruit, but they do have Python code that “documents” the interface. See the moisture_read function in seesaw.py.

Reading the code, it looks like the function sends something related to _TOUCH_BASE and _TOUCH_CHANNEL_OFFSET and then reads into buf (which is 2 bytes):

self.read(_TOUCH_BASE, _TOUCH_CHANNEL_OFFSET, buf, .005)

Going to the read function, it looks like it writes _TOUCH_BASE, _TOUCH_CHANNEL_OFFSET to the device, sleeps 0.005 seconds and then reads 2 bytes.

Translating this to Elixir, I’d try:

I2C.write(ref, 0x36, <<0x0f, 0x10>>)
Process.sleep(5)
{:ok, <<value::little-size(16)>> = I2C.read(ref, 0x36, 2)

_TOUCH_BASE = 0x0f and _TOUCH_CHANNEL_OFFSET = 0x10

Based on Adafruit’s code, it looks like they retry if value > 4095.

Hope this helps!

klingberg

klingberg OP

Great! This is very helpful, thank you very much!!

I will give this a try as soon as I can!
Will let you know how it goes!

Thanks again!

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
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
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
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
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews