Sida 1 av 1
BME280 och matning från en pin, reset av I2C [löst]
Postat: 29 februari 2020, 13:26:55
av JanErik
Vill sätta en BME280 att matas från en pin och bli spänningslös när mikrokontrollern går i sleep.
Då verkar nåt gå fel antingen i kommunikationen eller kalibreringarna; har använt Sparkfuns bibliotek till Arduino.
Första mätningen är OK, alltså före matningen släcks.
Kod: Markera allt
Humidity: Reading basic values from BME280
Humidity: 26.32 Pressure: 963.71 Temp: 18.73
Humidity: 91.33 Pressure: 648.42 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Humidity: 91.71 Pressure: 651.90 Temp: 22.08
Prövat köra sensorbibliotekets reset-funktion, prövat köra Wire.begin utan resultat.
Prövat sensorbibliotekets beginI2C men då verkar den frysa.
Re: BME280 och matning från en pin, reset av I2C
Postat: 29 februari 2020, 14:43:24
av Klas-Kenny
Kod?
Re: BME280 och matning från en pin, reset av I2C
Postat: 29 februari 2020, 14:49:34
av lond
µP? ESP8266?
/// Marcus
Re: BME280 och matning från en pin, reset av I2C
Postat: 29 februari 2020, 15:16:42
av JanErik
Det är löst, måste köra reset() och begin(). Atmega328.
Kod: Markera allt
#include <Wire.h>
#include "SparkFunBME280.h"
BME280 mySensor;
#define POWERPIN 2
void setup()
{
Serial.begin(9600);
Serial.println("Reading basic values from BME280");
pinMode(POWERPIN, OUTPUT);
digitalWrite(POWERPIN, HIGH);
delay(10);
Wire.begin();
Wire.setClock(100000);
mySensor.setI2CAddress(0x76);
if (mySensor.beginI2C() == false) //Begin communication over I2C
{
Serial.println("The sensor did not respond. Please check wiring.");
while(1); //Freeze
}
mySensor.setTempOverSample(16); //0 to 16 are valid. 0 disables temp sensing. See table 24.
mySensor.setPressureOverSample(16); //0 to 16 are valid. 0 disables pressure sensing. See table 23.
mySensor.setHumidityOverSample(16); //0 to 16 are valid. 0 disables humidity sensing. See table 19.
mySensor.setMode(MODE_FORCED); //MODE_SLEEP, MODE_FORCED, MODE_NORMAL is valid. See 3.3
}
void loop()
{
digitalWrite(POWERPIN, HIGH);
delay(10);
mySensor.reset();
mySensor.begin();
delay(10);
Serial.print("Humidity: ");
Serial.print(mySensor.readFloatHumidity(), 2);
Serial.print(" Pressure: ");
Serial.print(mySensor.readFloatPressure()/100, 2);
Serial.print(" Temp: ");
Serial.print(mySensor.readTempC(), 2);
Serial.println();
digitalWrite(POWERPIN, LOW);
delay(10000);
}
Re: BME280 och matning från en pin, reset av I2C
Postat: 29 februari 2020, 15:20:57
av JanErik
Dock vet jag inte varför den första tryckmätningen visar 96x när de senare visar korrekt 99x. Men jag ska inte använda den ändå.
Re: BME280 och matning från en pin, reset av I2C
Postat: 29 februari 2020, 15:29:37
av PeterH
Vad händer om du lägger till en längre delay innan första mätningen? Du har ju som jag förstår det stängt ner BME:n och den kanske behöver tid att komma igång innan mätningen vid uppstart?
Re: BME280 och matning från en pin, reset av I2C [löst]
Postat: 1 mars 2020, 15:34:50
av JanErik
Nu funkar nog allt. Måste lägga en dummy-läsning av temperaturen efter första initalisering i setup(). Medföljande exemplet uppförde sig likadant.
Även med riktig sleep fungerar det, efter att jag kör power_twi_disable() före och power_twi_enable() efter uppvakning.