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

8266 и bme280

Alexgulin

New member
Код:
[code]
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <stdint.h>
#include "SparkFunBME280.h"
#include "Wire.h"
BME280 mySensor;
const char* ssid     = "вашаSSID";
const char* password = "ваш пароль";
ESP8266WebServer server(80);
String webString = "";   // String to display
void handle_root() {
  server.send(200, "text/html", "Hello from the weather esp8266, read from /temp or /humidity");
  delay(100);
}
void setstringtoweb() {
  webString = "";
  webString += "<!DOCTYPE HTML> \n";
  //  webString += "HTTP/1.1 200 OK \n";
  //  webString += "Content-Type: text/html \n";
  //  webString += "Connection: close \n";  // the connection will be closed after completion of the response
  //  webString += "Refresh: 10 \n";  // refresh the page automatically every 10 sec
  //  webString += "<!DOCTYPE HTML> \n";

  webString += "<html><head> \n";
  webString += "<script src='https://www.google.com/jsapi'></script><script> \n";
  webString += "google.load('visualization','1',{packages:['gauge']});\n";
  webString += "google.setOnLoadCallback(drawChart);\n";
  webString += "google.setOnLoadCallback(drawChart2);\n";
  webString += "function drawChart() {\n";
  webString += "var data = google.visualization.arrayToDataTable([";
  webString += "['Label','Value']";
  webString += ",['Temperature, C'," + String(mySensor.readTempC()) + "]]); \n";
  webString += "var options = {max:40,width:800,height:240,redFrom:35,redTo:40,";
  webString += "yellowFrom:28,yellowTo:35,greenFrom:18,greenTo:28,minorTicks:5}; \n";
  webString += "var chart = new google.visualization.Gauge(document.getElementById('oil')); \n";
  webString += "chart.draw(data,options);}\n";

  webString += "function drawChart2() {\n";
  webString += "var data = google.visualization.arrayToDataTable([";
  webString += "['Label','Value']";
  webString += ",['Humidity, %'," + String(mySensor.readFloatHumidity()) + "]]); \n";
  webString += "var options = {width:800,height:240,redFrom:0,redTo:15,";
  webString += "yellowFrom:15,yellowTo:30,greenFrom:30,greenTo:60,minorTicks:5}; \n";
  webString += "var chart = new google.visualization.Gauge(document.getElementById('oil2')); \n";
  webString += "chart.draw(data,options);} \n </script></head><body> \n";
  webString += "<div id='oil' style='width:800px;height:240px;'></div>\n";
  webString += "<div id='oil2' style='width:800px;height:240px;'></div></body></html>\n";

  server.send(200, "text/html", webString);            // send to someones browser when asked
}
void setup(void)
{
mySensor.settings.commInterface = I2C_MODE;
  mySensor.settings.I2CAddress = 0x76;
  mySensor.settings.runMode = 3; //Normal mode
  mySensor.settings.tStandby = 0;
  mySensor.settings.filter = 4;
  mySensor.settings.tempOverSample = 1;
  mySensor.settings.pressOverSample = 1;
  mySensor.settings.humidOverSample = 1;
  (mySensor.begin(), HEX);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  server.on("/", handle_root);
  server.on("/p", [](){  // if you add this subdirectory to your webserver call, you get text below :)
    (mySensor.begin(), HEX);       // read sensor
    webString = "Temperature: " + String(mySensor.readTempC()) + " C"; // Arduino has a hard time with float to string
    webString += "       Pressure: " + String(mySensor.readFloatPressure()/100+16) + " HPa";
    webString += "       Humidity: " + String(mySensor.readFloatHumidity()) + " %";
    server.send(200, "text/plain", webString);            // send to someones browser when asked
  });

  server.on("/g", []() { // ключик для вывода графической информации
    (mySensor.begin(), HEX);       // read sensor
    setstringtoweb();       //выводим картинку
  });
  server.begin();
}
void loop(void)
{
  server.handleClient();
}
[/code]
Здравствуйте. Создал(ну не то чтобы создал, слепил скорее) рабочую программу для того чтобы посмотреть за климатом за окном не отрываясь от браузера. Смотрим какой локальный адрес получила ваша 8266 и по адресу ***.***.***.***/p смотрим температуру, давление и влажность за окном.
Прошу вашей помощи, я слабоват в написании программы с нуля. Попытался сделать график, считаю это более наглядная вещь. смог по адресу ***.***.***.***/g вывести круглый прибор со стрелкой. однако хочу линейный график. Можно ли поправить код пожалуйста. Так как у меня впн подключение к домашнему роутеру, просматривать погоду можно с любой точки где есть интернет. Знаю что есть сайт народного мониторинга, но пока не могу разобраться как 8266 и bme280 соединить в скетче для сайта
Нашёл код, но он похоже не на arduino ide и подправить его мне вряд ли удасться
Код:
//вывод данных с помощью web-сервера в виде графиков
// автор А. Коновалов 2015 г.
//#include <UIPEthernet.h>
#include <Ethernet.h>
#include <SPI.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,26,15);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
const char str1[] PROGMEM = "<!DOCTYPE html><script src=";
const char str2[] PROGMEM = "\«www.google.com/jsapi?autoload={'modules':[{'name':»;
const char str3[] PROGMEM = "'visualization','version':'1','packages':['corechart']}]}\">";
const char str4[] PROGMEM = " »;
const char str12[] PROGMEM = " ";

