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мкА