1

Topic: датчик давления и температуры BMP280

Нужна помощь, хочу вывести данные с датчика BMP280 на приложение RemoteXY в Android (через ОБЛАКО). Датчик BMP280 + WeMos D1.
Стандартный тестовый скетч (bmp280test.ino) работает но он выводит данные только на монитор.
Помогите со скетчем для RemoteXY в Android!?

2

Re: датчик давления и температуры BMP280

Написал такой скетч, подскажите что в нем НЕ ТАК?:

#define REMOTEXY_MODE__ESP8266WIFI_LIB_CLOUD
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_WIFI_SSID "netis"
#define REMOTEXY_WIFI_PASSWORD "password"
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com"
#define REMOTEXY_CLOUD_PORT 6376
#define REMOTEXY_CLOUD_TOKEN "***3bdabf3214f3******"


// конфигурация интерфейса   
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,0,0,18,0,30,0,8,13,1,
  67,0,17,12,30,17,1,26,6,67,
  0,17,43,31,18,6,26,6,67,0,
  17,72,30,17,94,26,6 };
   
// структура определяет все переменные вашего интерфейса управления 
struct {

    // output variable
  char text_temp[11];  // =строка UTF8 оканчивающаяся нулем
  char text_davl[11];  // =строка UTF8 оканчивающаяся нулем
  char text_visot[11];  // =строка UTF8 оканчивающаяся нулем

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

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

Adafruit_BMP280 bmp; // I2C

void setup()
{
  RemoteXY_Init ();
  Serial.begin(9600);
}
void loop()
{
  RemoteXY_Handler ();
  float temp = (bmp.readTemperature());   
  dtostrf (temp, 0, 1, RemoteXY.text_temp);
  float davl = (bmp.readPressure()/133.3);
  dtostrf (davl, 0, 1, RemoteXY.text_davl);
  float visot = (bmp.readAltitude(1013.25));
  dtostrf (visot, 0, 1, RemoteXY.text_visot);
delay(1000);
}

3

Re: датчик давления и температуры BMP280

Датчик сам правильно подключен?
В монитор порта данные с датчика корректно отправляются?

4

Re: датчик давления и температуры BMP280

ПОМОГИТЕ со скетчем для BMP280!!!

Так и не получилось вывести данные на екран СМАРТФОНА.

на экран компа по I2C выводит без проблем, а вот на экран СМАРТФОНА данные датчика не выводятся!
(свой скетч делал по примерам из сайта, ЧТО В НЕМ НЕ ТАК???)

5 (edited by alchi26 2018-05-16 12:35:43)

Re: датчик давления и температуры BMP280

Попробуй убрать delay и выведи на экран для начала значение какой-нибудь переменной контроллера

6 (edited by ssb19591 2018-07-13 19:46:31)

Re: датчик давления и температуры BMP280

  Nodemcu V3 Lua WI-FI Модуль esp8266 + Дополнительная память 32 м flash, usb-serial ch340g  от компании RobotDyn + датчик BME280 (температура, давление, влажность) фирмы BOSH  под управлением RemoteXY.
    Перебрав кучу библиотек, излив кучу пота – получил результат. Многие библиотеки для BME280 прекрасно работают с  монитором последовательного порта Ардуино IDE и Nodemcu V3, но на отрез отказались работать вместе с RemoteXY. Найдя библиотеку, работающую с RemoteXY в локальной сети я провёл серию экспериментов на предмет, того, что затыкает работу RemoteXY, а что нет.
    Первое – перед выводом на консоль RemoteXY данных должна быть обязательна строка вывода в последовательный порт.
Serial.print(t);                                       // t – температура снятая с датчика
dtostrf(t, 0, 2, RemoteXY.temp_1);  // где temp_1 текстовая переменная RemoteXY
    Второе – в конце скетча в теле функции loop всегда ставят задержку в 1с - 1,5с , для того чтобы пользователь мог увидеть данные идущие в мониторе порта. Так вот с этой задержкой RemoteXY работать тоже не будет.
delay(1500); //  закомментируйте эту задержку при работе с RemoteXY !!!
Работайте последовательно. В начале раскомментируйте строки с пояснениями для вывода показаний датчика BME280 на монитор последовательного порта Ардуино IDE, убедитесь что датчик работает с вашей Nodemcu V3. Только потом приступайте работать со скетчем для RemoteXY. Я работал и протестировал всё с вариантами Arduino IDE 1.8.2 и Arduino IDE 1.6.5. Все скетчи приведены уже для работы с RemoteXY.
      Для работы с облаком – тоже не торопитесь. Первое – убедитесь, что ваша Nodemcu V3 подключилась к вашей локальной сети. Узнайте её адрес (это можно сделать на вашем WiFi роутере) полученный по DHCP, и дайте команду ping в командной строке операционной системы.
ping 192.168.0.2 –t
это для примера – ваш адрес может быть другим. Убедившись, что Nodemcu V3 подключилась к роутеру зайдите на сайт RemoteXY в свой аккаунт
http://remotexy.com/ru/account/tokens/
Проверьте свой токен, и посмотрите подключилась ли ваша Nodemcu V3 к облаку – там должно появиться сообщение connect. Только после этого имеет смысл браться за смартфон. Тут тоже нюанс, я прошляпал, что порт устройства один 6376, а на смартфоне нужно указать другой порт 6375. Вроде всё перед носом, но человеку свойственно ошибаться. При работе состояние вашего устройства будет меняться с disconnected на  connect и при работе с ним на used. Но состояние меняется не мгновенно и лучше перезагружать страничку сайта принудительно.
Последний нюанс, у меня несколько раз после заливки скетча в Nodemcu – она даже и не думала работать, просто достаньте разьем USB порта и воткните по новой, этим вы перезапустите внутреннюю программу Nodemcu. Как правило она тут же оживала.
    К посту прилагаю 3 скетча для работы с RemoteXY по локальной сети, в варианте точки доступа и в варианте работы через облако cloud.remotexy.com. Плюс рабочую библиотеку для BME280.

Упсс я не знаю как здесь вложить архив с библиотекой.

7

Re: датчик давления и температуры BMP280

/*
   -- NodeMCUtcpIP --

  Nodemcu V3 Lua WI-FI Модуль esp8266 + Дополнительная память 32 м flash, usb-serial ch340g
  от компании RobotDyn
  плюс датчик BME280 (температура, давление, влажность);
  под управлением RemoteXY

  вариант скетча для локальной сети
*/

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "*****"      // SSID вашего WiFi роутера
#define REMOTEXY_WIFI_PASSWORD "*****"  // ваш пароль для подключения к роутеру
#define REMOTEXY_SERVER_PORT 6377


// конфигурация интерфейса

#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255, 0, 0, 27, 0, 87, 0, 8, 161, 0,
  67, 4, 4, 28, 24, 5, 164, 26, 9, 67,
  4, 36, 28, 28, 5, 164, 26, 9, 67, 4,
  72, 28, 23, 5, 164, 26, 9, 129, 0, 2,
  17, 97, 6, 17, 84, 32, 40, 208, 179, 209,
  128, 46, 208, 161, 41, 32, 32, 32, 208, 148,
  208, 176, 208, 178, 208, 187, 46, 40, 208, 188,
  208, 188, 208, 160, 209, 130, 41, 32, 32, 208,
  146, 208, 187, 208, 176, 208, 182, 208, 189, 32,
  40, 37, 41, 0
};

// структура определяет все переменные вашего интерфейса управления

struct {

  // output variable

  char temp_1[9];  // =строка UTF8 оканчивающаяся нулем
  char press_2[9];  // =строка UTF8 оканчивающаяся нулем
  char hum_3[9];  // =строка UTF8 оканчивающаяся нулем

  // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)


/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////


#include "Seeed_BME280.h"
#include <Wire.h>

BME280 bme280;

#define pin_sda D1 // default sda pin //вставить свое значение
#define pin_scl D2 // default scl pin //вставить свое значение




void setup()
{
  RemoteXY_Init ();


  // TODO you setup code

  Serial.begin(9600);
  Wire.begin(D1, D2);   // настройка выходов для I2C датчика BME280 D1 NodeMCU -> SDA датчика;   D2 NodeMCU -> SCL датчика;
  if (!bme280.init()) {
    Serial.println("Device error!");
  }

  delay(10);

}

float t, p, h; // переменные температуры, давления, влажности


void loop()

{
  RemoteXY_Handler ();


  // получение данных с датчика

  t = (bme280.getTemperature());
  p = (bme280.getPressure() * 0.00750063); // перевод в мм ртутного столба
  h = (bme280.getHumidity());


  //get and print temperatures

  //Serial.print("Temp: "); // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE
  Serial.print(t);
  //Serial.println(" C"); //  раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE

  dtostrf(t, 0, 2, RemoteXY.temp_1);

  //get and print atmospheric pressure data

  //Serial.print("Pressure: ");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE
  Serial.print(p);
  //Serial.println(" mm.Hg");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE

  dtostrf(p, 0, 2, RemoteXY.press_2);

  //get and print humidity data

  // Serial.print("Humidity: ");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE
  Serial.print(h);
  //Serial.println(" %");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE

  dtostrf(h, 0, 2, RemoteXY.hum_3);

  // раскомментируйте строку с задержкой в 1,5с для первоначального теста датчика через монитор порта Ардуино IDE
  // delay(1500); //  закомментируйте эту задержку при работе с RemoteXY !!!


}

8

Re: датчик давления и температуры BMP280

/*
   -- NodeMCUtcpIP --

  Nodemcu V3 Lua WI-FI Модуль esp8266 + Дополнительная память 32 м flash, usb-serial ch340g
  от компании RobotDyn
  плюс датчик BME280 (температура, давление, влажность);
  под управлением RemoteXY

  вариант скетча для работы как точка доступа

*/

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY

#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения

#define REMOTEXY_WIFI_SSID "RemoteXY"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377


// конфигурация интерфейса

#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255, 0, 0, 27, 0, 87, 0, 8, 161, 0,
  67, 4, 4, 28, 24, 5, 164, 26, 9, 67,
  4, 36, 28, 28, 5, 164, 26, 9, 67, 4,
  72, 28, 23, 5, 164, 26, 9, 129, 0, 2,
  17, 97, 6, 17, 84, 32, 40, 208, 179, 209,
  128, 46, 208, 161, 41, 32, 32, 32, 208, 148,
  208, 176, 208, 178, 208, 187, 46, 40, 208, 188,
  208, 188, 208, 160, 209, 130, 41, 32, 32, 208,
  146, 208, 187, 208, 176, 208, 182, 208, 189, 32,
  40, 37, 41, 0
};

// структура определяет все переменные вашего интерфейса управления

struct {

  // output variable
  char temp_1[9];  // =строка UTF8 оканчивающаяся нулем
  char press_2[9];  // =строка UTF8 оканчивающаяся нулем
  char hum_3[9];  // =строка UTF8 оканчивающаяся нулем

  // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////


#include "Seeed_BME280.h"
#include <Wire.h>

BME280 bme280;

#define pin_sda D1 //
#define pin_scl D2 //


void setup()
{
  RemoteXY_Init ();

  // TODO you setup code
  Serial.begin(9600);
  Wire.begin(D1, D2);  // настройка выходов для I2C датчика BME280 D1 NodeMCU -> SDA датчика;   D2 NodeMCU -> SCL датчика;
  if (!bme280.init()) {
    Serial.println("Device error!");
  }

  delay(10);

}

float t, p, h; // переменные температуры, давления, влажности


void loop()
{
  RemoteXY_Handler ();


  // получение данных с датчика

  t = (bme280.getTemperature());
  p = (bme280.getPressure() * 0.00750063); // перевод в мм ртутного столба
  h = (bme280.getHumidity());


  //get and print temperatures

  //Serial.print("Temp: "); // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE
  Serial.print(t);
  //Serial.println(" C"); //  раскомментируйте эти строки для первоночального теста датчика через монитор порта Ардуино IDE

  dtostrf(t, 0, 2, RemoteXY.temp_1);

  //get and print atmospheric pressure data

  //Serial.print("Pressure: ");  // раскомментируйте эти строки для первоночального теста датчика через монитор порта Ардуино IDE
  Serial.print(p);
  //Serial.println(" mm.Hg");  // раскомментируйте эти строки для первоночального теста датчика через монитор порта Ардуино IDE

  dtostrf(p, 0, 2, RemoteXY.press_2);

  //get and print humidity data

  // Serial.print("Humidity: ");  // раскомментируйте эти строки для первоночального теста датчика через монитор порта Ардуино IDE
  Serial.print(h);
  //Serial.println(" %");  // раскомментируйте эти строки для первоночального теста датчика через монитор порта Ардуино IDE

  dtostrf(h, 0, 2, RemoteXY.hum_3);

  // раскомментируйте строку с задержкой в 1,5с для первоночального теста датчика через монитор порта Ардуино IDE
  // delay(1500); //  закомментируйте эту задержку при работе с RemoteXY !!!

}

9

Re: датчик давления и температуры BMP280

/*
    -- NodeMCUcloud --

  Nodemcu V3 Lua WI-FI Модуль esp8266 + Дополнительная память 32 м flash, usb-serial ch340g
  от компании RobotDyn
  плюс датчик BME280 (температура, давление, влажность);
  под управлением RemoteXY

  вариант скетча для работы через облако
*/

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY

#define REMOTEXY_MODE__ESP8266WIFI_LIB_CLOUD
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения

#define REMOTEXY_WIFI_SSID "******"  // SSID вашего WiFi роутера
#define REMOTEXY_WIFI_PASSWORD "*****" // ваш пароль для подключения к роутеру
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com"
#define REMOTEXY_CLOUD_PORT 6376
#define REMOTEXY_CLOUD_TOKEN "***************" // ваш токен полученный на сайте RemoteXY


// конфигурация интерфейса

#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255, 0, 0, 27, 0, 87, 0, 8, 161, 0,
  67, 4, 4, 28, 24, 5, 164, 26, 9, 67,
  4, 36, 28, 28, 5, 164, 26, 9, 67, 4,
  72, 28, 23, 5, 164, 26, 9, 129, 0, 2,
  17, 97, 6, 17, 84, 32, 40, 208, 179, 209,
  128, 46, 208, 161, 41, 32, 32, 32, 208, 148,
  208, 176, 208, 178, 208, 187, 46, 40, 208, 188,
  208, 188, 208, 160, 209, 130, 41, 32, 32, 208,
  146, 208, 187, 208, 176, 208, 182, 208, 189, 32,
  40, 37, 41, 0
};