const char* const string_table[] PROGMEM = {str1, str2, str3, str4, str5, str6, str7};
const char* const string_table2[] PROGMEM = {str8, str9, str10, str11, str12};
char myChar;
char buffer[80];

unsigned long previousMillis1 = 0;// посл момент времени
unsigned long previousMillis2 = 1;// посл момент времени
unsigned long previousMillis3 = 1;// посл момент времени

long OnTime2 = 60000; // минута
long OnTime3 = 600000; // полчаса
int In_sec = 0; // отсчет за сек
int In_min = 0; // отсчет за мин
int In_half = 0; // отсчет за полчаса

long Sum_min = 0; // сумма за мин
long Sum_half = 0; // сумма за полчаса
float Sum_base_min = 0;
float Sum_base_half = 0;
int i,j,k =0;

void setup()
{
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();

}
//unsigned long begMillis = millis();// тек время в мс
void loop()
{
unsigned long currentMillis = millis();// тек время в мс

In_sec = analogRead(0);
Sum_min = Sum_min + (currentMillis — previousMillis1) * In_sec;
In_min = (Sum_min + Sum_base_min ) / (OnTime2 * i + currentMillis — previousMillis2);
Sum_half = Sum_half + (currentMillis — previousMillis1) * In_sec;
In_half = (Sum_half + Sum_base_half) / (OnTime3 * j + currentMillis — previousMillis3);
previousMillis1 = currentMillis; // запоминаем момент времени

if(currentMillis — previousMillis2 >= OnTime2)
{ i=1;
Sum_base_min = Sum_min;
previousMillis2 = currentMillis; // запоминаем момент времени
Sum_min = 0;
}
if(currentMillis — previousMillis3 >= OnTime3)
{ j=1;
Sum_base_half = Sum_half;
previousMillis3 = currentMillis; // запоминаем момент времени
Sum_half = 0;
}

/*
In_sec = 990;
In_min = 500;
In_half = 90;

*/
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {

for (int i = 0; i < 7; i++)
{
strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i]))); // Necessary casts and dereferencing, just copy.
client.print(buffer);
delay( 500 );
}

client.print("['Сейчас', ");
client.print(660);
client.print(", ");
client.print(1120);
client.print( "],]);");


for (int i = 0; i < 5; i++)
{
strcpy_P(buffer, (char*)pgm_read_word(&(string_table2[i]))); // Necessary casts and dereferencing, just copy.
client.print(buffer);
delay( 500 );
}

break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}
 
Последнее редактирование:

Planer

New member
Здравствуйте, я у себя сделал как мне кажется удобнее, взял и данные с бме 280 отправил на облачный брокер по MQTT протоколу, ну а забирать данные оттуда можно любым девайсом хочешь мобильником с клиентом mqtt, хочешь через сайт в любой точке мира
 
Сверху Снизу