Датчик BME280
- Войдите на сайт для отправки комментариев
Пнд, 07/12/2020 - 20:48
Понимаю,что тема уже набила оскомину и все же..)
Есть китайский датчик как на картинке
Скетч сканирования по I2C его находит и выдает адрес 0x76.
В библиотеке Adafruit_BME280.h адрес я поправил ( там стоял 0х77)
вместо ардуино юзаю ESP8266 D1
Пины I2C (SDA - D2; SLC - D1) - датчик подключен к ним,питание 3,3В
Вот скетч
#include <ESP8266WiFi.h> #include <Wire.h>//для работы с шиной I2C #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> Adafruit_BME280 bme; // I2C (SDA - D2; SLC - D1) void setup() { Serial.begin(115200); //while (!bme.begin(0x76)){ // Serial.println("Не найден датчик BME280.Проверьте подключение!"); // delay (1000); // }; } void loop() { Send(); delay(5000); } void Send(){ // float h = bme.readHumidity(); // переменная влажности float t = bme.readTemperature(); // переменная температуры // float p = (bme.readPressure() / 133.3223684F); // переменная давления Serial.println("Temperature = "); Serial.println(t); Serial.println(" *C"); /* Serial.println("Pressure = "); Serial.println(p); Serial.println(" hPa"); Serial.println("Humidity = "); Serial.println(h); Serial.println(" %");*/ }
Но почему то работать не хочет( В мониторе порта выдает
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
Exception (28):
epc1=0x402013e8 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
>>>stack>>>
ctx: cont
sp: 3ffffdc0 end: 3fffffc0 offset: 0190
3fffff50: feefeffe 00000001 3ffee4a0 3ffee508
3fffff60: 00000000 00000001 3ffee4a0 402019fc
3fffff70: 00000000 00000000 3ffee308 402014d4
3fffff80: 0001c200 0000001c 3ffee4c8 4020105b
3fffff90: 3fffdad0 00000000 3ffee4c8 4020109d
3fffffa0: feefeffe feefeffe feefeffe 402021e4
3fffffb0: feefeffe feefeffe 3ffe84e0 40100c29
<<<stack<<<
Кто подскажет в чем проблема может быть?Датчики из китая- 2 штуки, ни один работать не хочет(
bme.begin() с какой целью закомментированно?
Начинайте всегда с внимательного чтения сообщения. Вам же сказали:
Оно называется "Access to invalid address", а причин может быть две:
1. Access to Cache after it is turned off
2. Wild pointers
Теперь, зная что искать, смотрим на скетч и видим, что Вы забыли инициализировать bme
Теперь, зная что искать, смотрим на скетч и видим, что Вы забыли инициализировать bme
а можно для тупых - какую строчку в код я не вставил?
если я расскоменчу while сетч плюется,что датчик не найден
Проверьте подключение или пройдитесь i2c сканером, вдруг датчик дохлый
Вот рабочий пример,248 строка
http://arduino.ru/forum/programmirovanie/snova-mqtt-1?page=1#comment-570275
в том то и дело, что сканер, залитый в esp нашел датчик с этим адресом..
Значит вариантов особо нет, или дохлый или попробовать с другим МК
Billy Bons, лично у меня сложилось впечатление от работы с esp8266, что этот чип принципиально не совместим с delay(5000).
С delay() там всё ок, его имплементация, содержащаяся в ESP8266 Core содержит esp_yield();
А вот всякие долгие циклы, в которых yield() забыт - таки да, могут взбесить watchdog.
в том то и дело, что сканер, залитый в esp нашел датчик с этим адресом..
Закомментируйте в сканере Wire.begin() и зачекайте результат.
Потом посмотрите в https://github.com/adafruit/Adafruit_BME280_Library/blob/master/Adafruit_BME280.cpp:
Подумайте, почему проблема связана с отсутствующим bme.begin()
Попытался я проинициализировать датчик строкой кода
bme.begin(0x76);
впрочем без указания адреса результат тот же.
в результате в сом порт выдает
Какие элементы находятся с другой стороны платы модуля?
Какие элементы находятся с другой стороны платы модуля?
четыре резистора 103 и два блокировочных конденсатора.Ну и сам датчик.Подключаю его на 3,3 в
Странно, конечно. Вы уверены, что это BME, а не BMP? Адреса у них могут быть одинаковые, а вот Chip ID - разные.
Я бы вот это прогнал: https://github.com/adafruit/Adafruit_BME280_Library/blob/master/examples/bme280test/bme280test.ino
С delay() там всё ок, его имплементация, содержащаяся в ESP8266 Core содержит esp_yield();
А вот всякие долгие циклы, в которых yield() забыт - таки да, могут взбесить watchdog.
Да, думаю, что это так.
Просто я экспериментировал именно с длинным циклом и на основе этого сделал неверные выводы.
Попробуй библиотеку отсюда: http://cactus.io/hookups/sensors/barometric/bme280/hookup-arduino-to-bme280-barometric-pressure-sensor
все разобрался.Оказывается датчик был BMP 280.Обманули кытайцы)
Спасибо всем,кто помог