270uA isn’t bad for a first attempt and includes the moisture sensor and BMP180 pressure sensor also.
Sure, it is not bad, for a first attempt.
I had a similar issue using a wemos D1 mini with a RN2903. Turned out that when I went into deep sleep , the pin I was using for uart tx (pin 15) when high which caused the RN2903 to wake up so the D1 mini was sleeping but the RN2903 was awake. I ended up using a different pin 0 for tx.
In my case it was about 3ma of current being drawn by the RN2903. Once I changed the Tx pin I was under 1 ma. But the battery still died after a few weeks so I ended up using a TPL5110 to control power. My sensor wakes every 90 minutes for a reading.
The software serial pins is draining the current here. Many years ago, I would put the pins as output with internal pull up before sleep. Recently when I used the AltSoftSerial instead of SoftwareSerial, only an end()
is enough to put the pins into proper low power state. Just need to call begin()
once awake.
I have now tried several of your solutions. but ended up building a new node. with another set of parts.
Same setup as described earlier, but new parts.
The idle current is now only 8mA, and sleep is 4uA, which is where i wanted it.
So i guess there is something wrong with the first rn2483 module, since it is consuming 22mA in idle, the new one only consume 2.6mA in idle, as the datasheet confirms it should.
Maybe i find the error some day.
able to share your end code?
To test power sleep functionality i only used this code
#include <SoftwareSerial.h>
#include <TheThingsNetwork.h>
#include <OneWire.h>
#include <LowPower.h>
#define loraSerial SoftSerial
#define debugSerial Serial
// Replace REPLACE_ME with TTN_FP_EU868 or TTN_FP_US915
#define freqPlan TTN_FP_EU868
#define SpreadingFactor 7
SoftwareSerial SoftSerial(10, 11); // RX, TX
TheThingsNetwork ttn(loraSerial, debugSerial, freqPlan, SpreadingFactor);
void setup() {
loraSerial.begin(19200);
debugSerial.begin(9600);
//Restart the RN2483 module
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
delay(500);
digitalWrite(12, HIGH);
ttn.reset();
ttn.showStatus();
}
void loop() {
ttn.wake(); // wake the RN module from sleep, if it is still sleeping
delay(5000);
ttn.sleep(9000); //sleep RN module in [ms]
delay(1000);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
Rest is connected to pin 12, and is pulled up py a 10k resistor.
Of cause this is only the power down test. my final code is different, and still a work in progress.