Running LoraWAN on the ATtiny

We are very charmed by the HopeRF RFM95 module, since it has a relative small form-factor and a high output power compared to -for instance- the RN2483.
However, since it has a minimum of firmware on board, the drawback is that you have to provivide the LoraWAN stack yourself. And in doing this, you have little choice of available software libraries and usualy end up with the LMIC library. And however this library is very neat, it is quite complex and hugely overfeatured for dumb sensor applications.
So, I set it upon myself to derive a more simple stack out of it, so simple in fact, that you should be able to run it off an ATtiny85, the smallest processor we work with.
It took the usual blood, sweat and tears, but I got it working. The compiled software for a basic dumb sensor application (sending data every X timeperiod) is only 3.242 bytes (53%), and 381 bytes out of 512 RAM is used (I had to put some tables for encryption in flash memory). So that leaves plenty of room for some more application software.
It is single frequency and fixed SF, it does not do downstream messages or OTAA, but it suits our purpose!

It took my whole weekend to debug because of a nasty porting-issue and the very limited debugging features of the Attiny, so I’m putting it aside for now :slight_smile: If I have some time I will clean up the software and post it on Github. In the mean time if you are interested, send me a message!


This is my test setup. I’m using a Feather M0 Proto for reference, and also for providing 3.3V for the ATtiny and the RFM95.


wow… the complete stack in a ATtiny85
pls post on github :sunglasses:

Except you run it on a network were only OTAA is available ;). But congrats on using an ATtiny, that’s the real deal.

Amazing achievement iot-partners! Can you please share that code on GitHub? I am really interested!

Very cool!


I’m very interested. Will you share your code ?

Thanks !


We will definitely share the code, but a bit of patience please!

I am at the moment testing with the right sleepmode and interrupts to have ultra-low power in sleepmode, and we are also looking into making our hardware solution available for the general public, this means a mini-board with an RFM95 and an ATtiny85 with some auxiliary logic. Target size is less than 18 x 18 mm, target power consumption in sleep around 1 uA. To be used in dumb-sensor applications. Powered by a Li-SOCl2 battery which has extremely low self-discharge this would give insane service life.

To be continued (soon!)…


Hi. Great project! Any update on when your hardware solution might be available?

Working on it… We have some commercial projects that are eating up all my attention and they have priority :slight_smile:

1 Like

Eager to see updates on this, @rharte :slight_smile:

1 Like

@brainstorm, sorry but no progress yet on the hardware. We are fully consumed by a couple of commercial projects, but I’ll talk to my colleagues and see what we can do.
On the software side, there was some progress, I was able to run a substantial part of the stack on the ATtiny/RFM95 combi, sending data to the network and receiving the network respons. So this proves you can indeed run a simple node from the ATtiny.


any progress until today…? very exciting… if you just want to send an on/off status or in combination with solar harvesting sending temperature & humidity & lux & batteryvoltage… thx.

regards from berlin


Have you seen this post?

1 Like

That’s basically what I started from as well, a dressed-down copy of the LMIC libary. I went one step further and I also managed to include the receiving part, so my sketch receives the reply from the network (in RX1 or RX2!), parses the MAC commands, and complies to the channel usage as dictated by the network. It is also able to receive downlink messages for, for instance, remote configuration. This was quite a challenge to get the timing right, because with the limit in interfaces, you only get to use one DIO line,
I am now working on including OTAA as well, but I am getting really really close to the memory limit of the ATtiny, so I’m not sure if I will succeed here. :sweat_smile:

It would be nice trying your code and contribute it, rharte… I am having a lot of issues with downlinks using the LMIC library, and your code could be the solution.

@bluesensing1 no not yet I’m afraid. Indeed if you need a very simple node that sends data in a ‘fire & forget’ way then the ATtiny is fine. You could strip it down to only 3 interface lines: MOSI, CLK and NSS, which leaves you with at least 2 I/O-ports and then even the reset-port which you can use as analogue input with some special considerations.

We are always ready to help, but the thing is, @jfmateos, this is commercial software; we invested a handsome amount of time in it and it represents part of the value of our company. We are shipping this software to our customers in our LoRa Geo-Trackers and we just couldn’t throw it in the public domain for any competitors to copy it free of charge…

1 Like

I absolutely understand rharte… good luck!