Форум

Новые сообщения · Участники · Правила форума
Arduino и Ethernet Shield W5100
Администратор
Администратор
иконка админ
2015-12-08 16:13 #1
Arduino и Ethernet Shield W5100 обсуждение цикла статей.

Часть 1 - Начало проекта.
Часть 2 - Добавлено динамическое обновление данных и работа с SD картой.
Часть 3 - Добавлено оформление страницы.
Часть 4 - Добавлено управление реле.
Часть 5 - Добавлен регулятор мощности нагрузки в виде ползунка.
NEW!!! Часть 6 - Реализация включения реле по таймеру

Профиль
TehnopageTeam
toto123
toto123
2016-01-11 20:36 #46
Цитата dronsoft ()
Народ а никто не думал основу замутить на отдельном пк например а арду оставить как исполнительное устройство? на сд карту например писать логи событий а остальное пусть нормальный сервер делает там и решить вопрос с паролями просче и визуаляцию можно по интереснее забабахать и сильно не заморациваться по поводу  места в памяти.
 В том то всё и дело смысл  ардуины,  чтобы замутить все это компактно, бюджетно, автономно... Ну не могу себе представить чтобы весной в теплице измерять пару температур ( почвы, воздуха ) + влажность и для этого мне еще там сервак что ли реальный ставить ? Думаю всему своё место.

Профиль
Администратор
Администратор
иконка админ
2016-01-11 22:19 #47
Если кого-то не устраивает дизайн страницы, он легко и просто меняется. Нами быо сделано то что можем и знаем как. Хотя уверен, что знающий в веб-дизайне человек и такую страницу сделал бы иначе.

Профиль
ATT
ATT
2016-01-12 15:06 #48
Цитата Администратор ()
Как по мне, так библиотека dht.11 отсутствует.

Прикрепления: 2486783.jpg (168.6 Kb)

Профиль
Администратор
Администратор
иконка админ
2016-01-12 18:37 #49
ATT, А было очень похоже.

Профиль
TehnopageTeam
dronsoft
dronsoft
2016-01-12 23:31 #50
Цитата Администратор ()
Если кого-то не устраивает дизайн страницы, он легко и просто меняется. Нами быо сделано то что можем и знаем как. Хотя уверен, что знающий в веб-дизайне человек и такую страницу сделал бы иначе.
Дак я не против вашей страницы даже наоборот понравилась, просто если мало места может то что его жрет убрать на пк к примеру, я просто к тому что чем меньше всего будет то больше для функционала останется.

Профиль
dronsoft
dronsoft
2016-01-12 23:41 #51
Вот минимальный мой вариант с фунционалом термостата. Если кому надо.

Прикрепления: Kotel_1.ino (4.4 Kb)

Профиль
ilnar
ilnar
2016-01-13 11:27 #52
У меня подключен только 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;
}

удаленный контроль ethernet w5100

Прикрепления: 2340200.png (19.0 Kb)

Профиль
ilnar
ilnar
2016-01-13 11:33 #53
Ранее написанное не редактируется ?хотел скетч выложить , что то не то получился...

Прикрепления: meteostansia2.ino (6.3 Kb)

Профиль
Администратор
Администратор
иконка админ
2016-01-13 15:10 #54
ilnar, Выложи пожалуйста и картинки с кодом страницы

Профиль
TehnopageTeam
AspiD
AspiD
2016-01-13 15:46 #55
по поводу
Цитата dronsoft ()
Народ а никто не думал основу замутить на отдельном пк например а арду оставить как исполнительное устройство? на сд карту например писать логи событий а остальное пусть нормальный сервер делает там и решить вопрос с паролями просче и визуаляцию можно по интереснее забабахать и сильно не заморациваться по поводу места в памяти.
компактно с блекджеком и шлюхами - Raspberry Pi. Справится и с авторизацией и с работой реле и датчиков напрямую.
Цитата toto123 ()
Ну не могу себе представить чтобы весной в теплице измерять пару температур ( почвы, воздуха ) + влажность и для этого мне еще там сервак что ли реальный ставить ? Думаю всему своё место.
советую глянуть в сторону nrf24. витуху в теплицу тянуть тоже не всегда оправданно, особенно без PoE.

простенькую авторизацию, кстати, сделать не проблема. и она влезет без особых проблем. Мониторинг портов - проще простого. поскольку данная прошивка, по сути, этим и занимается =))

Профиль
AspiD
AspiD
2016-01-13 15:48 #56
Цитата stepan_zh ()
а можно создать приложение на андроид
разрешаю =)

