Помощь в управлении освещением

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

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Контактная информация:

Re: Помощь в управлении освещением

Сообщение sergejey »

alekszander писал(а):2 день мучаюсь ни как не могу понять как отправить данные в ардуину. Через сам ком порт в Ардуино все передается и работает а вот через мажордомо не могу понять как отправить. Сергей огромная просьба, разъясните что да как. Если можно даже на пальцах.
Через Arduino Gateway (который здесь описан) данные приходящие видны?

Если видны, то из MajorDoMo можно отправить что-то повесив, к примеру, на кнопку вот такой код:

Код: Выделить всё

safe_exec("c:\путь\arduino_gw.exe somedata");
(вместо путь нужно подстаить правильное значение)
при этом, если запущен и работает Arduino Gateway строка somedata будет отправлена через порт в контроллер

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
alekszander
Сообщения: 178
Зарегистрирован: Вс янв 05, 2014 5:37 am

Re: Помощь в управлении освещением

Сообщение alekszander »

После двух дней мучений, научил я эту шайтан машину включать и выключать свет. Если кому то надо забирайте скетч ниже. Светом занимается отдельная дуня так как вешать все на одну совесть не позволила.

Код: Выделить всё

#include <SPI.h>
#include <Ethernet.h>
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 200);

EthernetServer server(80);

void setup()
{
  mySwitch.enableTransmit(10);
  Serial.begin(9600);    
  pinMode(10, OUTPUT);    
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    String buffer = "";  
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);   
        buffer+=c;       
        if (c == '\n' && currentLineIsBlank) {          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.print("<FORM action=\"http://192.168.1.200/\" >");
          client.print("<input type=\"submit\" name=\"status\" value=\"On\" onclick=\"this.value=1;\"/>");
          client.print("<input type=\"submit\" name=\"status\" value=\"Off\" onclick=\"this.value=0;\"/>");
          client.print("</FORM>");            
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
          buffer="";       
        } else if (c == '\r') {            
          if(buffer.indexOf("GET /?status=1")>=0)
            mySwitch.send(14417923, 24);  
          if(buffer.indexOf("GET /?status=2")>=0)
            mySwitch.send(14417923, 24);
            if(buffer.indexOf("GET /?status=3")>=0)
            mySwitch.send(14417932, 24);
            if(buffer.indexOf("GET /?status=4")>=0)
            mySwitch.send(14417932, 24);
            if(buffer.indexOf("GET /?status=5")>=0)
            mySwitch.send(14417968, 24);
            if(buffer.indexOf("GET /?status=6")>=0)
            mySwitch.send(14417968, 24);
            if(buffer.indexOf("GET /?status=7")>=0)
            mySwitch.send(14418112, 24);
            if(buffer.indexOf("GET /?status=8")>=0)
            mySwitch.send(14418112, 24);
            if(buffer.indexOf("GET /?status=9")>=0)
            mySwitch.send(14420992, 24);
            if(buffer.indexOf("GET /?status=10")>=0)
            mySwitch.send(14420992, 24);
            if(buffer.indexOf("GET /?status=11")>=0)
            mySwitch.send(14418688, 24);
            if(buffer.indexOf("GET /?status=12")>=0)
            mySwitch.send(14418688, 24);
           //if(buffer.indexOf("GET /?status=13")>=0)
           //mySwitch.send(14417923, 24);
           //if(buffer.indexOf("GET /?status=14")>=0)
           //mySwitch.send(14417923, 24);
           //if(buffer.indexOf("GET /?status=15")>=0)
           //mySwitch.send(14417923, 24);
           //if(buffer.indexOf("GET /?status=16")>=0)
           //mySwitch.send(14417923, 24);
            
        }
        else {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}
Сергей, огромное Вам спасибо, желаю удачи в развитии вашего проекта. И надеюсь сам помочь.
Ivan
Сообщения: 1474
Зарегистрирован: Сб окт 12, 2013 11:03 pm

Re: Помощь в управлении освещением

Сообщение Ivan »

