Bme280: Arduino и метеодатчик BME280/BMP280

Драйвер датчика Raspberry Pi BME280 0.2.2, документация

Взаимодействие с модулем цифрового датчика Bosch BME280 (способным
температура, влажность и давление) в Python 2 или 3 с использованием I2C на Raspberry
Пи. Конкретный комплект, который я купил, можно приобрести за несколько фунтов на eBay. Дополнительные технические детали для
Датчик BME280 можно найти в техническом описании.
[PDF].

Выводы GPIO

BME280 — это устройство I2C, поэтому подключиться к RPi очень просто:

Предварительные условия

Убедитесь, что драйвер ядра I2C включен:

 $ dmesg | grep i2c
[ 4.925554] bcm2708_i2c 20804000.i2c: Контроллер BSC1 по адресу 0x20804000 (irq 79) (скорость передачи 100000 бод)
[ 4.929325] Драйвер записей i2c /dev
 

или:

 $ lsmod | grep i2c
i2c_dev 5769 0
i2c_bcm2708 4943 0
regmap_i2c 1661 3 snd_soc_pcm512x, snd_soc_wm8804, snd_soc_core
 

Если у вас нет перечисленных модулей ядра и ничего не отображается с помощью dmesg тогда это подразумевает
драйвер ядра I2C не загружен. Включите I2C следующим образом:

  1. Запустите sudo raspi-config
  2. Используйте стрелку вниз, чтобы выбрать 9 Дополнительные параметры
  3. Стрелка вниз к A7 I2C
  4. Выберите да , когда вас попросят включить I2C
  5. Также выберите да , когда он спросит об автоматической загрузке модуля ядра
  6. Используйте стрелку вправо, чтобы выбрать <Готово> кнопка
  7. Выберите да , когда он попросит перезагрузить компьютер

После перезагрузки еще раз проверьте, что dmesg | Команда grep i2c показывает,
Перед продолжением загружается драйвер I2C.

При необходимости для повышения производительности увеличьте скорость передачи данных I2C по сравнению со значением по умолчанию.
от 100 кГц до 400 кГц, изменив /boot/config.txt , включив в него:

 dtparam=i2c_arm=on,i2c_baudrate=400000
 

Затем перезагрузитесь.

Затем добавьте своего пользователя в группу i2c:

 $ sudo adduser пи i2c
 

Установите некоторые пакеты:

 $ sudo apt-get install i2c-tools python-pip
 

Затем проверьте правильность обмена данными с устройством (при использовании платы версии 1,
используйте 0 для шины, а не 1):

 $ i2cdetect -y 1
       0 1 2 3 4 5 6 7 8 9 а б в г д е
  00: -- -- -- -- -- -- -- -- -- -- -- -- --
  10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  70: -- -- -- -- -- -- 76 --
 

Установка пакета Python

Для python2 в командной строке bash введите:

 $ sudo python setup.py install
 

Это установит файлы Python в /usr/local/lib/python2.7
подготовить их для использования в других программах.

В качестве альтернативы для python3 введите:

 $ sudo python3 setup.py install
 

Cheeseshop install

В качестве альтернативы доступна версия на PyPi, просто выполните:

 $ sudo pip install RPi.bme280
 

Программный драйвер — пример использования

После установки подтвердите адрес I2C (см.
скорее всего 0x76 или 0x77) и порт.

Затем в скрипте Python или REPL:

 import smbus2
импорт bme280
порт = 1
адрес = 0x76
шина = smbus2.SMBus(порт)
калибровка_парамов = bme280.load_калибровка_парамс (шина, адрес)
# метод примера выполнит одно чтение и вернет
# объект offset_reading
data = bme280.sample (шина, адрес, калибровочные_параметры)
# класс compated_reading имеет следующие атрибуты
печать (данные.id)
печать (данные. временная метка)
печать (данные.температура)
печать (данные.давление)
печать (данные.влажность)
# также есть удобное строковое представление
печать (данные)
 

Это должно напечатать что-то вроде:

 ee50df9c-3aa3-4772-8767-73b6bb74f30f
2016-11-18 17:33:28. 937863
20.563
980,91
48.41
компенсированное_чтение (id = ee50df9c-3aa3-4772-8767-73b6bb74f30f,
    метка времени = 2016-11-18 17:33:28.937863, температура = 20,563 ° C,
    давление=980,91 гПа, влажность=48,41 % относительной влажности)
 

Для приложения, подобного регистратору данных, периодически вызывайте bme2.sample(bus, адрес, калибровка_параметров)
получить показания, основанные на времени.

См. проект метеостанции
более полный пример использования.

Ссылки

> TODO

Лицензия

Лицензия MIT (MIT)

Copyright (c) 2016 Richard Hull

Настоящим предоставляется бесплатное разрешение любому лицу, получающему копию
этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), чтобы
в Программном обеспечении без ограничений, включая, помимо прочего, права
использовать, копировать, изменять, объединять, публиковать, распространять, сублицензировать и/или продавать
копий Программного обеспечения, а также разрешить лицам, которым Программное обеспечение
предоставлены для этого при соблюдении следующих условий:

Приведенное выше уведомление об авторских правах и это уведомление о разрешении должны быть включены во все
копии или существенные части Программного обеспечения.

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ
ПОДРАЗУМЕВАЕТСЯ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ,
ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЕ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ
АВТОРЫ ИЛИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ НЕСУТ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ДРУГОЕ.
ОТВЕТСТВЕННОСТЬ, БУДУЩАЯ ПО ​​ДОГОВОРУ, ДЕЛИКТУ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩАЯ ИЗ,
ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ В
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.

BME280 Breakout — Датчик температуры, давления, влажности

сортировать по наилучшему соответствиюрекомендуемыеновейшиелучшие продажицена

163264
на страницу

только в наличии

Поиск не дал результатов.

Показать больше продуктов…

${ stockHtml }

${ hit.product_title } ${ hit.variant_title ? ("-" + hit.variant_title): "" }:

${ hit. description_first_paragraph}

`
вернуть $(resultHtml)
}
const searchResultCallback = (попадания, аспекты, количество) => {
debug("> обратный вызов результатов поиска", совпадения, фасеты, количество)
$("#search .load-more-results").toggle(hits.page 0) {
$("#search.no-results").hide()
пусть html = ""
for(let hit of hits.hits) {
$("#search .results").append(createSearchResultFull(попадание))
}
}еще{
if(searchSearcher.inStockOnly) {$("#search .no-results .message").html("Возможно, у нас есть что-то подходящее, чего нет в наличии. Включить товары, которых нет в наличии.")}
для (пусть я = 0; я `))
}
$("#поиск .без результатов").show()
}
// обновляем списки фильтров
$("#search .filters").find("раздел").each((i, e) => {
buildFilters($("#search"), searchSearcher, $(e).data("type"), аспекты, количество)
})
обновитьрейтинги()
обновитьЦены()
обновитьЗначки()
}
var searchSearcher = новый искатель([], searchResultCallback)
searchSearcher. permanentFilters = true
var searchLanding = window.location.pathname == "/search"
вар предыдущий URL = ноль
вар последний запрос = ""
const queryInput = (запрос) => {
если(!searchLanding) {
if(!lastQuery && запрос) {
debug("> начать поиск, сохранить текущее состояние URL", document.location.href)
предыдущий URL = document.location.href
$("#поиск").show()
$("#контент").скрыть()
}
если (последний запрос && !запрос) {
debug("> завершить поиск, вернуться к предыдущему URL-адресу", previousUrl)
history.replaceState(null, window.title, предыдущийUrl)
$("#поиск").скрыть()
$("#контент").показать()
}
если (запрос) {
searchSearcher.queryText = запрос
обновитьПоиск()
}
последний запрос = запрос
}еще{
searchSearcher.queryText = запрос
обновитьПоиск()
}
}
$(функция() {
если (window.location.pathname == "/search") {
$("#поиск").show()
$("#контент"). скрыть()
searchSearcher.queryText = urlGet("q", "")
$("#search_input_desktop").val(searchSearcher.queryText)
$("#search_input_mobile").val(searchSearcher.queryText)
$("#search .filters").find("раздел").each((i, e) => {
searchSearcher.filters[$(e).data("тип")] = urlGet($(e).data("тип"))
})
если(urlGet("акции")) {
$("#поиск .только на складе").prop("проверено", правда)
searchSearcher.inStockOnly = истина
}
если (urlGet ("сортировать")) {
$("#search .sort-by").val(urlGet("sort"))
searchSearcher.sort = urlGet("сортировка")
}
если(urlGet("страница")) {
searchSearcher.preloadPageCount = parseInt(urlGet("страница"))
}
searchSearcher.pageSize = получить("searchPageSize", 32)
$("#search .per-page").val(get("searchPageSize", 32))
searchSearcher.doSearch()
}
})
// запустить новый поиск и обновить URL
const updateSearch = (страница = 1) => {
searchSearcher. page = страница
searchSearcher.doSearch()
пусть параметры = []
if(searchSearcher.queryText) {parameters.push(`q=${searchSearcher.queryText}`)}
for(let filter of Object.keys(searchSearcher.filters)) {
если (searchSearcher.filters[фильтр]) {
параметры.push(`${фильтр}=${searchSearcher.filters[фильтр]}`)
}
}
if(searchSearcher.page != 1) {parameters.push(`page=${searchSearcher.page}`)}
if(searchSearcher.sort) {parameters.push(`sort=${searchSearcher.sort}`)}
if(searchSearcher.inStockOnly) {parameters.push(`stock=true`)}
пусть queryString = параметры.длина > 0? "?" + параметры.соединение("&") : ""
history.replaceState(null, window.title, "/search" + queryString)
}
const showOutOfStock = () => {
$("#поиск .только на складе").prop("проверено", ложь)
searchSearcher.inStockOnly = ложь
обновитьПоиск()
}
$("#search_input_desktop").on("input", (e) => { // ввод поиска на рабочем столе
searchSearcher.queryText = $("#search_input_desktop"). val().trim()
$("#search_input_mobile").val(searchSearcher.queryText)
queryInput (searchSearcher.queryText)
})
$("#search_input_mobile").on("input", (e) => { // ввод мобильного поиска
searchSearcher.queryText = $("#search_input_mobile").val().trim()
$("#search_input_desktop").val(searchSearcher.queryText)
queryInput (searchSearcher.queryText)
})
$("#search .filters >section ul").click((e) => { // фильтр кликов
searchSearcher.filters[$(e.target).closest("раздел").data("тип")] =
$(e.target).hasClass("активный") ? ноль: $(e.target).data("значение")
обновитьПоиск()
})
$("#search .per-page").change((e) => { // элементов на странице
set("searchPageSize", parseInt($(e.target).val()))
обновитьПоиск()
})
$("#search .sort-by").change((e) => { // сортировка
searchSearcher.sort = $(e.target).val()
обновитьПоиск()
})
$("#search .только на складе").change((e) => { // только на складе
searchSearcher.inStockOnly = $(e.target).prop("проверено")
обновитьПоиск()
})
$("#search . load-more-results").click(() => { // загрузить больше результатов
updateSearch(searchSearcher.page + 1)
})