// структура определяет все переменные вашего интерфейса управления

struct {

  // output variable
  char temp_1[9];  // =строка UTF8 оканчивающаяся нулем
  char press_2[9];  // =строка UTF8 оканчивающаяся нулем
  char hum_3[9];  // =строка UTF8 оканчивающаяся нулем

  // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



#include "Seeed_BME280.h"
#include <Wire.h>

BME280 bme280;

#define pin_sda D1 // default sda pin //вставить свое значение
#define pin_scl D2 // default scl pin //вставить свое значение


void setup()
{
  RemoteXY_Init ();


  // TODO you setup code
  Serial.begin(9600);
  Wire.begin(D1, D2); // настройка выходов для I2C датчика BME280 D1 NodeMCU -> SDA датчика;   D2 NodeMCU -> SCL датчика;
  if (!bme280.init()) {
    Serial.println("Device error!");
  }

  delay(10);

}

float t, p, h; // переменные температуры, давления, влажности


void loop()
{ RemoteXY_Handler ();


  // получение данных с датчика

  t = (bme280.getTemperature());
  p = (bme280.getPressure() * 0.00750063); // перевод в мм ртутного столба
  h = (bme280.getHumidity());


  //get and print temperatures

  //Serial.print("Temp: "); // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE
  Serial.print(t);
  //Serial.println(" C"); //  раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE

  dtostrf(t, 0, 2, RemoteXY.temp_1);

  //get and print atmospheric pressure data

  //Serial.print("Pressure: ");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE
  Serial.print(p);
  //Serial.println(" mm.Hg");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE

  dtostrf(p, 0, 2, RemoteXY.press_2);

  //get and print humidity data

  // Serial.print("Humidity: ");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE
  Serial.print(h);
  //Serial.println(" %");  // раскомментируйте эти строки для первоначального теста датчика через монитор порта Ардуино IDE

  dtostrf(h, 0, 2, RemoteXY.hum_3);

  // раскомментируйте строку с задержкой в 1,5с для первоначального теста датчика через монитор порта Ардуино IDE
  // delay(1500); //  закомментируйте эту задержку при работе с RemoteXY !!!


}

10

Re: датчик давления и температуры BMP280

Ссылка на рабочую библиотеку, которая идёт в скетчах.

https://github.com/Seeed-Studio/Grove_BME280

Еще нюанс в библиотеке ВМЕ280 указан адрес I2C для датчика  с адресом 0х76
у меня был такой же, но бывают датчики с адресом  0х77

Его нужно изменить на свой внутри библиотеки в самом начале файла Seeed_BME280.h

11

Re: датчик давления и температуры BMP280

И последнее - BME280 отличается от BMP280 только дополнительным измерением влажности. В целом датчик такой же. Если закомментировать строки относящиеся к влажности я думаю - работать будет. Но увы у меня нет датчика BMP280 и проверить я этого не могу.

12

Re: датчик давления и температуры BMP280

Ну и ссылка на проект с облаком

http://remotexy.com/ru/editor/b7d994b10 … fa6f850a2/

13

Re: датчик давления и температуры BMP280

В чем может быть поблема?
Загрузил выше предложенные скетчи. Но при проверке "Состояния устройства"
постоянно выдает "disconnected"
Поэтому связи с смартфоном НЕТ!

Хотя другими программами (скетчами) состояние "connect"