Как программисту очень страшно смотреть на столько условий. Почему вы их столько сделали, формулу пересчёта не удалось реализовать?

Код: Выделить всё

  n       i%
  -  = --------       n=m * i% / 100%
  m     100%

status-1        n-14417923
-------- = -------------------
 12-1      (14418688-14417923)
n=((14418688-14417923)*(status-1) / (12-1))+14417923
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
alekszander
Сообщения: 178
Зарегистрирован: Вс янв 05, 2014 5:37 am

Re: Помощь в управлении освещением

Сообщение alekszander »

Ivan писал(а):Как программисту очень страшно смотреть на столько условий. Почему вы их столько сделали, формулу пересчёта не удалось реализовать?

Код: Выделить всё

  n       i%
  -  = --------       n=m * i% / 100%
  m     100%

status-1        n-14417923
-------- = -------------------
 12-1      (14418688-14417923)
n=((14418688-14417923)*(status-1) / (12-1))+14417923
Честно говоря в программировании мало соображаю. Есть просьба к Вам не поможите ли вы скрестить два скетча в один, т.е. этот и тот который ниже. Борюсь долго, а дуня на которой сейчас висит управление светом нужна для других задач.

Код: Выделить всё

/**
* Контроллер-исполнительное устройство (к проекту http://smartliving.ru/)
* Platform: Arduino UNO R3 + EthernetShield W5100
* IDE: Arduino 1.0.1
*
* исполнительные устройства (реле) подключены к Digital 3 - 9
*
* обращение по http://xx.xx.xx.xx/ выдаст справочную информацию по этому устройству (нужно для того, чтобы когда обращаешься
* по IP к устройству понять что это за контроллер и пр.)
*
* /state - состояние всез портов
* /command - выполнение команды
*         команды можно вызывать серией в 1 запросе. Например http://xx.xx.xx.xx/command?3=CLICK&4=CLICK&5=ON&6=OFF
*         только длинна строки запроса не должна привышать maxLength
* /getdev - получить список всех устройст на 1-wire
*         формат вывода: 
*                T<номер устройства на шине>:<HEX адрес устройства>:<текущая температура в градусах цельсия>;[...]
*                (пример T0:1060CF59010800E3:24.06;T1:109ABE59010800FE:24.56;)
*
**/

#include <Ethernet.h>
#include <SPI.h>
#include <Arduino.h>
#include "WebServer.h" // Webduino (https://github.com/sirleech/Webduino)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 }; // MAC-адрес нашего устройства
byte ip[] = { 192, 168, 1, 120 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 1, 1 };
byte dns_server[] = { 192, 168, 1, 1 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 1, 128 };


//EthernetClient client;

// Настройки выходов Аналговые выходы имеют номера с 14-19 (А0-А5)
int startPin=5;
int endPin=9;
// Аналоговые выходы на реле 17-19 (A3-A5)
int startAnOut=17;
int endAnOut=19;
// аналоговые входы 15 16 (A1-A2)
#define MAX_PINS 2
const byte pin_array[MAX_PINS] = {1, 2};  // номера используемых пинов
int val_array[MAX_PINS] ={ 0, 0};         // предыдущие значения для каждого порта

int startAn=1;
int endAn=2;
char buf[80];



// Pin controller for connection data pin DS18S20
#define ONE_WIRE_BUS 14 // Digital A0 pin Arduino (куда подключен выход с шины датчиков DS18X20  -------------A0---------------
#define TEMPERATURE_PRECISION 9

#define VERSION_STRING "0.1.0.3"
#define COMPILE_DATE_STRING "15-05-2013"

P(Page_info) = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /><title>smartliving.ru controller " VERSION_STRING "</title></head><body>\n";
P(location_info) = "Тестовая комната";
P(pin_info) = "<b>A0</b> - 1-wire (Датчики температуры DS18B20)<br><b>A1</b> - аналоговый вход<br><b>A2</b> - аналоговый вход";
P(version_info) = VERSION_STRING ". Дата обновления: " COMPILE_DATE_STRING;

String url = String(60);
int maxLength=50; // Максимальная длинна строки запроса

#define delayClick 1000 // задержка при обычном CLICK
#define delayLClick 3000 // задержка при длинном LCLICK
#define MAX_COMMAND_LEN             (10)
#define MAX_PARAMETER_LEN           (10)
#define COMMAND_TABLE_SIZE          (9)
#define PREFIX ""

WebServer webserver(PREFIX, 80);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// Для поиска
DeviceAddress Termometers;
float tempC; 

#define NAMELEN 32
#define VALUELEN 32

char gCommandBuffer[MAX_COMMAND_LEN + 1];
char gParamBuffer[MAX_PARAMETER_LEN + 1];
long gParamValue;

typedef struct {
  char const    *name;
  void          (*function)(WebServer &server);
} command_t;

command_t const gCommandTable[COMMAND_TABLE_SIZE] = {
//  {"LED",     commandsLed, },
  {"HELP",     commandsHelp, }, // Выводит список комманд (вызов http://xx.xx.xx.xx/command?8=HELP )
  {"ON",     commandsOn, }, // Устанавливает "1" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=ON )
  {"OFF",     commandsOff, }, // Устанавливает "0" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=OFF )
  {"STATUS",     commandsStatus, }, // Получить состояние цифрового порта (1 или 0) (вызов http://xx.xx.xx.xx/command?8=STATUS ),
                                    // если вместо номера порта передать ALL (вызов http://xx.xx.xx.xx/command?ALL=STATUS ), то получим состояние всех портов (Пример вывода P3=0;P4=0;P5=0;P6=0;P7=0;P8=1;P9=1;)
  {"CLICK",     commandsClick, }, // Кратковременная "1" на порту 1сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=CLICK )
  {"LCLICK",     commandsLClick, }, // Кратковременная "1" на порту 3сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=LCLICK )
  {"AN", commandsAn, },          // Получить состояние аналогово порта (вызов http://xx.xx.xx.xx/command?2=AN )
  {NULL,      NULL }
};
// несколько комманд ?1=AN&2=AN
/**********************************************************************************************************************
 *
 * Function:    cliProcessCommand
 *
 * Description: Look up the command in the command table. If the
 *              command is found, call the command's function. If the
 *              command is not found, output an error message.
 *
 * Notes:       
 *
 * Returns:     None.
 *
 **********************************************************************/
void cliProcessCommand(WebServer &server)
{
  int bCommandFound = false;
  int idx;

  gParamValue = strtol(gParamBuffer, NULL, 0);  // Convert the parameter to an integer value. If the parameter is empty, gParamValue becomes 0.
  for (idx = 0; gCommandTable[idx].name != NULL; idx++) {  // Search for the command in the command table until it is found or the end of the table is reached. If the command is found, break out of the loop.
    if (strcmp(gCommandTable[idx].name, gCommandBuffer) == 0) {
      bCommandFound = true;
      break;
    }
  }

  if (bCommandFound == true) {  // Если команда найдена (в массиве команд), то выполняем ее. Если нет - игнорируем
    (*gCommandTable[idx].function)(server);
  }
  else { // Command not found
    server.print("ERROR: Command not found");
  }
}


/**********************************************************************************************************************/
/* Обработчики команд */

void commandsAn(WebServer &server) {
  int anValueIn;
  if (gParamValue>=startAn && gParamValue<=endAn){
     anValueIn = analogRead(gParamValue);
            server.print("A");
            server.print(gParamValue);
            server.print("=");
            server.print(anValueIn);}
          else ErrorMessage(server);    
}

void commandsOn(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,LOW);
     EEPROM.write(gParamValue,LOW);}
  else  if (gParamValue>=startAnOut && gParamValue<=endAnOut){
    digitalWrite(gParamValue,LOW);
    EEPROM.write(gParamValue,LOW);}
else ErrorMessage(server);
}

