Датчик GY-BMP280. неверные данные в зависимости от разных блоков питания

eDmitriy
Offline
Зарегистрирован: 11.01.2018

Добрый день! Я новичок в Arduino.

Решил собрать сетевую метеостанцию. за давление в ней отвечает GY-BMP280 (купил на Ali). Ситуация такая. датчик подсоединен к Arduino Nano на  3.3V, GRD и пинам 10,11,12,13 (SPI) напрямую. Пока тестировал на компе все было нормально. Но как только подключил к розетке пошла свистопляска. Перепробовал 5 разных блоков питания 5В - зарядки от соток. При питании от компьютора и еще 2-х блоков питания (Samsung, ZTE) датчик показывает +25С (думаю нормальные данные) на 2-х других блоках питания (Blackberry и noname)  показывает +45С, а еще на одном Blackberry показывал вообще 159С, ну и давление соответственно тоже бредовое... Все блоки питания должны выдавать 5V и 0.5A и больше (1А,2А...) Причем можно сказать так, что во всех случаях показания стабильные то есть либо это около 25С либо около 45... Данные мониторю по сети, то есть питания девайсу хватает раз сетевой модуль и сам Arduino работают стабильно.

Код библиотек и считывания данных:

#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 bmp(BMP_CS); // hardware SPI

//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK); - этот вариант перестал работать когда подсоединил сетевой модуль.

В коде самой программы считываю вот так:

float      v_localtemp = bmp.readTemperature();
float      v_pressure = (float) bmp.readPressure()/100;

Если нужны дополнительные данные. спрашивайте. Заранее спасибо.

sadman41
Offline
Зарегистрирован: 19.10.2016

Т.е. и датчик и сетевой модуль у вас на одном SPI висят?

eDmitriy
Offline
Зарегистрирован: 11.01.2018

да.

sadman41
Offline
Зарегистрирован: 19.10.2016

CS обоих модулей идет на D10 Ардуины?

eDmitriy
Offline
Зарегистрирован: 11.01.2018

Скорее всего да. Сетевая плата идет вместе с разъемами и Nano в нее просто вставляется всеми ножками.

sadman41
Offline
Зарегистрирован: 19.10.2016

Всё понятно. Пересаживайте CS датчика на другой пин (9, 8, 7...) . Если продолжит дурью маяться, то на SoftSPI или подключайте по I2C, если таковая возможность у модуля GY-BMP280 предусмотрена.

Кстати, я не помню - толерантен ли BMP к 5V, которые ему летят по ногам SPI из Nano... Вобщем, многое зависит от конкретного модуля - что туда напаяли.

eDmitriy
Offline
Зарегистрирован: 11.01.2018

Ок. Спасибо. Попробую. Что такое SoftSPI? и почему с CS на D10 показания датчика зависят от блока питания?

sadman41
Offline
Зарегистрирован: 19.10.2016

Наврядли они зависят именно от этого. Скорее всего когда вы тестировали с компом, сеть не работала и по SPI работал только один BMP. А как подключили в сеть - оба модуля начали тянуть одеяло на себя. Иных у меня соображений нет. BMP280 я ставлю в своих девайсах с сетью и черте-какими БП, проблем не возникает. Но они у меня по I2C подключаются.

 

eDmitriy
Offline
Зарегистрирован: 11.01.2018

В том то и дело. что все тестировалось с сетевым шнуром. менялся только источник питания.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, вобщем, пересадите CS для начала, покажите свой модуль со стороны деталей. Ошибки можно совершить в десятке мест. 

eDmitriy
Offline
Зарегистрирован: 11.01.2018

УРА! Перекинул контакты на I2C (A4 и A5) - и все заработало! Супер! Спасибо!

Пробовал так же с D10 на D8 - это не помогло.

Не подскажете где почитать на тему использования наскольких устройств на SPI и на I2C?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

eDmitriy пишет:

УРА! Перекинул контакты на I2C (A4 и A5) - и все заработало! Супер! Спасибо!

Пробовал так же с D10 на D8 - это не помогло.

Не подскажете где почитать на тему использования наскольких устройств на SPI и на I2C?

В интернете. Вот, например: https://prog-cpp.ru/micro-spi/

Кратко - чтобы два устройства жило на SPI, то нужно обеспечить перевод одного в активный режим, второй - деактивировать. Поработать с первым. Потом первый деактивировать, второй активировать. Поработать со вторым. И так по кругу, через манипуляции с выводами CS - вкл/выкл. Однако, есть модули, которые кладут на этот вкл/выкл с прибором и монополизируют шину.

На I2C таких ситуаций меньше. Но тоже бывают заморочки.