• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Arduino IDE esp8266+dht22+bmp085

kkozyrev

New member
Vitaly, спасибо. Смогу протестировать только в понедельник.:(
Отпишусь потом по итогам.
Хотя может кто и раньше сделает ;)
 

kkozyrev

New member
странно. компилятор ругается на Wire.pins(0,2)
пишет: "'Wire' does not name a type"
 

Vitaly

Member
как я писал ранее .pins устаревшая функция и надо использовать Wire.begin(sda,scl);
не помню только где я это прочитал)
 

kkozyrev

New member
упс... точно.
Wire.begin(0,2); скомпилировалось... спасибо.
другая проблемка... не могу найти скетч ардуиновский для bmp085, чтобы под esp плату компилировался...
(вышеприведенный BigAlex пример не желает собираться :()
 
Последнее редактирование:

Vitaly

Member
с какими ошибками?

последней ли сборки библиотеки есп под ардуину? если старые надо сменить ссылку на staging, стереть скачанное и переставить через boardmanager

мной выложенный в начале скетч начал собираться после какого-то обновления esp либ, но за неимением свободной bmp проверить я его не могу
поэтому там только инициализация прописана
 

big_alex

New member
@kkozyrev, странно у меня компилится и работает с этими библиотеками BMP085 и DHT
причем именно с Wire.pins, правда выдает предупреждение, но на работу не влияет
 

Вложения

  • 11.6 KB Просмотры: 57
Последнее редактирование:

kkozyrev

New member
Vitaly, лезет такая ошибка
warning: [HASHTAG]#warning[/HASHTAG] "OneWire. Fallback mode. Using API calls for pinMode,digitalRead and digitalWrite. Operation of this library is not guaranteed on this architecture." [-Wcpp]
 

kkozyrev

New member
big_alex, у меня вылезает эта ошибка, но потом компилируется.
А сама программа тоже потом на ESP-шке работает?
 

big_alex

New member
@kkozyrev, программа работает как часы, но предупреждение у меня другое

ESP8266_meteo.ino: In function 'void setup()':
ESP8266_meteo.ino:41:19: warning: 'void TwoWire::pins(int, int)' is deprecated (declared at C:\Users\Aleksandr\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.5-1044-g170995a\libraries\Wire/Wire.h:54) [-Wdeprecated-declarations]

UPD еще я выкинул строки про OneWire и добавил счет по прерываниям (хочу счетчик Гейгера подключить), отмечу что с ардуино я столкнулся впервые и вообще не программист, поэтому код такой какой есть ))) благодаря форумам.

Код:
//Мини метеостанция с веб сервером
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include "DHT.h"
#include <EEPROM.h>
#define DHTPIN 5 //GPIO5
#define DHTTYPE DHT21   // DHT21(AM2301)

int imp_sum = 0; // Сумма накопленых импульсов
unsigned long currentTime=0;
unsigned long startTime=millis();
int imp_val = 0; // Счетчик импульсов
unsigned long timer = 0;
unsigned long timer1=millis();
DHT dht(DHTPIN, DHTTYPE, 15);
const char* ssid = "my_ssid"; // Имя сети для подключения в режиме клиента
const char* ssid2 = "Wi-Fi-METEOSTATION(12121212)"; // Имя сети в режиме точки доступа
const char* password = "my_password"; // Пароль сети в режиме клиента
const char* password2 = "12121212"; // Пароль сети в режиме точки доступа
const char* host = "narodmon.ru"; //Адрес сервера, куда передаются данные
const char* key   = "yourkey"; //Ключ доступа к серверу

extern "C" {
#include "user_interface.h"
uint16 readvdd33(void);
}

ESP8266WebServer server(80);
//#define REPORT_INTERVAL 60
const int led = 13;
Adafruit_BMP085 bmp;


void setup(void)
{
  attachInterrupt(4, IMP_IN, FALLING); // Активируем внешнее прерывание
  Serial.begin(115200);
  Wire.pins(14, 12);// устанавливаем пины SDA,SCL для i2c
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }

  //Serial.begin(115200);
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);

  // Connect to WiFi network
  // Выбираем режим Wi-Fi
  // Выбор режимов выполняется изменением состояния 13 пина.
  // если 1, то точка доступа
  // если 0, то режим клиента
  if (digitalRead(13)==1)
  {
  WiFi.mode(WIFI_AP); //Режим Wi-Fi Точка доступа
  WiFi.softAP(ssid2, password2);//Поднятие точки доступа
  Serial.println("");
  Serial.println("AP mode"); //Говорим что мы в режиме точки доступа
  }
  else
  {
   Serial.print("Wait for connection\n\r");
   WiFi.mode(WIFI_STA); //Режим Wi-Fi клиент
   WiFi.begin(ssid, password); //Подключение в режиме клиента

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Client mode");// Говорим что мы в режиме клиент
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  }
    server.on("/", handle_root);
    server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
    delay(100);
  });
  server.begin();
  Serial.println("HTTP server started");
  delay(100);

  //dht21 sensor
  Serial.println("DHTxx test!");
  dht.begin();
  delay(100);
  }

//-------------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------