void commandsOff(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,HIGH);
     EEPROM.write(gParamValue,HIGH);}
  else  if (gParamValue>=startAnOut && gParamValue<=endAnOut) {
    digitalWrite(gParamValue,HIGH);
    EEPROM.write(gParamValue,HIGH);}
else ErrorMessage(server);
}

void commandsClick(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,LOW);     
     delay(delayClick);
     digitalWrite(gParamValue,HIGH);}
     
  else if (gParamValue>=startAnOut && gParamValue<=endAnOut) {
     digitalWrite(gParamValue,LOW);     
     delay(delayClick);
     digitalWrite(gParamValue,HIGH);}
   else ErrorMessage(server);
}

void commandsLClick(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,LOW);     
     delay(delayLClick);
     digitalWrite(gParamValue,HIGH);}
  else if (gParamValue>=startAnOut && gParamValue<=endAnOut) {
     digitalWrite(gParamValue,LOW);     
     delay(delayLClick);
     digitalWrite(gParamValue,HIGH);}
else ErrorMessage(server);
}

void commandsStatus(WebServer &server) {
   if  (strcmp(gParamBuffer,  "ALL") == 0) { // выдать состояние всех пинов

       for(int i=startAn; i<=endAn; i++){
       server.print("A");  // вывод данных дискретного входа
       server.print(i);
       server.print("=");
       server.print(analogRead(i));
       server.print(";");   
       }
       
            char my_st[8];  
          for(int i=startPin;i<=endPin;i++) {
            int st=digitalRead(i);
            itoa(st,my_st,10);
            server.print("P");
            server.print(i);
            server.print("=");
            server.print(my_st);
            server.print(";");
          }
           for(int i=startAnOut;i<=endAnOut;i++) {
            int st=digitalRead(i);
            itoa(st,my_st,10);
            server.print("P");
            server.print(i);
            server.print("=");
            server.print(my_st);
            server.print(";");
          }         
     
   } else { // выдать состояние только 1 пина
          if (gParamValue>=startPin && gParamValue<=endPin) {
            server.print("P");
            server.print(gParamValue);
            server.print("=");
            server.print(digitalRead(gParamValue));}
          else if (gParamValue>=startAnOut && gParamValue<=endAnOut) {
            server.print("P");
            server.print(gParamValue);
            server.print("=");
            server.print(digitalRead(gParamValue));}
          else ErrorMessage(server);
    }
}

void commandsHelp(WebServer &server) {
  int idx;
  for (idx = 0; gCommandTable[idx].name != NULL; idx++) {
    server.print(gCommandTable[idx].name);
    server.print("<br>");
  }
}

/**********************************************************************************************************************/

void ErrorMessage(WebServer &server) {
    server.print("Ошибка: Этот порт не настроен ");
}

/**********************************************************************************************************************
* Разбор запроса
**/
void parsedRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  URLPARAM_RESULT rc;
  char name[NAMELEN];
  int  name_len;
  char value[VALUELEN];
  int value_len;

  server.httpSuccess();  // this line sends the standard "we're all OK" headers back to the browser

  /* if we're handling a GET or POST, we can output our data here.
     For a HEAD request, we just stop after outputting headers. */
  if (type == WebServer::HEAD)
    return;

  if (strlen(url_tail))
    {
    while (strlen(url_tail)) // Разбор URI на составные части (выборка параметров)
      {
      rc = server.nextURLparam(&url_tail, name, NAMELEN, value, VALUELEN);
      if (rc == URLPARAM_EOS) {
  //      server.printP(Params_end);
      }
       else // Получили параметр (name) и его значение (value)
        {
        // Выполняем команды
        strcpy (gCommandBuffer, value); // параметры (значение)
        strcpy (gParamBuffer, name); // команда
        cliProcessCommand(server);
        }
      }
    }
/*    
  if (type == WebServer::POST)
  {
    server.printP(Post_params_begin);
    while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
    {
      server.print(name);
      server.printP(Parsed_item_separator);
      server.print(value);
      server.printP(Tail_end);
    }
  }
*/

}