Профиль
ilnar
ilnar
2016-01-13 16:17 #57
admin, я ранее выкладывал код и картинку, можно еще раз


Прикрепления: 3694954.ino (6.3 Kb) · 0656307.png (19.0 Kb)

Профиль
toto123
toto123
2016-01-13 16:23 #58
Цитата ilnar ()
У меня подключен только bmp185 однако на веб морде показывает еще и датчик дыма,откуда идут данные не пойму. и я похоже немного испортил исходник вместо реле 1 зеленеет реле3.
А там ещё над файликом index.htm поработать надо... как только лишнее "выкините из него" так сразу и цвета кнопочек на своё место встанут и дым пропадёт.  Скиньте этот фйл посмотреть.

Профиль
TehnopageTeam
ilnar
ilnar
2016-01-13 16:30 #59
admin, у меня в планах собрать в ардуино датчики газа (пропан т.п.), угарного газа,температуры помещения, температура снаружи, атм. давления релейный модуль и пищалку.И все это поставить родителям в частный дом в помещение газового отопления.При появлении какого либо газа пищал и включался вытяжной вентилятор.А остальное датчики для общей информации:)

Добавлено (2016-01-13, 16:28)
---------------------------------------------
toto123

Добавлено (2016-01-13, 16:30)
---------------------------------------------
Цитата toto123 ()
А там ещё над файликом index.htm поработать надо... как только лишнее "выкините из него" так сразу и цвета кнопочек на своё место встанут и дым пропадёт.  Скиньте этот фйл посмотреть.

Профиль
ilnar
ilnar
2016-01-13 16:35 #60
Цитата toto123 ()
Скиньте этот фйл посмотреть.
Все пытаюсь файл скинуть...:)

Код
<html>

<head>
  <meta http-equiv='content-type' content='text/html; charset=UTF-8'>
  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
  <title>Данные с датчиков</title>
  <link type="text/css" rel="StyleSheet" href="/my.css" />
<script>
function GetFlameState() {
nocache = "&nocache=" + Math.random() * 1000000;
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (this.readyState == 4) {
if (this.status == 200) {
if (this.responseText != null) {
var arrayOfStrings = this.responseText.split(":");

document.getElementById("flame_txt").innerHTML = arrayOfStrings[0];
document.getElementById("tempv_txt").innerHTML = arrayOfStrings[1];
document.getElementById("humid_txt").innerHTML = arrayOfStrings[2];
for(var i = 1 ; i < 5 ; i++)
if(arrayOfStrings[2+i] == "1")
document.getElementById("led_"+i).setAttribute("class","button_enabled");
else
document.getElementById("led_"+i).setAttribute("class","button_disabled");
}
}
}
}
request.open("GET", "ajax_flame" + nocache, true);
request.send(null);
setTimeout('GetFlameState()', 1000);
}
function onClick(pin){
var request = new XMLHttpRequest();
request.open("GET", "\setpin?pin=" + pin, false);
request.send(null);
}
</script>

</head>

<body onload="GetFlameState()">
  <div class="form">
    <h2>Arduino WEB контроль</h2>
    <hr noshade size="1px" color="white">
    <table align="center">
      <tr>
        <td><img src='flame.png' /></td>
        <td valign="center">Датчик газа</td>
        <td><span id="flame_txt"> 0</span></td>
      </tr>

      <tr>
        <td><img src='temp.png' /></td>
        <td valign="center">Температура внутри</td>
        <td><span id="tempv_txt">0</span> °C</td>
      </tr>

      <tr>
        <td><img src='temp.png' /></td>
        <td valign="center">Температура снаружи</td>
        <td><span id="temps_txt">0</span> °C</td>
      </tr>

      <tr>
        <td><img src='humid.png' /></td>
        <td valign="center">Влажность</td>
        <td><span id="humid_txt">0</span> %</td>
      </tr>

      <tr>
        <td><img src='press.png' /></td>
        <td valign="center">Давление</td>
        <td><span id="press_txt">0</span> мм</td>
      </tr>
    </table>
    <br>
    <center>
      <button type="button" id="led_1" class="button_disabled" onClick="onClick(1)">Реле №1</button>
      <button type="button" id="led_2" class="button_disabled" onClick="onClick(2)">Реле №2</button>
      <button type="button" id="led_3" class="button_disabled" onClick="onClick(3)">Реле №3</button>
      <button type="button" id="led_4" class="button_disabled" onClick="onClick(4)">Реле №4</button>
    </center>
</div>
    </Body>
</html>

Прикрепления: index.txt (2.8 Kb)

Профиль
Поиск: