Посоветуйте контроллер датчиков.

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

Модератор: immortal

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

Посоветуйте контроллер датчиков.

Сообщение karsotrade » Чт ноя 02, 2017 8:43 pm

Добрый вечер. Возникла необходимость в отдельном контроллере который будет снимать показания с DHT22 и отправлять в Мажордом (контроль температуры и влажности в помещениях). Контроллер может быть на NANO или UNO с шильдом W5100 и подключается к стандартной сети через свич. Подскажите пожалуйста, может есть уже готовые скечи на такую конфигурацию или что то подобное, мне не удалось найти. Я пока не силён в програмировании с нуля. Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Посоветуйте контроллер датчиков.

Сообщение skysilver » Чт ноя 02, 2017 9:35 pm

karsotrade писал(а):Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
MD328 - это МегаД-328? Если так, то можно было не пробовать. В МегаД в качестве интерфейса ethernet совсем другой контроллер используется, поэтому прошивка не будет работать, хоть и зальется в ардуинку без проблем.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Посоветуйте контроллер датчиков.

Сообщение karsotrade » Чт ноя 02, 2017 10:40 pm

skysilver писал(а):
karsotrade писал(а):Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
MD328 - это МегаД-328? Если так, то можно было не пробовать. В МегаД в качестве интерфейса ethernet совсем другой контроллер используется, поэтому прошивка не будет работать, хоть и зальется в ардуинку без проблем.
Я ставил правильный шильд enc28j60 и подпаивался для тактирования как положено, но не хотелось это всё прошиватся (заливатся хекс), как позже оказалось надо перепрошить програматор китайский. И не хотелось бы заморачиватся на enc28j60, говорят проблематичный, лучше W5100, у меня на нём MegaLight работает как часики (26 входов и 24 выхода).
neromih
Сообщения: 154
Зарегистрирован: Чт апр 20, 2017 5:32 am
Откуда: Томск
Благодарил (а): 55 раз
Поблагодарили: 22 раза

Re: Посоветуйте контроллер датчиков.

Сообщение neromih » Вс ноя 05, 2017 4:49 pm

karsotrade писал(а):Добрый вечер. Возникла необходимость в отдельном контроллере который будет снимать показания с DHT22 и отправлять в Мажордом (контроль температуры и влажности в помещениях). Контроллер может быть на NANO или UNO с шильдом W5100 и подключается к стандартной сети через свич. Подскажите пожалуйста, может есть уже готовые скечи на такую конфигурацию или что то подобное, мне не удалось найти. Я пока не силён в програмировании с нуля. Пробовал MD328 сделать (прошить), запарился, убил пару плат, жду второй программатор от китайцев чтобы первый перепрошить (ошибки при прошивке). Не понравились эти танцы с бубном, да и со скечем как то проще разобраться чем с хексом.
А если как вариант WeMosD1 с прошивкой под него из ESP8266 MegaD api, но это при условии что есть wifi :) а в мажордом установить MegaD. Пробовал играться с датчиком температуры ds18b20 не хужи MegaD2561 работает.

Но если правила строгие и у вас есть 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();
            //==============================================================
          }
        }
      }
     }
 }
 }
(С) https://geektimes.ru/post/257830/ - по этой ссылки подробно описано.

Потом брать через вэб переменные :)

П.С. соответственно тут (в скетче) используется нет только датчик DHT22 но и BMP085.
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Посоветуйте контроллер датчиков.

Сообщение karsotrade » Пн ноя 06, 2017 6:28 pm

Спасибо за подсказку, я как раз вчера похожий скеч запустил на несколько датчиков DHT22, всё отлично работает, показывает на вэб странице температуру и влажность. Теперь сижу, разбираюсь как в Мажордом данные передавать (или наоборот запрашивать из Мажордома) ... пока не получается. Я хочу чтобы в сцене показывало температуру и влажность в каждой комнате.
neromih
Сообщения: 154
Зарегистрирован: Чт апр 20, 2017 5:32 am
Откуда: Томск
Благодарил (а): 55 раз
Поблагодарили: 22 раза

Re: Посоветуйте контроллер датчиков.

Сообщение neromih » Вт ноя 07, 2017 6:49 am

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"); 
$tem - переменная в которой значение полученной температуры

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.
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Посоветуйте контроллер датчиков.

Сообщение karsotrade » Вт ноя 07, 2017 10:49 pm

Добрый вечер. Теперь разбираюсь с вэб-переменными. Не получается снять сразу 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>

Подскажите пожалуйста, что не так делаю. Я хочу снимать показания и температуры и влажности с каждого датчика.
Jilber
Сообщения: 682
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 111 раз
Поблагодарили: 107 раз

Re: Посоветуйте контроллер датчиков.

Сообщение Jilber » Вт ноя 07, 2017 11:03 pm

Создай две отдельные веб-переменные на температуру и влажность.
Если датчиком много, то создай на каждый из них 2 веб-переменные: temperature1, humidity1, temperature2, humidity2, и т.д.
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Посоветуйте контроллер датчиков.

Сообщение karsotrade » Вт ноя 07, 2017 11:28 pm

Я создал отдельные переменные, они замечательно снимаются. Но в объектах пришлось делать два свойства соответственно температуру и влажность. А как мне эти два значения вывести в одном окошке на сцене?
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Посоветуйте контроллер датчиков.

Сообщение karsotrade » Вт ноя 07, 2017 11:30 pm

На сцене выводится объект с одним свойством, а как оба свойства засунуть в один объект?
Ответить