Датчик BMP-280 и Wemos D1

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Заливаю пробный скетч и в мониторе порта вижу какую-то пургу:

 ets Jan  8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v60000318
~ld
…BMP280 test

Код и подключение датчика как здесь:

/***************************************************************************
  This is a library for the BMP280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BMEP280 Breakout 
  ----> http://www.adafruit.com/products/2651

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required 
  to interface.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11 
#define BMP_CS 10

//Adafruit_BMP280 bme; // I2C
//Adafruit_BMP280 bme(BMP_CS); // hardware SPI
Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

void setup() {
  Serial.begin(115200);
  Serial.println(F("BMP280 test"));
  
  if (!bme.begin()) {  
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bme.readTemperature());
    Serial.println(" *C");
    
    Serial.print(F("Pressure = "));
    Serial.print(bme.readPressure());
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
    Serial.println(" m");
    
    Serial.println();
    delay(2000);
}

У кого какие мысли?
 

Genri5
Offline
Зарегистрирован: 31.05.2016

Wemos D1 нужно еще правильно настроить : https://geekelectronics.org/arduino/wemos-d1-r2-na-esp8266-ndash-pervoe-... .

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Genri5 пишет:

Wemos D1 нужно еще правильно настроить : https://geekelectronics.org/arduino/wemos-d1-r2-na-esp8266-ndash-pervoe-znakomstvo.html .

Да я его как-то не разгонял до 364 мегагерц как некоторые, думал с установками по умолчанию должен работать. А по другому его и нельзя включить ( я лично не знаю как)

Непонятно по версии, у меня не написано, что это D1 R2

Брал здесь

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

полезно смотреть на схему. d10, которому Вы назначили роль CS - подтянут к земле. Ему, не то, что нельзя, но непредсказуемо, быть выходом с активным нулем.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

полезно смотреть на схему. d10, которому Вы назначили роль CS - подтянут к земле. Ему, не то, что нельзя, но непредсказуемо, быть выходом с активным нулем.

Что посоветуете прописать?

Так кошернее получится?

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

#define HARDWARE_WEMOS_D1_R1
// #define HARDWARE_NANO_UNO

#ifdef HARDWARE_WEMOS_D1_R1
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11 
#define BMP_CS 2
#endif

#ifdef HARDWARE_NANO_UNO
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11 
#define BMP_CS 10
#endif


//Adafruit_BMP280 bme; // I2C
//Adafruit_BMP280 bme(BMP_CS); // hardware SPI
Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

void setup() {
  Serial.begin(115200);
  Serial.println(F("BMP280 test"));
  
  if (!bme.begin()) {  
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bme.readTemperature());
    Serial.println(" *C");
    
    Serial.print(F("Pressure = "));
    Serial.print(bme.readPressure());
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
    Serial.println(" m");
    
    Serial.println();
    delay(2000);
}

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

у меня сам есп266 есть, причем с USB шкой, не в таком дурацком виде, но есть. Но нет BMP280, так что проверить не смогу. Смотрите библиотеку.

Попробуйте чистые пины, не пулап и не пулдаун и без светодиода. Ну там же можно найти 4 чистых пина. Из заголовков уберите ненужное: вот вам wire.h там захрена? и Adafruit_sensor.h тоже зачем? Пример то - для ардуино, а у Вас совсем не ардуино! На есп8266 ардуиновские библиотеки - очень не всегда работают. Придется сильно напрягаться. На сайте про 8266  есть форум и там много чего красивого написано.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Выдернул датчик, в мониторе порта та же бодяга, новый скетч еще не пробовал

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ua6em пишет:

Выдернул датчик, в мониторе порта та же бодяга, новый скетч еще не пробовал

А почему "бодяга"? Это внутренняя диагностика модуля. Я не знаю, возможно ее можно отключить. Почитайте на их форуме. Я пока только потестил типовые примеры , блинк и веб сервер из среды и его библиотеки, дальше не ходил.

Но я бы проверил нет ли поддержки хардварного SPI, это всяко лучше будет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Я уже понял, что это диагностика модуля )))
Ознакамливаюсь! СПС!
Вэб сервер уже проверял, работает!
Хотел метеостанцию сделать по wifi скидывать данные
Очень интересный модуль, на любые минимальные телодвижения рождает кода более 200 килобайт )))
Подозреваю почему так, читаю доку

Видимо датчик неисправен, попытка получить адрес по I2C тоже не увенчалась успехом, параметры подключения сделанные по надписям на плате таковы:

/***************************************************************************
  This is a library for the BMP280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BMEP280 Breakout 
  ----> http://www.adafruit.com/products/2651

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required 
  to interface.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

#define HARDWARE_WEMOS_D1_R1
// #define HARDWARE_NANO_UNO

#ifdef HARDWARE_WEMOS_D1_R1
#define BMP_SCK 13  // пин D13
#define BMP_MISO 12 // пин D12
#define BMP_MOSI 1  // пин D1
#define BMP_CS 2    // пин D2
#endif

#ifdef HARDWARE_NANO_UNO
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11 
#define BMP_CS 10
#endif


//Adafruit_BMP280 bme; // I2C
//Adafruit_BMP280 bme(BMP_CS); // hardware SPI
Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

void setup() {
  Serial.begin(115200);
  Serial.println(F("BMP280 test"));
  
  if (!bme.begin()) {  
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bme.readTemperature());
    Serial.println(" *C");
    
    Serial.print(F("Pressure = "));
    Serial.print(bme.readPressure());
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
    Serial.println(" m");
    
    Serial.println();
    delay(2000);
}