Big LoRa32u4 boards topic

I’am trying to minimize the sleep current on a lora32u4 . Several posts hint to the voltage regulator as a source of current consumption. According to the documentation the voltage regulator can be disabled by connecting the EN pin to the ground. It looks however that this cuts off power to the processor, am i rigth ? Would it be possible to power the board then by connecting a lipo directly to the 3.3V pin ? If not what is the reason of being able to disable to voltage regulator ?

> According to the documentation the voltage regulator can be disabled by connecting the EN pin to the ground. It looks however that this cuts off power to the processor, am i rigth ?

Correct, at least thats the case for the Adafruit boards, yours could be different I guess.

> Would it be possible to power the board then by connecting a lipo directly to the 3.3V pin ?

If you try that you stand a very good chance of destroying the board, LoRa device etc. A LiPo could be up to 4.2V, not a good idea to connect one to a 3.3V circuit.

> If not what is the reason of being able to disable to voltage regulator ?

So that something external can turn of the 3.3V output of the regulator, and hence also the components connected to it.

On some other boards the voltage regulator can be disabled as a feature implemented by design (by solder jumper or external pin) to prevent it drawing quiescent current when the board is externally powered with 3.3V.
Disabling the regulator apparently also prevents it drawing quiescent current.
If this works the same for all regulators with EN pin I don’t know but it’s possible to give it a try.
(I’m not sure if all regulators can handle 3.3V external input on their output pin when they are disabled.)

Another part that will probably negatively impact sleep current of the board is the battery charger chip.

If you want to power the board by battery directly on the 3.3V pin without quiescent current losses from a voltage regulator then it’s possible to use LiFePO4 (lithium ion phosphate) cells which have a nominal voltage of 3.2V. (Be aware that these cells usually don’t have an overdischarge protection built in.)

When powering a simple board externally with 3.3V (e.g. Arduino Pro Mini) it often helps to remove the voltage regulator from the board to minimize sleep current. For more advanced boards that include a battery charger removing only the voltage regulator will be much less effective (and more difficult because of many smaller SMD parts).

Please precise which board version you are using!
On v1.2, I had my best low power result using 5v (neither Batt, nor 3.3v) pin.

I’am using the Lora32u4 II by BSfrance wich is marked with V1.2 near the usb port so thats probably the same board.

Hi everyone,

i trying to get a bs france Lora32u4 II board to run. Board version is 1.3(!) and it seems to be different than the 1.2.
First of all, i’m not sure which version i got. I want 866Mhz.
On the back there are two white boxes, one saying 866MHz and one 915MHz but there is no mark which one it is.

Even more confusing, after uploading an example Sketch, in the arduino IDE it says: “Port /dev/ttyACM1 Lora32u4 (433MHz)

I followed as far as possibe those instructions: but i didn’t solder anything because there is only one solder pad on the back instead of three.

So my question is how can i find out which frequency is used. and second how can i see if the connection to the gateway is working? The next gateway is around 1.5 kilometers away. Is it possible with this board?

Thanks in advance

Forget to mention: Of course i selected the 866-915MHz version in the Board selection.

Read the extensive information in this thread first before asking other forum users for help.
This thread is not intended for providing help for instructions in other people’s Youtube videos!

Both V1.2 and V1.3 are clearly described in this thread, including their differences and instructions how to get the board up and running.

If you do not want to solder DIO1 then you might try example ttn-abp.ino to use ABP.
That should probably work without DIO1 connected, ttn-otaa.ino will not work without DIO1 connected.
For normal (OTAA) operation you will have to connect/solder DIO1 anyway.

If the board says 868/915 MHz then it probably is.
It is possible (but less likely) that a 433MHz LoRa module is mounted on the board.
I find it unlikely though that the Arduino IDE would be checking whether the module is a 868/915 or 433MHz version. The 433MHz message may possibly be incorrect (caused by USB driver).
I have no experience with Arduino on Linux or OSX, but when I connect my LoRa32u4 V1.2 to a Raspberry Pi then lsusb shows it as ID 239a:800c without LoRa32u4 and without frequency. This may be different for V1.3 though (I have none to test it).

Thx for your reply.
I got it to work after some time. On the first post, i didn’t see any information about v1.3 so i thought there is no.
There are not many guides how to get startet with this board so i reffered to the one on youtube to make clear what i’ve already done.

DIO1 is connected by default in v1.3 so its not neccessary to do anything here.
lsusb shows 230a:800c in programming (boot) mode and 239a:800c during normal operation.

Additionally i had an error from the IDE because of a missing hex file. Was just a typo of Lora and lora so i need to rename the file.

Last it seemed as if the device could not register to the network. I got this message for i guess 30minutes
8715102: EV_TXSTART
9108467: Unknown event: 20
then it finally starts sending. Wohooo \o/

Good to hear that you got it working. :+1:

Ah yes, of course.

I already wrote the following before: :blush:

I have updated the topic start and added information for:

  • LMIC Pin Mapping.
  • LMIC Timing (LMIC_setClockError()).
  • BSFrance LoRa32u4 II version 1.3.
  • MCCI LoRaWAN LMIC library as replacement/alternative for LMIC-Arduino.
1 Like

How about this “miniaturized version” of LMIC that was presented in this topic?

Based on the repository URL in the post you referenced:
The provided lmic_slim library:

  • Lacks any documentation .
  • Lacks any references.
  • Is provided only as a zip file which appears to come from elsewhere (no repository).
  • It is unclear what is and what is not supported by that library.
  • It may very well not be LoRaWAN compliant.

It got an impression that it might be based on TinyLoRa but I don’t know (I have no experience with TinyLoRa).

1 Like

Yikes! Not that great :confused:
Too bad, the lack of memory space is IMHO biggest LoRa32u4 drawback.

No, a lot is uncertain about the lmic_slim thing but the actual code closely resembles LMiC in the style and naming of functions and structures, making it look like a very stripped down version. It’s also functionally C code of non-Arduino heritage.

TinyLora is fundamentally C++ code of very different internal details. TinyLora also has some degree of history and ownership clarity.

The provided functionality does however seem to be very similar between the two - while lmic_slim has a receive function, it doesn’t actually appear to have the other things needed to receive, like timing or packet parsing and decoding.


Hello Excuse me english, I want to know if the board Lora 32u4 ll v.1.3 supports Class C and if LMIC also supports class C

Those are perhaps interesting questions to research on the commit and issue history of a given LMiC repo.

But as TTN does not support Class C, they are perhaps not very relevant questions to ask here.

To an extent modifying a node firmware for class C is comparatively simple - in effect, instead of going to sleep you just start the radio going with appropriate settings. Mains power is a practical requirement to leave the radio running.

My friend Dennis built this lmic_slim in 2017 from an early copy received from René Harte. It would by nice to collect your suggestions and finally do the work to make it more usable to the community. From all your feedback it seems to me there is so much knowledge missing on my side.
Would it be worth to you to get the lmic_slim to a better level, or did better alternatives become available?

For me, I still love this board, running it as gps tracker, temperature, noise, particle matter measurement. Using this in my monthly training ‘IOT for Beginners’. I want to add training material online, so all of you can give such training to your community as well. Interested?

Recently added some quick and custom map and graphing integration. This is all built serverless with Amazon Lambda and S3. Under the covers this adds a big data feature as well. I like serverless as it changes the way of thinking for many. I want to document this code as well and make it available to all of you. Help is appreciated to set it up correctly to make it improve and grow with your community input.
Temperature graph example:

Please send your guidance on improving the lmic_slim library!

1 Like

Hi Marco,

Thanks for your lmic_slim feedback.

In short: My feeling is not really because:


  • I’m almost certain that lmic_slim is not LoRaWAN compliant because there is no indication of that whatsoever. It is not even clear what is and what is not supported by the library.
  • The library is provided as a ZIP file and you ask for feedback via email.
    That is not how open source development works.
  • What should people give feedback about when nothing is even documented?

That depends on your definition of ‘better’.

While 8-bit AVR MCU’s are still used there is a tendency to shift to 32-bit ARM MCU’s (and things like ESP32) that have (much) more available memory resources, are more powerful and are better able to handle a full LoRaWAN stack implementation.
Multiple LMIC libraries are available for the Arduino framework already. They will not be as small as lmic_slim but are LoRaWAN compliant, are open source and (some) are well-maintained.
In answer to “would it be worth to you to get the lmic_slim to a better level”, I guess not, unless you want to develop for a niche, have much spare time and are willing to maintain it for longer time.

If you really want something LMiC derived but lightweight, your best bet would probably be to work out a series of #ifdef’s to remove what you don’t want at compile time. But keep it based in git and tied back to an actual LMiC. To some extent you don’t even really need to drop code (the linker will do that) but alter the control flow.

Implicit in that would be really deciding and documenting what you aren’t supporting. For example in the current version it doesn’t look like the code has logic to try to receive or to parse received packets, but it still has some of the receive functions even though it’s missing the ones that would be needed for those to be of any use.