Помогите пожалуйста "причесать" скетч контроллера

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Помогите пожалуйста "причесать" скетч контроллера

Сообщение karsotrade » Ср дек 20, 2017 7:21 pm

Добрый вечер. Собрал я из примеров скетч для контроллера температуры и влажности в частном доме. Контроллер сделан на Arduino Nano и W5100, к нему подключено 13 датчиков DHT22. Всё работает, МЖД снимает данные с вэб переменных.
Подскажите пожалуйста, можно ли упростить код (причесать) и можно ли как то уменьшить объём скетча (надо немного места высвободить) я не специалист в таких тонкостях. Делал вариант на Get запросах, но объём выходит ещё больше.
СпойлерПоказать
#include "DHT.h" //библиотека для работы с DHT
#include "SPI.h" //библиотека для работы с SPI
#include "Ethernet.h" //библиотека для работы с Ethernet

#define DHTTYPE DHT22 // DHT 22 (AM2302)

#define DHTPIN1 2 //Обозначаем номер пина, к которому подключен датчик
#define DHTPIN2 3
#define DHTPIN3 4
#define DHTPIN4 5
#define DHTPIN5 6
#define DHTPIN6 7
#define DHTPIN7 8
#define DHTPIN8 9
#define DHTPIN9 14
#define DHTPIN10 15
#define DHTPIN11 16
#define DHTPIN12 17
#define DHTPIN13 18

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x60 }; //вводим mac адрес
IPAddress ip(192, 168, 21, 60); //вводим любой IP
EthernetServer server(80); //инифиализация библиотеки Ethernet server library

EthernetClient client;

DHT dht1(DHTPIN1, DHT22); //инициируем датчик DHT
DHT dht2(DHTPIN2, DHT22);
DHT dht3(DHTPIN3, DHT22);
DHT dht4(DHTPIN4, DHT22);
DHT dht5(DHTPIN5, DHT22);
DHT dht6(DHTPIN6, DHT22);
DHT dht7(DHTPIN7, DHT22);
DHT dht8(DHTPIN8, DHT22);
DHT dht9(DHTPIN9, DHT22);
DHT dht10(DHTPIN10, DHT22);
DHT dht11(DHTPIN11, DHT22);
DHT dht12(DHTPIN12, DHT22);
DHT dht13(DHTPIN13, DHT22);

void setup() {
Ethernet.begin (mac, ip);//запускаем сервер с указанными ранее MAC и вашим IP
Serial.begin (57600);
server. begin();
dht1. begin();
dht2. begin();
dht3. begin();
dht4. begin();
dht5. begin();
dht6. begin();
dht7. begin();
dht8. begin();
dht9. begin();
dht10. begin();
dht11. begin();
dht12. begin();
dht13. begin();
}