void get1wireDevices(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  //TODO получить все устройства на шине и выдать на страницу
   int numberOfDevices = sensors.getDeviceCount();
   sensors.begin();
   for(int i=0;i<numberOfDevices; i++) {
      if(sensors.getAddress(Termometers, i))
      {
          server.print("T");
          server.print(i);
          server.print(":");
          for (uint8_t i = 0; i < 8; i++) {
            if (Termometers[i] < 16) server.print("0");
              server.print(Termometers[i], HEX);
          }
          float tempC = sensors.getTempC(Termometers);
          server.print(":");
          server.print(tempC);
          server.print(";");
      } else {
            // not found
            server.print("NOT FOUND");
      }
    }
}


void stateRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  strcpy (gParamBuffer, "ALL");
  commandsStatus(server);
}

/**********************************************************************************************************************
* Генерация и вывод информации об устройстве
**/
void infoRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  server.printP(Page_info);
  server.print("<b>IP-адрес устройсва: </b>");
  server.print(Ethernet.localIP());
  server.print("<br><b>Расположение:</b>");
  server.printP(location_info);
  server.print("<hr><b>Информация портов: </b><br>");
  server.printP(pin_info);
  server.print("<hr><b>Cостояние портов: </b><br>");
  strcpy (gParamBuffer, "ALL");
  commandsStatus(server);
  server.print("<hr><a href='/getdev'>1-wire устройства</a>");
  server.print("<hr><b>Команды:</b><br>");
  commandsHelp(server);
  server.print("<hr><b>Версия: </b>");
  server.printP(version_info);
  
}

/**********************************************************************************************************************
* Поиск устройств (датчиков температуры на шине 1-wire)
**/
void searchDevices() {
   Serial.print("Start search on 1-wire");
   int numberOfDevices = sensors.getDeviceCount();
   sensors.begin();
   
   for(int i=0;i<numberOfDevices; i++) {
      if(sensors.getAddress(Termometers, i))
      {
          Serial.print("Found device ");
	  Serial.print(i, DEC);
          Serial.print(" with address: ");
          for (uint8_t i = 0; i < 8; i++) {
            if (Termometers[i] < 16) Serial.print("0");
              Serial.print(Termometers[i], HEX);
          }

          Serial.print("Resolution actually set to: ");
	  Serial.print(sensors.getResolution(Termometers), DEC); 
          Serial.println();
          float tempC = sensors.getTempC(Termometers);
          Serial.print(tempC);
          Serial.println("C");
      
      } else {
            // not found
      }
    }
}


/**********************************************************************************************************************/
void setup() {
  // Для дебага будем выводить отладочные сообщения в консоль
  //TODO Убрать вывод в консоль "за дабаг" (т.е. вывод только если скимпилированно с поддержкой дебага)
  Serial.begin(9600);
  Serial.println("Start");
  
Ethernet.begin(mac, ip, dns_server, gateway, subnet); // Инициализируем Ethernet Shield
//****DHCP**********************
 /*
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
*/  
//*************************

  webserver.setDefaultCommand(&infoRequest); // дефолтная страница вывода (информация о контроллере)
  webserver.addCommand("command", &parsedRequest); // команды
  webserver.addCommand("state", &stateRequest); // выдать состояния всех устройств
  webserver.addCommand("getdev", &get1wireDevices); // получить список устройств на 1-wire
  webserver.begin();
  
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
  // Настройка портов на вывод
  for (int thisPin = startPin; thisPin <=endPin; thisPin++)  {
    digitalWrite(thisPin, HIGH);
    pinMode(thisPin, OUTPUT);
    digitalWrite(thisPin, EEPROM.read(thisPin));    
  }
  //Инициализация аналоговых портов на выход, для работы с реле
  for (int thisPin = startAnOut; thisPin <=endAnOut; thisPin++)  {
    digitalWrite(thisPin, HIGH);
    pinMode(thisPin, OUTPUT);
    digitalWrite(thisPin, EEPROM.read(thisPin));    
  }

digitalWrite(15, HIGH);//подтягивающие резисторы на входе включаем
digitalWrite(16, HIGH);//подтягивающие резисторы на входе включаем

  // Настройки 1-wire 
  sensors.begin(); // Инициализация шины 1-wire (для датчиков температуры)
  sensors.requestTemperatures(); // Перед каждым получением температуры надо ее запросить
  
  searchDevices();
 
 
  
}

/**********************************************************************************************************************/
void loop() {
  char buff[64];
  int len = 64;
  webserver.processConnection(buff, &len);  // process incoming connections one at a time forever

   EthernetClient client;

 for( int i = 0; i < MAX_PINS; i++) 
{ 
//  val_array[i] = EEPROM.read(i);//-------------------------------------------
//  byte l_pin_state = analogRead(pin_array[i]); //считать данные
  int l_pin_state = analogRead(pin_array[i]); //считать данные
  if( l_pin_state != val_array[i] ) // сравнить l_pin_state и val_array[i]
        { 
          Serial.print("Pin");
        Serial.print(pin_array[i]);
        Serial.print("=");
        Serial.println(l_pin_state);
        Serial.print("=");        
        Serial.println(val_array[i]);
        

        if (client.connect(rserver, 80)) {
        sprintf(buf, "GET /objects/?object=MegaD1&op=m&m=statusChanged&status=%i HTTP/1.1", (int)l_pin_state);
 //"GET /objects/?object=sensorMovement1&op=m&m=statusChanged&status=%i HTTP/1.0"
//будет отправлен запрос на сервер вида /objects/?object=sensorMovement1&op=m&m=statusChanged&status=1
//(вызов метода statusChanged объекта sensorMovement1 с параметром status=1)

 
        client.println(buf);
        } else Serial.println("connection failed");
        client.stop();
        
        //sprintf(buf, "GET /objects/?object=D8&op=m&m=statusChanged&status=%i HTTP/1.0", (int)l_pin_state);
        val_array[i] = l_pin_state; // записать текущее значение в val_array
//        EEPROM.write(i, l_pin_state);
        delay(20);
  }

}
}
Ivan
Сообщения: 1474
Зарегистрирован: Сб окт 12, 2013 11:03 pm

Re: Помощь в управлении освещением

Сообщение Ivan »

Проблема нужно отлаживать. Если я так вставлю 80% что заведётся.
Я собирался на ардуине делать контролер 1-wire slave (только несколько устройств эмулировать). т.к. у меня по дому везде 1-wire сеть. И не собирался выводит ардуину в сеть ethernet
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
alekszander
Сообщения: 178
Зарегистрирован: Вс янв 05, 2014 5:37 am

Re: Помощь в управлении освещением

Сообщение alekszander »

Ivan писал(а):Проблема нужно отлаживать. Если я так вставлю 80% что заведётся.
Я собирался на ардуине делать контролер 1-wire slave (только несколько устройств эмулировать). т.к. у меня по дому везде 1-wire сеть. И не собирался выводит ардуину в сеть ethernet
Жаль конечно. Ладно сами будем выкручитваться.
Warms
Сообщения: 9
Зарегистрирован: Пт янв 24, 2014 11:17 pm

Re: Помощь в управлении освещением

Сообщение Warms »

Ivan писал(а):Проблема нужно отлаживать. Если я так вставлю 80% что заведётся.
Я собирался на ардуине делать контролер 1-wire slave (только несколько устройств эмулировать). т.к. у меня по дому везде 1-wire сеть. И не собирался выводит ардуину в сеть ethernet
А вот можно на этом месте поподробнее? Насчет эмуляции 1-wire slave на arduino?
Ivan
Сообщения: 1474
Зарегистрирован: Сб окт 12, 2013 11:03 pm

Re: Помощь в управлении освещением

Сообщение Ivan »

Проект в стадии разработки, но я уже решил поделится
http://smartliving.ru/forum/viewtopic.php?f=6&t=1464
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Ответить