void data() {
   //dht21

  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  //float hi = dht.computeHeatIndex(f, h, true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  Serial.println();
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
       
//bmp180
  Serial.print("Temperature = ");
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");
   
  Serial.print("Pressure = ");
  Serial.print(bmp.readPressure()/133.322);
  Serial.println(" mm");

  float pressure = (bmp.readPressure()/133.322);
  float temp180 = (bmp.readTemperature());

//----------------------------------------------------------------------------------------
//Формируем GET запрос к серверу
  Serial.print("connecting to ");
  Serial.println(host);
  // Используем WiFiClient класс для выполнения TCP подключения
  WiFiClient client;
  const int httpPort = 8283;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
    Serial.println("connect - OK ");
  }
   
  digitalWrite(led, 1);
  // Здесь мы отправляем запрос к удаленному серверу
  client.print(String ("#18-FE-34-A3-92-95\n") + "#T1#" + t + "\n" +
               "#H1#" + h + "\n" +
               "#T2#" + temp180 + "\n" +
               "#P1#" + pressure + "\n"
               "##");
  delay(200);
// Выводим то, что отправили к серверу
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
  digitalWrite(led, 0);
  }
//----------------------------------------------------------------------
void handle_root() { 
  digitalWrite(led, 1);
  //Веб сервер
    server.send(200, "text/html", "<!DOCTYPE html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"width=400px\"><title>Wi-Fi ESP8266 Метеостанция</title>"
  "<style type=\"text/css\">body\{background-color: #7D8EE2;color:#FFF;}"
"a {color:#73B9FF;}"
".blockk {border:solid 1px #2d2d2d;text-align:center;background:#0059B3;padding:10px 10px 10px 10px;-moz-border-radius: 5px;-webkit-border-radius: 5px;border-radius: 5px;}"
".blockk {border:double 2px #000000;-moz-border-radius: 5px;-webkit-border-radius: 5px;border-radius: 5px;}"
"</style><style type=\"text/css\" media=\'(min-width: 810px)\'>body\{font-size:18px;}.blockk \{width: 400px;}</style>"
"<style type=\"text/css\" media=\'(max-width: 800px) and (orientation:landscape)\'>body\{font-size:8px;}</style><meta http-equiv=\"REFRESH\" content=\"300\"></head><body><center><div class=\"blockk\">Мини Метеостанция на ESP8266<br><hr><b>AM2301:</b><br>Температура: "+String(dht.readTemperature())+" &deg;C.<br> Влажность (отн.): "+String(dht.readHumidity())+" %.<br>Ощущаемая температура: "+String((5*(dht.computeHeatIndex(dht.readTemperature(true), dht.readHumidity(), true)-32))/9)+" &deg;C.<br><hr><b>BMP180:</b><br>Температура: "+String(bmp.readTemperature())+" &deg;C.<br> Давление(атм.): "+String(bmp.readPressure()/133.322)+" мм.рт.ст.<br><hr><b>СБМ-19:</b><br>Радиация: " +String((imp_sum/5)*0.21)+ " мкР/ч <br><hr><b>Питание:</b><br>Напряжение: " +String(readvdd33())+ " мВ <br><hr><b>Память:</b><br>Свободно: " +String(ESP.getFreeHeap())+ " байт <hr></div></center></body></html>");
  digitalWrite(led, 0);
  }


// Функция обработки сигнала со счетчика Гейгера
void IMP_IN() {
  if (currentTime<=300000){    // Время измерения 5 минут (300000)
  imp_val++;
  currentTime=millis()-startTime;
  Serial.println(currentTime);
  delay (10);
  }
else{
  Serial.println("end 5 min");
  imp_sum=imp_val;
  currentTime=0;
  startTime=millis();
  imp_val=0;
  Serial.println(currentTime);
  Serial.println(imp_sum);
  }
}
void loop(void){
  if (timer<=600000){
  timer=millis()-timer1;
  delay (50);
  server.handleClient();
  delay (50);
  }
else{
  timer=0;
  timer1=millis();
  data();
  }
}
 
Последнее редактирование:

Vitaly

Member
Кстати вот тут в ошибке и видно сообщение что wire.pins deprecated и что собираем с либами версии 1.6.5-1044-g170995a у меня такие же
big_alex, а если заменить Wire.pins(14, 12); на Wire.begin(14,12); варнинг должен уйти

kkozyrev, какая версия библиотек используется при компиляции? посмотреть можно в папке c:\Users\user\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\
 

big_alex

New member
@Vitaly, спасибо, действительно предупреждений нет. Осталось с readvdd33 разобраться, а то раз 36, а раз 3370 показывает.
 

kkozyrev

New member
Vitaly, вот с такой версией 1.6.5-947-g39819f0 вообще не собирается у меня
c:/users/љ®бвп/appdata/roaming/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libm.a(lib_a-e_pow.o): In function `__ieee754_pow':
Ошибка компиляции.
 

Vitaly

Member
во первых убедится что в "Arduino IDE, далее Файл – Настройки – в поле Additional Boards Manager URLs"
ссылка не на стабильную версию http://arduino.esp8266.com/package_esp8266com_index.json
а на "ночную сборку" - http://arduino.esp8266.com/staging/package_esp8266com_index.json

потом в профиле пользователя c:\Users\username\AppData\Roaming\Arduino15\packages\ удалить каталог esp8266
и в c:\Users\username\AppData\Roaming\Arduino15\ файлы package_esp8266com_index.json и package_esp8266com_index.json.sig.tmp

после чего можно повторно установить библиотеки через tools-> board -> boards manager
 

big_alex

New member
@kkozyrev, ну так выше есть мой код и если заменить Wire.pins(14, 12); на Wire.begin(14,12) компилится без проблем, кстати я сначала ставил стабильную, а потом ночную сборку IDE
 
Последнее редактирование:

kkozyrev

New member
господа, скетч наконец-то начал компилироваться. Ура!!!
Но в ком порт валиться вот это:

ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1264, room 16
tail 0
chksum 0x42
csum 0x42
~ld

Что за бред?
 
Сверху Снизу