Посоветуйте контроллер датчиков.
Модератор: immortal
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Посоветуйте контроллер датчиков.
Добрый вечер. Возникла необходимость в отдельном контроллере который будет снимать показания с DHT22 и отправлять в Мажордом (контроль температуры и влажности в помещениях). Контроллер может быть на NANO или UNO с шильдом W5100 и подключается к стандартной сети через свич. Подскажите пожалуйста, может есть уже готовые скечи на такую конфигурацию или что то подобное, мне не удалось найти. Я пока не силён в програмировании с нуля. Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Посоветуйте контроллер датчиков.
MD328 - это МегаД-328? Если так, то можно было не пробовать. В МегаД в качестве интерфейса ethernet совсем другой контроллер используется, поэтому прошивка не будет работать, хоть и зальется в ардуинку без проблем.karsotrade писал(а):Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Посоветуйте контроллер датчиков.
Я ставил правильный шильд enc28j60 и подпаивался для тактирования как положено, но не хотелось это всё прошиватся (заливатся хекс), как позже оказалось надо перепрошить програматор китайский. И не хотелось бы заморачиватся на enc28j60, говорят проблематичный, лучше W5100, у меня на нём MegaLight работает как часики (26 входов и 24 выхода).skysilver писал(а):MD328 - это МегаД-328? Если так, то можно было не пробовать. В МегаД в качестве интерфейса ethernet совсем другой контроллер используется, поэтому прошивка не будет работать, хоть и зальется в ардуинку без проблем.karsotrade писал(а):Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
-
- Сообщения: 154
- Зарегистрирован: Чт апр 20, 2017 5:32 am
- Откуда: Томск
- Благодарил (а): 55 раз
- Поблагодарили: 22 раза
Re: Посоветуйте контроллер датчиков.
А если как вариант WeMosD1 с прошивкой под него из ESP8266 MegaD api, но это при условии что есть wifi а в мажордом установить MegaD. Пробовал играться с датчиком температуры ds18b20 не хужи MegaD2561 работает.karsotrade писал(а):Добрый вечер. Возникла необходимость в отдельном контроллере который будет снимать показания с DHT22 и отправлять в Мажордом (контроль температуры и влажности в помещениях). Контроллер может быть на NANO или UNO с шильдом W5100 и подключается к стандартной сети через свич. Подскажите пожалуйста, может есть уже готовые скечи на такую конфигурацию или что то подобное, мне не удалось найти. Я пока не силён в програмировании с нуля. Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
Но если правила строгие и у вас есть Uno и W5100 (хотя он у меня зависал при потери напряжения и последующем включение, помогала перезагрузка через кнопку) то как вариант такой скетч:
Код: Выделить всё
// ========================Задаем необходимые библиотеки==========
#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
#include "DHT.h"
#include "Wire.h"
#include "Adafruit_BMP085.h"
// ===============================================================
// ========================Задаем данные сети======================
byte mac[] = { 0xCA, 0xAF, 0x78, 0x1C, 0x13, 0x77 }; //mac - адрес ethernet shielda
byte ip[] = { 192, 168, 1, 33 }; // ip адрес ethernet shielda
byte subnet[] = { 255, 255, 255, 0 }; //маска подсети
EthernetServer server(80); //порт сервера
int ledPin = 4; // указываем что светодиод будет управляться через 4 Pin
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //изначальный статус светодиода - выключен
// ===============================================================
#define DHTPIN 3 // пин для датчика DHT22
const unsigned char OSS = 0; // Oversampling Setting
// ===============================================================
// ========================ТИП ДАТЧИКА DHT=======================
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// ==============================================================
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp;
// ========================СТАРТУЕМ=============================
// ========================Управляем св.диодом на 4-м пине==========
void setup(){
//запускаем Ethernet
Ethernet.begin(mac, ip, subnet);
//устанавливаем pin 4 на выход
pinMode(ledPin, OUTPUT);
//enable serial datada print
Serial.begin(9600);
Serial.println("Port Test!"); // Тестовые строки для отображения в мониторе порта
Serial.println("GO!");// Тестовые строки для отображения в мониторе порта
dht.begin();
bmp.begin();
}
// ==============================================================
void loop(){
// ========================ДАТЧИКИ=============================
float h = dht.readHumidity();
float t = dht.readTemperature();
float tdpa = bmp.readTemperature();
float Pa0 = (bmp.readPressure());
float Pa = (bmp.readPressure()/133.33);// переводим в мм.рт.ст.
float Pa2 = (bmp.readPressure()/3386.582);// переводим в дм.рт.ст.
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
} else {
Serial.print("H=: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temp.=: ");
Serial.print(t);
Serial.println(" *C");
Serial.print("Temp.dat.BMP = ");
Serial.print(tdpa);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(Pa);
Serial.println(" mm.");
Serial.print("Pressure = ");
Serial.print(Pa2);
Serial.println(" in Hg");
// ==============================================================
// =============Создаем клиентское соединение====================
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 30) {
//store characters to string
readString.concat( c); }
//output chars to serial port
Serial.print( c);
//if HTTP request has ended
if (c == '\n') {
//Проверяем включили ли светодиод?
//Level=1 - включен
//Level=0 - выключен
if(readString.indexOf("Level=1") >=0) {
//Включаем светодиод
digitalWrite(ledPin, HIGH); // set the LED on
LEDON = true;
}else{
//Выключаем светодиод
digitalWrite(ledPin, LOW); // set the LED OFF
LEDON = false;
}
// =============Формируем HTML-страницу==========================
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<head> ");
client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
client.println("<title> :: Упр.Arduino:: V1.1</title>");
client.println("</head> ");
client.println("<body");
client.println("<hr />");
client.println("<h1> ::Упр.Arduino:: </h1>");
if (LEDON){
client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить<input type=radio name=Level value=0>Выключить<input type=submit value=OK></form>");
client.println("<font size=’5′>LED-статус: ");
client.println("<font size=’5′>Вкл.");
}else{
client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить<input type=radio name=Level value=0 CHECKED>Выключить<input type=submit value=OK></form>");
client.println("<font size=’5′>LED-статус: ");
client.println("<font size=’5′>Выкл");
}
//==============Вывод значений на web-страницу======================
client.println("<hr />");//линия=====================================
client.println("Tемпература = "); //Температура с DHT 22
client.println(t);
client.println(" *C");
client.println("<br> "); //перенос на след. строчку
client.println("Влажность = "); //Влажность с DHT 22
client.println(h);
client.println(" %\t");
client.println("<br> "); //перенос на след. строчку
client.println("<hr />");//линия=====================================
client.println("Давление = "); //давление с BMP 085
client.println(Pa);
client.println(" mm.рт.ст.");
client.println("<br> "); //перенос на след. строчку
client.println("<hr />"); //линия=====================================
client.println("Давление = "); //давление с BMP 085
client.println(Pa2);
client.println(" in Hg");
client.println("<br> "); //перенос на след. строчку
client.println("<hr />"); //линия=====================================
client.println("Tемпература внутреняя = ");//температура с BMP 085
client.println(tdpa);
client.println(" *C");
client.println("<br> "); //перенос на след. строчку
client.println("<hr />"); //линия=====================================
//==============================================================
client.println("</body></html>");
//очищаем строку для следующего считывания
//==============Останавливаем web-client===========================
readString="";
client.stop();
//==============================================================
}
}
}
}
}
}
Потом брать через вэб переменные
П.С. соответственно тут (в скетче) используется нет только датчик DHT22 но и BMP085.
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Посоветуйте контроллер датчиков.
Спасибо за подсказку, я как раз вчера похожий скеч запустил на несколько датчиков DHT22, всё отлично работает, показывает на вэб странице температуру и влажность. Теперь сижу, разбираюсь как в Мажордом данные передавать (или наоборот запрашивать из Мажордома) ... пока не получается. Я хочу чтобы в сцене показывало температуру и влажность в каждой комнате.
-
- Сообщения: 154
- Зарегистрирован: Чт апр 20, 2017 5:32 am
- Откуда: Томск
- Благодарил (а): 55 раз
- Поблагодарили: 22 раза
Re: Посоветуйте контроллер датчиков.
Варианты:karsotrade писал(а):Спасибо за подсказку, я как раз вчера похожий скеч запустил на несколько датчиков DHT22, всё отлично работает, показывает на вэб странице температуру и влажность. Теперь сижу, разбираюсь как в Мажордом данные передавать (или наоборот запрашивать из Мажордома) ... пока не получается. Я хочу чтобы в сцене показывало температуру и влажность в каждой комнате.
1. Попробуйте через вэб переменные - это в мажардомо - вкладка объекты. (сложно)
2. Еще как вариант, сделать скеч что бы выводил к примеру температуру отдельной страницей. (легче)
Создаете сценарий и в кроне запускаете как вам удобней либо каждую минуту либо каждые 10 минут и тд.
В сценарии код примерно такого характера:
Код: Выделить всё
$tem = file_get_contents("http://192.168.0.14/sec/?pt=10&scl=11&i2c_dev=htu21d&i2c_par=1");
sg('tempzal.value',$tem);
Код: Выделить всё
$tem = file_get_contents("http://192.168.0.14/sec/?pt=10&scl=11&i2c_dev=htu21d&i2c_par=1");
file_get_contents("http://192.168.0.14/sec/?pt=10&scl=11&i ... &i2c_par=1") - запрос значения
где:
http://192.168.0.14/sec/?pt=10&scl=11&i ... &i2c_par=1 - адрес страницы со значением
sg('tempzal.value',$tem) - полученную температуру передаем в объект 'tempzal.value'.
П.С. для меня и это только моя точка зрения, контроллеру достаточно страниц только для отображения значения датчика, для каждого своя страница.
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Посоветуйте контроллер датчиков.
Добрый вечер. Теперь разбираюсь с вэб-переменными. Не получается снять сразу 2 значения (температура и влажность).
Вот как выглядит информация с ардуины на странице: Tемпература = 25.80 C Влажность = 48.00 %
Я в шаблон поиска закидываю: Tемпература = (.+?) C Влажность = (.+?) %
Ни чего не выдаёт. Но если в шаблон записываю отдельно только температуру: Tемпература = (.+?) C
то температура отображается (снимается с вэба).
Сам код страницы выглядит так:
<html>
<head>
<meta http-equiv='Content-Type' content='text/html ; charset=utf-8'/>
<title>SensController Web Server</title></head>
<body>
<H1>HelpDuino Web Server</H1><br>
<hr/>
Tемпература =
26.00
C
Влажность =
48.00
%
<br>
<hr/>
</body>
</html>
Подскажите пожалуйста, что не так делаю. Я хочу снимать показания и температуры и влажности с каждого датчика.
Вот как выглядит информация с ардуины на странице: Tемпература = 25.80 C Влажность = 48.00 %
Я в шаблон поиска закидываю: Tемпература = (.+?) C Влажность = (.+?) %
Ни чего не выдаёт. Но если в шаблон записываю отдельно только температуру: Tемпература = (.+?) C
то температура отображается (снимается с вэба).
Сам код страницы выглядит так:
<html>
<head>
<meta http-equiv='Content-Type' content='text/html ; charset=utf-8'/>
<title>SensController Web Server</title></head>
<body>
<H1>HelpDuino Web Server</H1><br>
<hr/>
Tемпература =
26.00
C
Влажность =
48.00
%
<br>
<hr/>
</body>
</html>
Подскажите пожалуйста, что не так делаю. Я хочу снимать показания и температуры и влажности с каждого датчика.
-
- Сообщения: 682
- Зарегистрирован: Ср май 03, 2017 7:41 pm
- Благодарил (а): 111 раз
- Поблагодарили: 107 раз
Re: Посоветуйте контроллер датчиков.
Создай две отдельные веб-переменные на температуру и влажность.
Если датчиком много, то создай на каждый из них 2 веб-переменные: temperature1, humidity1, temperature2, humidity2, и т.д.
Если датчиком много, то создай на каждый из них 2 веб-переменные: temperature1, humidity1, temperature2, humidity2, и т.д.
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Посоветуйте контроллер датчиков.
Я создал отдельные переменные, они замечательно снимаются. Но в объектах пришлось делать два свойства соответственно температуру и влажность. А как мне эти два значения вывести в одном окошке на сцене?
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Посоветуйте контроллер датчиков.
На сцене выводится объект с одним свойством, а как оба свойства засунуть в один объект?