Датчик GY-BMP280. неверные данные в зависимости от разных блоков питания
- Войдите на сайт для отправки комментариев
Добрый день! Я новичок в 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;
Если нужны дополнительные данные. спрашивайте. Заранее спасибо.
Т.е. и датчик и сетевой модуль у вас на одном SPI висят?
да.
CS обоих модулей идет на D10 Ардуины?
Скорее всего да. Сетевая плата идет вместе с разъемами и Nano в нее просто вставляется всеми ножками.
Всё понятно. Пересаживайте CS датчика на другой пин (9, 8, 7...) . Если продолжит дурью маяться, то на SoftSPI или подключайте по I2C, если таковая возможность у модуля GY-BMP280 предусмотрена.
Кстати, я не помню - толерантен ли BMP к 5V, которые ему летят по ногам SPI из Nano... Вобщем, многое зависит от конкретного модуля - что туда напаяли.
Ок. Спасибо. Попробую. Что такое SoftSPI? и почему с CS на D10 показания датчика зависят от блока питания?
Наврядли они зависят именно от этого. Скорее всего когда вы тестировали с компом, сеть не работала и по SPI работал только один BMP. А как подключили в сеть - оба модуля начали тянуть одеяло на себя. Иных у меня соображений нет. BMP280 я ставлю в своих девайсах с сетью и черте-какими БП, проблем не возникает. Но они у меня по I2C подключаются.
В том то и дело. что все тестировалось с сетевым шнуром. менялся только источник питания.
Ну, вобщем, пересадите CS для начала, покажите свой модуль со стороны деталей. Ошибки можно совершить в десятке мест.
УРА! Перекинул контакты на I2C (A4 и A5) - и все заработало! Супер! Спасибо!
Пробовал так же с D10 на D8 - это не помогло.
Не подскажете где почитать на тему использования наскольких устройств на SPI и на I2C?
УРА! Перекинул контакты на I2C (A4 и A5) - и все заработало! Супер! Спасибо!
Пробовал так же с D10 на D8 - это не помогло.
Не подскажете где почитать на тему использования наскольких устройств на SPI и на I2C?
В интернете. Вот, например: https://prog-cpp.ru/micro-spi/
Кратко - чтобы два устройства жило на SPI, то нужно обеспечить перевод одного в активный режим, второй - деактивировать. Поработать с первым. Потом первый деактивировать, второй активировать. Поработать со вторым. И так по кругу, через манипуляции с выводами CS - вкл/выкл. Однако, есть модули, которые кладут на этот вкл/выкл с прибором и монополизируют шину.
На I2C таких ситуаций меньше. Но тоже бывают заморочки.