void loop() {

float t1 = dht1.readTemperature(); //Считываем температуру в переменную "t"
float h1 = dht1.readHumidity(); //Считываем влажность в переменную "h"
delay(2000);

float t2 = dht2.readTemperature();
float h2 = dht2.readHumidity();
delay(2000);

float t3 = dht3.readTemperature();
float h3 = dht3.readHumidity();
delay(2000);

float t4 = dht4.readTemperature();
float h4 = dht4.readHumidity();
delay(2000);

float t5 = dht5.readTemperature();
float h5 = dht5.readHumidity();
delay(2000);

float t6 = dht6.readTemperature();
float h6 = dht6.readHumidity();
delay(2000);

float t7 = dht7.readTemperature();
float h7 = dht7.readHumidity();
delay(2000);

float t8 = dht8.readTemperature();
float h8 = dht8.readHumidity();
delay(2000);

float t9 = dht9.readTemperature();
float h9 = dht9.readHumidity();
delay(2000);

float t10 = dht10.readTemperature();
float h10 = dht10.readHumidity();
delay(2000);

float t11 = dht11.readTemperature();
float h11 = dht11.readHumidity();
delay(2000);

float t12 = dht12.readTemperature();
float h12 = dht12.readHumidity();
delay(2000);

float t13 = dht12.readTemperature();
float h13 = dht12.readHumidity();
delay(2000);

EthernetClient client = server.available();



{ //выводим HTML страницу
client. println ("HTTP/1.1 200 OK"); //заголовочная информация
client. println ("Content-Type: text/html");
client. println ("Connection: close");
client. println (); //Так должно быть
client. println ("<!DOCTYPE HTML>"); //HTML тип документа
client. println ("<html>"); //открытие тега HTML
client. println ("<head> "); //открытие тега Head
client. println ("<meta http-equiv='Content-Type' content='text/html ; charset=utf-8'/> ");
client. print ("<title>DHT Controller-1</title>"); //название страницы
client. println ("</head>"); //заголовочная информация
client. println ("<body>");
client. print ("<H1>DHT Controller-1</H1>"); //заголовк на странице

client. println ("<br>"); //перенос на след. строчку
client. println ("Tемпература1 = "); //Температура с DHT1
client. println (t1,1); //переменная температуры
client. println (" C");
client. println ("Влажность1 = "); //Влажность с DHT1
client. println (h1,1); //переменная влажности
client. println (" %");

client. println ("<br>");
client. println ("Tемпература2 = ");
client. println (t2,1);
client. println (" C");
client. println ("Влажность2 = ");
client. println (h2,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература3 = ");
client. println (t3,1);
client. println (" C");
client. println ("Влажность3 = ");
client. println (h3,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература4 = ");
client. println (t4,1);
client. println (" C");
client. println ("Влажность4 = ");
client. println (h4,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература5 = ");
client. println (t5,1);
client. println (" C");
client. println ("Влажность5 = ");
client. println (h5,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература6 = ");
client. println (t6,1);
client. println (" C");
client. println ("Влажность6 = ");
client. println (h6,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература7 = ");
client. println (t7,1);
client. println (" C");
client. println ("Влажность7 = ");
client. println (h7,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература8 = ");
client. println (t8,1);
client. println (" C");
client. println ("Влажность8 = ");
client. println (h8,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература9 = ");
client. println (t9,1);
client. println (" C");
client. println ("Влажность9 = ");
client. println (h9,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература10 = ");
client. println (t10,1);
client. println (" C");
client. println ("Влажность10 = ");
client. println (h10,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература11 = ");
client. println (t11,1);
client. println (" C");
client. println ("Влажность11 = ");
client. println (h11,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература12 = ");
client. println (t12,1);
client. println (" C");
client. println ("Влажность12 = ");
client. println (h12,1);
client. println (" %");

client. println ("<br>");
client. println ("Tемпература13 = ");
client. println (t13,1);
client. println (" C");
client. println ("Влажность13 = ");
client. println (h13,1);
client. println (" %");

client. println ("</body>");
client. println ("</html>"); //закрываем тег HTMLbreak;

client. stop(); //закрываем соеднение
}
}
Берендей
Сообщения: 125
Зарегистрирован: Ср окт 18, 2017 9:44 am
Благодарил (а): 24 раза
Поблагодарили: 18 раз

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение Берендей » Ср дек 20, 2017 8:22 pm

Простым причесыванием скетча много места не освободить, там основной объем занимают библиотеки.
OrangePI PC/ARMBIAN 5.36 + DS3231+433Mhz. Esp8266(ArduinoIDE). Arduino MEGA2560 + Oregon THGN132N.
Sonoff RF Bridge + sensors
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение serghei » Ср дек 20, 2017 9:05 pm

" Немного " это сколько?? Может для начала флоаты заменить на int ? Вам нужно точность два знака после запятой? И если есть шилд с SD картой может страницу сформировать там? И если это контроллер для МД , нужна ли там вообще страница? Померяли температуры , слили в МД , а всё остальное уже там.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение karsotrade » Ср дек 20, 2017 9:11 pm

serghei писал(а):" Немного " это сколько?? Может для начала флоаты заменить на int ? Вам нужно точность два знака после запятой? И если есть шилд с SD картой может страницу сформировать там? И если это контроллер для МД , нужна ли там вообще страница? Померяли температуры , слили в МД , а всё остальное уже там.
Я не силён в программировании, могу только слегка подправить, а как флоаты заменить на инт, и что это даст?
Точность нужна до одного знака после запятой.
Шильд W5100 без карты памяти.
Контроллер именно для МЖД, я набрасывал скетч который скидывает на МЖд инфу гет запросами, но обьём получается ещё больше (даже 10 датчиков не влазят).
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение serghei » Ср дек 20, 2017 9:24 pm

Если память мне не изменяет , Float занимает 4 байта памяти и имеет точность до 7 знаков после запятой. Почитайте Тут.В скетче просто float заменить на int .
Уж если хотите сбрасывать 26 чисел в МД , может есть смысл применить Мегу? Разница в цене не существенная, а возможностей гораздо больше. Если проблема с габаритами платы , то есть вариант Меги с размерами Нано ( ну чуток шире).
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение karsotrade » Ср дек 20, 2017 9:37 pm

serghei писал(а): ....Уж если хотите сбрасывать 26 чисел в МД , может есть смысл применить Мегу? Разница в цене не существенная, а возможностей гораздо больше. Если проблема с габаритами платы , то есть вариант Меги с размерами Нано ( ну чуток шире).
Размеры большеваты у меги, контроллер нужно где то "заховать", вот и минимизирую. Если не получится, то конечно буду на мегу переходить.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение serghei » Ср дек 20, 2017 9:55 pm

Если важны миниатюризация и умеете рисовать платы и заказывать их в Китае,посмотрите здесь полноценную Мегу
За это сообщение автора serghei поблагодарил:
karsotrade (Ср дек 20, 2017 11:00 pm)
Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение karsotrade » Ср дек 20, 2017 10:31 pm

serghei писал(а):Если важны миниатюризация и умеете рисовать платы и заказывать их в Китае,посмотрите здесь полноценную Мегу
Огромное спасибо за подсказку!
За это сообщение автора karsotrade поблагодарил:
serghei (Ср дек 20, 2017 10:51 pm)
Рейтинг: 1.16%
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Помогите пожалуйста "причесать" скетч контроллера

Сообщение serghei » Ср дек 20, 2017 10:52 pm

+1 !
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить