Arduino и Ethernet Shield W5100 обсуждение цикла статей.
Часть 1 - Начало проекта. Часть 2 - Добавлено динамическое обновление данных и работа с SD картой. Часть 3 - Добавлено оформление страницы. Часть 4 - Добавлено управление реле. Часть 5 - Добавлен регулятор мощности нагрузки в виде ползунка. NEW!!! Часть 6 - Реализация включения реле по таймеру
Ну не вижу смысла ставить карту 4 Гб и выше. для нашего проекта требуется около одного мегабайта. Ведь для того чтобы открывать каждый файл его нужно прописывать в прошивке, так что в ардуино уно просто не хватит памяти. Другое дело если у вас в наличии одна карта памяти, тогда пробуйте поставить. Файловая система FAT32.
Привет всем. У меня вопрос а как можно прописать датчики 1wire не могу понять кк оно производится на странице, нужно с жесткой привязкой ID датчика а не автоматом.
Целый вечер мучался, тоже ромбики с вопросами были. файл index.htm в кодировке utf-8 сохранил и всё заработало.
Добавлено (2015-12-26, 23:58) --------------------------------------------- 1wire и тройку датчиков 18В20 очень легко добавить. Если Авторы разрешат, могу скинуть подкоректированную прошивку , index и css.
Добавлено (2015-12-27, 00:13) --------------------------------------------- Ещё один момент интересный, не запоминаются состояния реле при случайном пропадании питания или при нажатии на ресет на шилде. они сбрасываются по умолчанию в "выкл". кто будет применять проект в "реальных затеях", нужно это учесть...
если в файлике my.css подкорректировать вторую строчку: width: 600px; на width: 300px; , то страничка будет выглядеть более пропорционально для дисплея смартфона. Надобность в отдельном приложении для андроид может и отпадёт.
Извиняюсь за некую безграмотность в написании - не программист, но вот как то так, с тремя далласовскими датчиками по стандартной параллельной схеме включения с библиотекой OneWire.h. Работает неплохо, сбоев не наблюдается, отрицательную температуру показывает, знак минус подставляет... Единственный косячок - первое реле цвет при переключении перестало на зеленый менять. Пока не пойму почему, мож кто подскажет.
Помогите справиться с прошивкой отсюда - Часть 2. При компиляции вот такие ошибки: web_sd_2.ino: In function 'void loop()': web_sd_2.ino:45:14: error: a function-definition is not allowed here before '{' token web_sd_2.ino:52:13: error: a function-definition is not allowed here before '{' token web_sd_2.ino:220:1: error: expected '}' at end of input web_sd_2.ino:220:1: error: expected '}' at end of input a function-definition is not allowed here before '{' token
Да...сочувствую Вам ,т.к. вникнуть в прошивку написанную другим человеком иногда быстро не получается, т.к. нужно представлять что она вообще должна делать. Особенно трудно, когда не занимаешься программированием, а потом видишь перспективный проект, и пытаешься его повторить. Я оказался в Вашей "шкуре" тоже... И в свои 46 изучить этот необходимый джельменский набор, состоящий из ардуино IDE, CSS, ajax нахрапом так сказать по быстрому не получается. Но всё таки как найти косяк в скетче ? Мы видим , что он "матерится" на скобки, но какие ??? сразу и не поймешь... И транслейт тут не подмога. 1. Вариант: Можно конечно тупо подсчитать количество открываемых и закрываемых скобок во всём скетче. Иногда помогает. А иногда и нет... 2. Вариант "Пробежаться" по скетчу, "подсвечивая" выделением открываемые скобки по очереди и посмотреть : где начинается какая нибудь функция или процедура, а где заканчивается ???
И когда Вы начнете проверять по второму варианту, изучив азы ардуино и понимая что скеч может иметь только одну void loop() и только одну void setup(), Вы поймете почему не компилится скеч. Всё ненужное поотрезал - всё прокомпилилось, залилось, заработало... айпишник 192.168.0.15. При необходимости ставьте свой. Пробуйте... ненужное закоментил, иначе не увидите в чём дело было.
// 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 /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, "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); int chk; chk = DHT.read(DHT11_PIN); client.println(sensorReading); client.println(":"); client.println(DHT.temperature); client.println(":"); client.println(DHT.humidity);
} 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 [i]= 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; } /* } 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; } */
P.S. Где то в статьях авторы сами признались, что даже ночами иногда не спали. Поэтому можно простить им эти нехитрые механические ошибки.
Ошибок быть не должно, все что в статье, копировали из IDE Ардуины когда все заработало. В ближайшее время появится возможность, проверим все обязательно.
И в свои 46 изучить этот необходимый джельтменский набор, состоящий из ардуино IDE, CSS, ajax нахрапом так сказать по быстрому не получается.
toto123, тут Вы в точку. Мне чуть больше, как говорится - "Дурная голова - рукам покоя не дает". Про void setup и void loop - я понял сразу. Но нахрапом не получилось. Со скобками беда.
Цитата
web_sd_2.ino:220:1: error: expected '}' at end of input
Если я правильно понимаю 220:1 указывает на строку и символ ошибки, но явно этого не видно.
Цитата
P.S. Где то в статьях авторы сами признались, что даже ночами иногда не спали. Поэтому можно простить им эти нехитрые механические ошибки.
К авторам претензий никаких нет. Последний проект, с ползунком работает на ура. А вообще спасибо, очень дружелюбный форум!
А можно сделать поддержку 1WIRE линии, и вторую страницу по настройке температуры и IP адреса например, а еще в идеале что бы можно было мониторить все порты на меге.
Добавлено (2016-01-07, 01:42) --------------------------------------------- Администратор, да другие датчики добавить, собираю перепелятник, на данный момент по сети мониторю температуру по 1wire стоит настрока как термостата при пинижении температуры включает тен, хочу добавить управление вентиляцией приточкой и от точкой, светом , но основное кроме термостата будет управляться с сервера сейчас пишу программу пока под винду. желание добавить пару охранных шлейфов.
dronsoft, Это понятно что можно много чего сделать, но мы были ограничены объемом памяти на ардуине. К примеру так же интересно было активировать авторизацию чтобы избежать несанкционированного доступа.
Уважаемые форумчане. Есть предложение выработать какое то общее направление и его прорабатывать по принципу: кто что умеет - подсказывает, направляет. Я тоже не против авторизации, а то система теряет всякий смысл (кто нибудь рано или поздно что нибудь понатыкает...) Предложение "пристегнуть" к данному проекту например вот это: