ArchangelNephilim
New member
Сделал метеостанцию работающую на плате Arduino UNO WiFi R3 от RobotDyn с датчиками DS18B20, DHT 21, DHT22 и BMP180... Все данные с датчиков отлично выводяться на LCD дисплей 20x4.
Хочу реализовать
1. Часы с выводом на дисплей.
2. Вывод информации с датчиков на сайт народный мониторинг и доступ на андроид телефоне.
С первым пунктом не могу определиться как реализовать. Со вторым попробовал сам сделать, написал скетч для esp8266 что бы подключался к wifi сети и передавал температуру с ds18b20. Загрузил его. Перезагружаю плату, а esp8266 толи зависает, толи в бесконечный цикл попадает. Кароче говоря неопределенка, если нужно скетч скину. Одним словом нужна помощь в реализации, поэтому прошу помощи у знающих людей.
Хочу реализовать
1. Часы с выводом на дисплей.
2. Вывод информации с датчиков на сайт народный мониторинг и доступ на андроид телефоне.
С первым пунктом не могу определиться как реализовать. Со вторым попробовал сам сделать, написал скетч для esp8266 что бы подключался к wifi сети и передавал температуру с ds18b20. Загрузил его. Перезагружаю плату, а esp8266 толи зависает, толи в бесконечный цикл попадает. Кароче говоря неопределенка, если нужно скетч скину. Одним словом нужна помощь в реализации, поэтому прошу помощи у знающих людей.
#include <Wire.h>
#include "Adafruit_LiquidCrystal.h"
#include <BMP085.h>
#include "stDHT.h"
#include <OneWire.h> //подключаем библиотеку
DHT sens(DHT22); // Указать датчик DHT11, DHT21 или DHT22. (несколько датчиков вписывать не нужно)
// Подключать можно только одинаковые датчики, то есть нельзя использовать одновременно DHT11 и DHT22
BMP085 dps = BMP085();
OneWire ds(8); // Номер ноги к которой подключили датчик
long int Temperature = 0, Pressure = 0;
// initialize the library with the numbers of the interface pins
Adafruit_LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
pinMode(6, INPUT);
digitalWrite(2, HIGH);
pinMode(7, INPUT);
digitalWrite(3, HIGH);
Wire.begin();
delay(1000);
dps.init();
// set up the LCD's number of rows and columns:
lcd.begin(20, 4);
}
void loop()
{
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}
for( i = 0; i < 8; i++) {
Serial.write(' ');
}
if (OneWire::crc8(addr, 7) != addr[7]) {
return;
}
// Первый байт ROM указывает, какой чип
switch (addr[0]) {
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) {
data = ds.read();
}
// Преобразование данных в фактическую температуру
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (long int)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
dps.getPressure(&Pressure);
dps.getTemperature(&Temperature);
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 0);
Serial.print("Давление: ");
Serial.print(Pressure/133.3); //Выводим давление в мм.рт ст
Serial.print(" мм.рт ст\t");
Serial.print("Температура:");
Serial.print(Temperature*0.1); // Температуру в градусах Цельсия
Serial.print(" *C\t");
lcd.print("DABLENIE ");
lcd.print(Pressure/133.3); //Выводим давление в мм.рт ст
lcd.setCursor(0, 1);
Serial.print(" Температура на улице = ");
Serial.print(celsius);
Serial.print(" *C ");
lcd.print("TIn ");
lcd.print(Temperature*0.1);
lcd.setCursor(10, 1);
lcd.print("TOut ");
lcd.print(celsius);
lcd.setCursor(0, 2);
int t = sens.readTemperature(6); // чтение датчика на пине 2
int h = sens.readHumidity(6); // чтение датчика на пине 2
delay(2000);
int t2 = sens.readTemperature(7); // чтение датчика на пине 3
int h2 = sens.readHumidity(7); // чтение датчика на пине 3
Serial.print("Влажность на улице: ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Температура на улице: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print("Влажность в квартире: ");
Serial.print(h2);
Serial.print(" % ");
Serial.print("Температура в квартире: ");
Serial.print(t2);
Serial.println(" *C ");
lcd.print("HumIn ");
lcd.print(h2); //Выводим давление в мм.рт ст
lcd.setCursor(10, 2);
lcd.print("HumOut ");
lcd.print(h); //Выводим давление в мм.рт ст
delay(5000);
}
#include "Adafruit_LiquidCrystal.h"
#include <BMP085.h>
#include "stDHT.h"
#include <OneWire.h> //подключаем библиотеку
DHT sens(DHT22); // Указать датчик DHT11, DHT21 или DHT22. (несколько датчиков вписывать не нужно)
// Подключать можно только одинаковые датчики, то есть нельзя использовать одновременно DHT11 и DHT22
BMP085 dps = BMP085();
OneWire ds(8); // Номер ноги к которой подключили датчик
long int Temperature = 0, Pressure = 0;
// initialize the library with the numbers of the interface pins
Adafruit_LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
pinMode(6, INPUT);
digitalWrite(2, HIGH);
pinMode(7, INPUT);
digitalWrite(3, HIGH);
Wire.begin();
delay(1000);
dps.init();
// set up the LCD's number of rows and columns:
lcd.begin(20, 4);
}
void loop()
{
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}
for( i = 0; i < 8; i++) {
Serial.write(' ');
}
if (OneWire::crc8(addr, 7) != addr[7]) {
return;
}
// Первый байт ROM указывает, какой чип
switch (addr[0]) {
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) {
data = ds.read();
}
// Преобразование данных в фактическую температуру
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (long int)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
dps.getPressure(&Pressure);
dps.getTemperature(&Temperature);
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 0);
Serial.print("Давление: ");
Serial.print(Pressure/133.3); //Выводим давление в мм.рт ст
Serial.print(" мм.рт ст\t");
Serial.print("Температура:");
Serial.print(Temperature*0.1); // Температуру в градусах Цельсия
Serial.print(" *C\t");
lcd.print("DABLENIE ");
lcd.print(Pressure/133.3); //Выводим давление в мм.рт ст
lcd.setCursor(0, 1);
Serial.print(" Температура на улице = ");
Serial.print(celsius);
Serial.print(" *C ");
lcd.print("TIn ");
lcd.print(Temperature*0.1);
lcd.setCursor(10, 1);
lcd.print("TOut ");
lcd.print(celsius);
lcd.setCursor(0, 2);
int t = sens.readTemperature(6); // чтение датчика на пине 2
int h = sens.readHumidity(6); // чтение датчика на пине 2
delay(2000);
int t2 = sens.readTemperature(7); // чтение датчика на пине 3
int h2 = sens.readHumidity(7); // чтение датчика на пине 3
Serial.print("Влажность на улице: ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Температура на улице: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print("Влажность в квартире: ");
Serial.print(h2);
Serial.print(" % ");
Serial.print("Температура в квартире: ");
Serial.print(t2);
Serial.println(" *C ");
lcd.print("HumIn ");
lcd.print(h2); //Выводим давление в мм.рт ст
lcd.setCursor(10, 2);
lcd.print("HumOut ");
lcd.print(h); //Выводим давление в мм.рт ст
delay(5000);
}