Mysensors не уходит PowerDown
- Войдите на сайт для отправки комментариев
Чт, 12/04/2018 - 22:34
Всем привет
Вопрос к знатокам Mysensors
Собрал простейший температурный сенсор BME280. Планирую батарейное питание
Atmega328 на внуреннем незонаторе, NRF24 и BME280 все
Питание планируется напрямую от двух AA
Написано, что функия sleep() отправляет контроллер и радио в сон, но потребление при этом 5мА
Завел NRF24 питание на 8-ю ногу, прописал POWER_PIN. Потребление уменьшилось до 2мА, но все равно много.
Если начинаю дергать питание NRF вручную, то в сон совсем не переходит
Если убрать NRF из гнезда - потребление в режиме сна 0.4мА
Куда еще копать? Русскоязычное сообщество Mysensors похоже в анабиозе
#include <Wire.h>
#include <avr/sleep.h> // Sleep Modes
#include <SPI.h>
#include "SparkFunBME280.h"
//Датчик температуры с батарейным питанием
// Enable debug prints to serial monitor
//#define MY_DEBUG
#define MY_RF24_CE_PIN 9
#define MY_RF24_CS_PIN 10
#define MY_RF24_POWER_PIN 8
#define MY_PASSIVE_NODE
// Enable and select radio type attached
#define MY_RADIO_NRF24
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
// #define MY_RF24_PA_LEVEL RF24_PA_LOW
#define MY_RF24_PA_LEVEL RF24_PA_MAX
//#define MY_DEBUG_VERBOSE_RF24
// RF channel for the sensor net, 0-127
//#define RF24_CHANNEL 125
#define MY_NODE_ID 50
//RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps, or RF24_2MBPS for 2Mbps
//#define RF24_DATARATE RF24_250KBPS
#define MY_TRANSPORT_WAIT_READY_MS 1
#include <MySensors.h>
//MySensors node;
BME280 bme;
// Define sensor node childs
#define CHILD_ID_VCC 0
#define CHILD_ID_TEMP 1
#define CHILD_ID_HUM 2
#define CHILD_ID_PRESS 3
MyMessage msgVcc(CHILD_ID_VCC, V_VOLTAGE);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgPress(CHILD_ID_PRESS, V_PRESSURE);
float readVcc();
void setup()
{
Serial.begin(115200);
Serial.println("Reading basic values from BME280");
// node.begin();
// pinMode(8,OUTPUT);
// digitalWrite(8,LOW);
sendSketchInfo("Temp/num/press sensor", "1.0");
present(CHILD_ID_TEMP, S_TEMP,"Temperature,C");
present(CHILD_ID_HUM, S_HUM,"Humidity, %");
present(CHILD_ID_PRESS, S_BARO,"Pressure");
Wire.begin();
// byte error, address;
// int nDevices;
bme.setI2CAddress(0x76); //Connect to a second sensor
if (bme.beginI2C() == false) //Begin communication over I2C
{
Serial.println("The sensor did not respond. Please check wiring.");
// while(1); //Freeze
}
pinMode(15,OUTPUT);
digitalWrite(15,HIGH);
delay(200);
digitalWrite(15,LOW);
bme.setMode(MODE_SLEEP); //Sleep for now
}
void loop()
{
digitalWrite(15,HIGH);
float vcc = readVcc();
bme.setMode(MODE_FORCED); //Sleep for now
float t = bme.readTempC();
float h = bme.readFloatHumidity();
float p = bme.readFloatPressure()/133;
float a = bme.readFloatAltitudeMeters();
bme.setMode(MODE_SLEEP); //Sleep for now
Serial.print("Humidity: ");
Serial.print(h, 0);
Serial.print(" Pressure: ");
Serial.print(p, 0);
Serial.print(" Alt: ");
Serial.print(a, 1);
Serial.print(" Temp: ");
Serial.print(t, 2);
Serial.print(" Vcc: ");
Serial.print(vcc);
Serial.println();
// digitalWrite(8,HIGH);
RF24_powerUp();
send(msgVcc.set(vcc,2));
send(msgTemp.set(t,1));
send(msgHum.set(h,0));
send(msgPress.set(p,0));
digitalWrite(15,LOW);
RF24_powerDown();
// digitalWrite(8,LOW);
sleep(5000,false);
}
/**
* Читаем напряжение питания
*/
float readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = (1100L * 1023)/result;
float ret = ((float)result)/1000;
return ret;
}
Не крупноват МК для такой банальной работы?
http://arduino.ru/forum/proekty/miniatyurnyi-komnatnyi-termometr-na-atti...
Не крупноват МК для такой банальной работы?
Mysensors - тяжелая библиотека. В Atmega8 не лезет. Зато без допиливания интегрируется с системой умного жома Majordomo и кучу других интересных плюшек имеет.
То что вы дали, простая отображалка. Здесь как раз вопросов нет. Все и так отлично работает, хватает примеров BME280 библиотеки. Мне нужен транспорт.
Всем ссори
Проблема решилась заменой NRF24 на другой аналогичный модуль. Видимо это в сон не входит по какой то причини
Сейчас с тем же кодом потребление во время сна 11мкА