Arduino и Ethernet Shield W5100
|
|
|
Администратор
2015-12-08 16:13 #1
Arduino и Ethernet Shield W5100 обсуждение цикла статей.
Часть 1 - Начало проекта. Часть 2 - Добавлено динамическое обновление данных и работа с SD картой. Часть 3 - Добавлено оформление страницы. Часть 4 - Добавлено управление реле. Часть 5 - Добавлен регулятор мощности нагрузки в виде ползунка. NEW!!! Часть 6 - Реализация включения реле по таймеру
Профиль
|
|
|
dronsoft
2016-01-11 20:27 #46
Народ а никто не думал основу замутить на отдельном пк например а арду оставить как исполнительное устройство? на сд карту например писать логи событий а остальное пусть нормальный сервер делает там и решить вопрос с паролями просче и визуаляцию можно по интереснее забабахать и сильно не заморациваться по поводу места в памяти.
Профиль
|
|
|
toto123
2016-01-11 20:36 #47
Цитата dronsoft ( ) Народ а никто не думал основу замутить на отдельном пк например а арду оставить как исполнительное устройство? на сд карту например писать логи событий а остальное пусть нормальный сервер делает там и решить вопрос с паролями просче и визуаляцию можно по интереснее забабахать и сильно не заморациваться по поводу места в памяти. В том то всё и дело смысл ардуины, чтобы замутить все это компактно, бюджетно, автономно... Ну не могу себе представить чтобы весной в теплице измерять пару температур ( почвы, воздуха ) + влажность и для этого мне еще там сервак что ли реальный ставить ? Думаю всему своё место.
Профиль
|
|
|
Администратор
2016-01-11 22:19 #48
Если кого-то не устраивает дизайн страницы, он легко и просто меняется. Нами быо сделано то что можем и знаем как. Хотя уверен, что знающий в веб-дизайне человек и такую страницу сделал бы иначе.
Профиль
|
|
|
ATT
2016-01-12 15:06 #49
Цитата Администратор ( ) Как по мне, так библиотека dht.11 отсутствует.
Профиль
|
|
|
|
dronsoft
2016-01-12 23:31 #51
Цитата Администратор ( ) Если кого-то не устраивает дизайн страницы, он легко и просто меняется. Нами быо сделано то что можем и знаем как. Хотя уверен, что знающий в веб-дизайне человек и такую страницу сделал бы иначе. Дак я не против вашей страницы даже наоборот понравилась, просто если мало места может то что его жрет убрать на пк к примеру, я просто к тому что чем меньше всего будет то больше для функционала останется.
Профиль
|
|
|
dronsoft
2016-01-12 23:41 #52
Вот минимальный мой вариант с фунционалом термостата. Если кому надо.
Профиль
|
|
|
ilnar
2016-01-13 11:27 #53
У меня подключен только bmp185 однако на веб морде показывает еще и датчик дыма,откуда идут данные не пойму. и я похоже немного испортил исходник вместо реле 1 зеленеет реле3.
Код #include #include #include #include #include #include
#define REQ_BUF_SZ 20 #define DHTPIN 7 #define DHTTYPE DHT22 File webFile; DHT dht(DHTPIN, DHTTYPE);
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string char req_index = 0; // index into HTTP_req buffer byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IPAddress ip(192, 168, 0, 110); EthernetServer server(80); Adafruit_BMP085 bmp; bool pin1; bool pin2; bool pin3; bool pin4;
void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); Ethernet.begin(mac, ip); server.begin(); bmp.begin(); SD.begin(4); pin1 = pin2 = pin3 = pin4 = 0; }
void loop() { float h = dht.readHumidity(); float ts = dht.readTemperature(); float t = bmp.readTemperature(); float pa = bmp.readPressure()/133.322; // 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 (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // save HTTP request character req_index++; } if (c == '\n' && currentLineIsBlank) { if (StrContains(HTTP_req, "GET / ") || StrContains(HTTP_req, "GET /index.htm")) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); webFile = SD.open("index.htm"); } else if (StrContains(HTTP_req, "GET /favicon.ico")) { webFile = SD.open("favicon.ico"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "GET /temp.png")) { webFile = SD.open("temp.png"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "GET /humid.png")) { webFile = SD.open("humid.png"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "GET /flame.png")) { webFile = SD.open("flame.png"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } }else if (StrContains(HTTP_req, "GET /press.png")) { webFile = SD.open("press.png"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "GET /my.css")) { webFile = SD.open("my.css"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "ajax_flame")) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: keep-alive"); client.println(); int smoke_gas = 0; //пин на котором подключен MQ-2 int sensorReading = analogRead(smoke_gas); client.print(sensorReading); client.println(":"); client.print(t); client.print(":"); client.print(ts); client.print(":"); client.print(h); client.print(" :"); client.print(pa); client.print(" :"); client.print((digitalRead(2)) ? "1" : "0"); client.print(":"); client.print((digitalRead(3)) ? "1" : "0"); client.print(":"); client.print((digitalRead(5)) ? "1" : "0"); client.print(":"); client.print((digitalRead(6)) ? "1" : "0");
} else if (StrContains(HTTP_req, "setpin?pin=1")) { pin1 = !pin1; digitalWrite(2, pin1); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); } else if (StrContains(HTTP_req, "setpin?pin=2")) { pin2 = !pin2; digitalWrite(3, pin2); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); } else if (StrContains(HTTP_req, "setpin?pin=3")) { pin3 = !pin3; digitalWrite(5, pin3); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); } else if (StrContains(HTTP_req, "setpin?pin=4")) { pin4 = !pin4; digitalWrite(6, pin4); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); }
if (webFile) { while (webFile.available()) { client.write(webFile.read()); // send web page to client } webFile.close(); } req_index = 0; StrClear(HTTP_req, REQ_BUF_SZ); 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(); } }
void StrClear(char *str, char length) { for (int i = 0; i < length; i++) { str = 0; } }
char StrContains(char *str, char *sfind) { char found = 0; char index = 0; char len; len = strlen(str); if (strlen(sfind) > len) { return 0; } while (index < len) { if (str [index]== sfind[found]) { found++; if (strlen(sfind) == found) { return 1; } } else { found = 0; } index++; } return 0; }
Профиль
|
|
|
ilnar
2016-01-13 11:33 #54
Ранее написанное не редактируется ?хотел скетч выложить , что то не то получился...
Профиль
|
|
|
|
AspiD
2016-01-13 15:46 #56
по поводу Цитата dronsoft ( ) Народ а никто не думал основу замутить на отдельном пк например а арду оставить как исполнительное устройство? на сд карту например писать логи событий а остальное пусть нормальный сервер делает там и решить вопрос с паролями просче и визуаляцию можно по интереснее забабахать и сильно не заморациваться по поводу места в памяти. компактно с блекджеком и шлюхами - Raspberry Pi. Справится и с авторизацией и с работой реле и датчиков напрямую. Цитата toto123 ( ) Ну не могу себе представить чтобы весной в теплице измерять пару температур ( почвы, воздуха ) + влажность и для этого мне еще там сервак что ли реальный ставить ? Думаю всему своё место. советую глянуть в сторону nrf24. витуху в теплицу тянуть тоже не всегда оправданно, особенно без PoE.
простенькую авторизацию, кстати, сделать не проблема. и она влезет без особых проблем. Мониторинг портов - проще простого. поскольку данная прошивка, по сути, этим и занимается =))
Профиль
|
|
|
AspiD
2016-01-13 15:48 #57
Цитата stepan_zh ( ) а можно создать приложение на андроид разрешаю =)
Профиль
|
|
|
ilnar
2016-01-13 16:17 #58
admin, я ранее выкладывал код и картинку, можно еще раз
Профиль
|
|
|
toto123
2016-01-13 16:23 #59
Цитата ilnar ( ) У меня подключен только bmp185 однако на веб морде показывает еще и датчик дыма,откуда идут данные не пойму. и я похоже немного испортил исходник вместо реле 1 зеленеет реле3. А там ещё над файликом index.htm поработать надо... как только лишнее "выкините из него" так сразу и цвета кнопочек на своё место встанут и дым пропадёт. Скиньте этот фйл посмотреть.
Профиль
|
|
|
ilnar
2016-01-13 16:30 #60
admin, у меня в планах собрать в ардуино датчики газа (пропан т.п.), угарного газа,температуры помещения, температура снаружи, атм. давления релейный модуль и пищалку.И все это поставить родителям в частный дом в помещение газового отопления.При появлении какого либо газа пищал и включался вытяжной вентилятор.А остальное датчики для общей информации:)
Добавлено (2016-01-13, 16:28) --------------------------------------------- toto123
Добавлено (2016-01-13, 16:30) ---------------------------------------------
Цитата toto123 ( ) А там ещё над файликом index.htm поработать надо... как только лишнее "выкините из него" так сразу и цвета кнопочек на своё место встанут и дым пропадёт. Скиньте этот фйл посмотреть.
Профиль
|
|