Пиморони

Действительно хороший датчик окружающей среды, который идеально подходит для контроля температуры, давления и влажности внутри помещений или даже на открытом воздухе в подходящем корпусе. Он совместим с Raspberry Pi и Arduino.

Мы используем этот датчик на нашей плате мониторинга окружающей среды Enviro+, но это такой хороший датчик, что мы подумали, что стоит использовать его на прорыве! BME280 — отличный датчик для мониторинга условий вокруг вашего дома. Если вы являетесь пользователем iOS, то для BME280 есть плагин Homebridge, позволяющий использовать датчик для домашней автоматизации и мониторинга.

Этот прорыв совместим с нашей модной системой Breakout Garden, где использовать прорывы так же просто, как просто вставить их в один из шести слотов и начать развивать свой проект, творить и кодировать. Выводы BME280, произведенные после апреля 2022 года, также совместимы с Qw/ST , поэтому их можно использовать с целым рядом различных микроконтроллеров и HAT с разъемами Qwiic или STEMMA QT.

Характеристики

  • Датчик температуры, давления, влажности Bosch BME280 (техническое описание)
  • Интерфейс I2C с выбором адреса с помощью вырезаемой трассировки ADDR (0x76 или 0x77)
  • Разъем Qwiic/STEMMA QT
  • 3,3 В или 5 В совместимый
  • Защита от обратной полярности (на разъеме Breakout Garden)
  • Распиновка, совместимая с Raspberry Pi (контакты 1, 3, 5, 7, 9)
  • Совместимость с Ардуино
  • Совместимость с Raspberry Pi (библиотека Python)
  • Совместимость с Raspberry Pi Pico (библиотеки C++/MicroPython)
  • Схема

Комплект включает

  • Разрыв BME280
  • Вилка 1x5, вилка
  • Угловая головка с внутренней резьбой 1x5

Мы разработали эту коммутационную плату таким образом, чтобы вы могли припаять кусок прямоугольного гнездового разъема и вставить его прямо в нижние левые 5 контактов на разъеме GPIO вашего Raspberry Pi (контакты 1, 3, 5, 7, 9) . Заголовок под прямым углом также имеет то преимущество, что он расположен вдали от процессора Pi, чтобы свести к минимуму излучаемое тепло.

Программное обеспечение

Мы собрали библиотеку Python для использования датчика BME280 с Raspberry Pi, с удобными функциями для чтения всех значений и несколькими хорошими небольшими примерами.

Вы также можете использовать этот разъем с платами Raspberry Pi Pico и другими платами RP2040, используя MicroPython или CircuitPython марки C++ или Pirate.

Примечания

  • В ходе нашего тестирования мы обнаружили, что датчику требуется некоторое время для приработки (не менее 20 минут) и что показания могут стабилизироваться через пару минут после начала измерений
  • Трассировку на задней панели (отмеченную ADDR) можно обрезать, чтобы изменить адрес I2C с 0x76 по умолчанию на 0x77, что означает, что вы можете использовать до двух датчиков на одном Raspberry Pi или Arduino.
  • Коммутаторы BME280, BME68X и BMP280 используют одни и те же адреса I2C, поэтому, если вы используете два вместе, вам потребуется изменить адрес I2C на одном из них, используя трассировку для вырезания.
  • Размеры: 19x19x4,7 мм (ДxШxВ, включая разъемы)

`
пусть когдаHTML = `

${момент(попадание.дата, "X").fromNow()}

`
пусть sourceHTML = ""
пусть ReviewerImageHTML = ""
если (hit.source == "gcr") {
sourceHTML = `о покупках у нас через Google Customer Reviews`
} еще {
если (hit.reviewer.first_name) {
sourceHTML += `от ${hit.reviewer.first_name} `
рецензентImageHTML = ``
}
если (хит.продукт) {
sourceHTML += `о ${hit.product.title} `
sourceHTML += `через REVIEWS.io`
пусть изображение = hit.product.image
если (изображение) {
пусть dotIndex = image.lastIndexOf(".")
image = image.substring(0, dotIndex) + "_75x75" + image.substring(dotIndex)
}
productImageHTML = ``
}
}
пусть HTML = `

${когдаHTML}
${комментарийHTML}

${reviewerImageHTML}
${источникHTML}

`
пусть обзорЭлемент = $ (html)
$("#review_container"). append(reviewElement)
обзорElement.click((e) => {
$("#review_popup >div:first-child").html(html)
$("#review_popup").parent().show()
обновитьрейтинги()
})
}
обновитьрейтинги()
})
}
константа loadNextReviewPage = () => {
отзывыТекущая страница++
loadReviewPage (обзорыCurrentPage)
}
$(функция() {
loadReviewPage (0)
})
`
$("#user_photos .grid").Добавить($(html))
}
}

$("#user_photo_count").text(userPhotoCount + "фотография пользователя" + (userPhotoCount > 1 ? "s": ""))
})
}

const loadNextUserPhotoPage = () => {
текущая страница++
loadUserPhotosPage (текущая страница)
}

$(функция() {
loadUserPhotosPage (0)
})

Войдите, чтобы добавить в список желаний

Действительно хороший датчик окружающей среды, который идеально подходит для мониторинга температуры, давления и влажности в помещении или даже на открытом воздухе в подходящем корпусе. Он совместим с Raspberry Pi и Arduino.

Проверка статуса…

Отправка сегодня

В наличии – и готово к отправке!

Скоро – подпишитесь на уведомление!

Нет в наличии – надеюсь скоро вернется!

Устарело – больше не доступно.

Предварительный заказ — будет отправлен, как только появится в наличии.

  • BME280 Breakout — Датчик температуры, давления, влажности

    ПИМ472

    11,50 фунтов стерлингов

Добавьте кабель Qw/ST

  • Кабель JST-SH (Qwiic, STEMMA QT, QW/ST) — вилка-вилка (200 мм)

    + 1,25 фунта стерлингов

Продолжайте делать покупки или просмотрите свою корзину

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

Добавить комментарий

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