Arduino, ESP8266 Lua, Raspberry Pi 2 && OpenHab. Умный дом: азы управления.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 12 май 2015.

  1. ИгорьК

    ИгорьК Оракул Модератор

    11.4.2. Проведем ряд злодейств над OpenHAB.
    Создадим item:
    Код (Java):
    Switch Dacha_OutLights "Отдельно стоящий столб" {mqtt=">[mosquitto:/myhome/outlights/command:command:on:ON],>[mosquitto:/myhome/outlights/command:command:off:OFF],<[mosquitto:/myhome/outlights/state:state:default]"}
    Вставим item куда-нибудь в sitemap:
    Код (Text):
    Switch item=Dacha_OutLights
    Перезагрузим OpenHAB командой:
    Код (Text):
    service openhab restart
    А теперь, путем точного попадания мышкой в возникший переключатель, наблюдаем как весело мигают светодиоды.
    Изначально, после загрузки ESP8266, оба диода должны светиться, после первого нажатия они должны включаться попеременно.

    Кстати, перед вами готовый интернет-переключатель - замените светодиоды на реле. И можно было бы не городить весь огород, а выкинуть старую систему управления.
    ... но как-то привычно. И опять же, постоянно валящийся на подоконнике брелок стал просто частью интерьера.
     
    Последнее редактирование: 27 окт 2015
  2. ИгорьК

    ИгорьК Оракул Модератор

    11.4.3 Скетч в Ардуино Про Мини будет выглядеть так:
    Программировать Ардуино отсоединенной от ESP8266!
    Код (C):

    #include <RCSwitch.h>

    bool sentOn = false;  // Замочки, чтобы не отсылать сигналы постоянно
    bool sentOff = false;

    #define ABOUT_ON 11 // На 11 и 12 ноге прием сигналов от ESP8266
    #define ABOUT_OFF 12

    #define ON_COMMAND 5592332 // Это коды на включение и выключение
    #define OFF_COMMAND 5592323


    RCSwitch mySwitch = RCSwitch(); // Инициируем то что требут библиотека

    void setup() {
        // Serial.begin(9600);
        mySwitch.enableTransmit(10); // На 10 ноге передатчик
        pinMode(ABOUT_ON, INPUT);    // На 11 и 12 - связь с ESP8266
        pinMode(ABOUT_OFF, INPUT);
    }

    void loop() {

      if (!digitalRead(ABOUT_ON) && !sentOn) { // Читаем ногу и проверяем сигнал на отправку, если не отправляли
            sentOn = true;    // Указываем что все поняли
            sentOff = false;    // Сбрасываем флаг противоположной операции
            mySwitch.send(ON_COMMAND, 24);    // Дважды, для надежности
            delay(1000);                    // Отправляем команду
            mySwitch.send(ON_COMMAND, 24);
          // Serial.println("Sent SwitchON");
        }

        if (!digitalRead(ABOUT_OFF) && !sentOff) {
            sentOn = false;
            sentOff = true;
            mySwitch.send(ABOUT_OFF , 24);
            delay(1000);
            mySwitch.send(ABOUT_OFF , 24);
            // Serial.println("Sent SwitchOff");
        }
    }
     
    Соединяем все, как указано здесь: http://forum.amperka.ru/threads/esp8266-raspberry-pi-2-openhab-Умный-дом-азы-управления.5043/page-2#post-43351
    Однако, щелкать выключателем через интернет - не слишком комильфо. Продолжим автоматизацию...
     
    Последнее редактирование: 27 окт 2015
  3. ИгорьК

    ИгорьК Оракул Модератор

    11.4.4. Продолжим автоматизацию, с целью зажечь фонарь после заход солнца, а выключить его в определенное время. Например в 0:30, когда трезвый уже ложишься спать, а под мухой - и в темноте преграды не страшны :)
    Создадим два item:
    Код (Java):

    Switch     Sunset_Event   "Включить на Закате"  { astro="planet=sun, type=set, property=end, offset=10" }
    DateTime    Sunset_Event_LastUpdate "Обновлено [%1$td %1$tb %1$tY %1$tT]"    <clock>
    А поместим в sitemap только Sunset_Event_LastUpdate, да желательно рядом с Dacha_OutLights:
    Код (Java):
    Text item=Sunrset_Event_LastUpdate valuecolor=[Sunrise_Event_LastUpdate>120="orange", Sunrise_Event_LastUpdate>300="red"]
    В заключение, создадим rules:
    Код (Java):
    rule "On Light of Sun"
    when
        Item Sunset_Event received update ON
    then
        postUpdate(Dacha_OutLights, ON)
        sendCommand(Dacha_OutLights, ON)
    end

    rule "Off Light At Time"
    when
        Time cron "0 30 0 * * ?"  // Every day 0:30 hours
    then
        postUpdate(Dacha_OutLights, OFF)
        sendCommand(Dacha_OutLights, OFF)
    end

    rule "When Updated Switch"
    when
        Item Dacha_OutLights received command or
        Item Dacha_OutLights changed or
        Item Dacha_OutLights received update
    then
        postUpdate(Sunrise_Event_LastUpdate, new DateTimeType()) // Информация о том, когда обновилось событие
    end
     
    Что же у нас получилось? Наш уличный фонарь стал включаться через 10 минут после захода солнца, а выключться - в 0:30. Итем Sunrise_Event_LastUpdate постоянно держит нас в курсе, когда произошло последнее обновление состояния выключателя.
    И, безусловно, включать и выключать фонарь(прожектор, подсветку, фару у шашлычницы) можно вручную, как брелоком, так и через OpenHAB.
    Счастливо расслабиться! :)
     
    Последнее редактирование: 27 окт 2015
  4. ИгорьК

    ИгорьК Оракул Модератор

    12. Пара необходимых настроек, на все случаи жизни.
    Код (Text):
    sudo dpkg-reconfigure locales
    и получить это:
    2222334.jpg

    И если вы живете в московской временной зоне, сделать так:
    Код (Text):
    sudo dpkg-reconfigure tzdata
    423452346.jpg
    Да! Именно Рига! Или Минск зимой! Но только не Москва.
    Последнее необходимо для правильной работы системы управления по Солнцу.

    Установка даты, времени:
    Код (Bash):
    # Дата и время:
    date MMDDhhmmYYYY.ss


    # Только время:
    date --set hh:mm
    Источник.

    Пароль у root возникает от:
    Код (C++):
    sudo passwd root
    Доступ root по ssh может получить путем:
    Код (Bash):
    nano /etc/ssh/sshd_config

    #PermitRootLogin without-password =>
    PermitRootLogin yes

    reboot
     
    Забился диск...
    Код (Bash):
    sudo du -sh /tmp/* /var/* /root/* /root/.* /opt/* /home/*
    apt-get autoremove && apt-get clean
    apt-get dist-upgrade
     
    Что где...
    Код (Bash):
    sudo mount --bind / /mnt
    sudo ncdu -x /mnt
    Пользователи в Mosquitto:
    Код (Bash):
    mosquitto_passwd /etc/mosquitto/users.list user

    # будет запрошено подтверждение пароля два раза
    Код (Bash):
    raspi-config
    Сначала это:
    Код (Bash):
    https://klenzel.de/5386#Erster_Start
     
    Последнее редактирование: 11 апр 2017
  5. ИгорьК

    ИгорьК Оракул Модератор

    13. Еще один способ дому поумнеть: где я?
    Ранее был описан способ определения присутствия хозяев, путем прозвона статического ip-адреса смартфона на наличие соединения с домашней сетью. Этот способ имеет два недостатка.
    - время срабатывания до одной минуты после соединения;
    - работает только там, где стоит устройство с OpenHAB.​
    А если у вас несколько мест обслуживания? Например, OpenHAB стоит у меня дома, а фонарики зажигает и контролирует температуру на даче.
    Конечно, самый лучший способ определения присутствия был бы следующим: смартфон, как только присоединился к необходимой сети, - сам отправляет об этом сигнал на сервер OpenHAB.
    Но как это сделать - я не знаю :(
    Поэтому, был исследован такой элемент биндинга, как MQTTitude. Правда, он тоже, к сожалению, оказался не без недостатков.

    Итак, способ требует установки на смартфон приложения OwnTracks.
    Несколько слов о нем. Приложение периодически определяет положение на местности смартфона и протоколом MQTT отправляет информацию на сервер. Сервер может быть как общедоступным, так и частным, как в нашем случае.
    Все смартфоны, объединенные одной подпиской, получают информацию о положении друг друга и отражают ее на карте.
    Ау, родители? Смысл доходит? Хотя детки сейчас тоже не бестолковые.
    (Для страдающих паранойей от того, что кому-то станет известно его местоположение. Кому надо - оно и так всегда известно, не известно только лишь вам самим. Так что не переживайте. Или вообще не пользоваться сотовой связью.)

    OwnTracks имеет два режима работы.
    Первый - с указанной в настройках периодичностью отправляет данные о своем положении.
    Второй - при достижении указанных в настройках мест (нахождении в указанном радиусе от точки) посылает об этом сигнал на сервер, который кроме указания координат, содержит информацию об имени точки и событии: пришел туда или покинул.
     
    Последнее редактирование: 27 окт 2015
  6. ИгорьК

    ИгорьК Оракул Модератор

    13.1. Создадим четыре item:
    Код (Java):
    Switch  OwnTrack_Igor_AtHome    "Игорь Здесь"        (OwnTrack)      { mqttitude="mosquitto:owntracks/igor/154765f5340a9ed1" }
    Switch  OwnTrack_Igor_home      "Игорь @ Дом"        (OwnTrack)      { mqttitude="mosquitto:owntracks/igor/154765f5340a9ed1:home" }
    Switch  OwnTrack_Igor_work      "Игорь @ Работа"     (OwnTrack)      { mqttitude="mosquitto:owntracks/igor/154765f5340a9ed1:work" }
    Switch  OwnTrack_Igor_dacha     "Игорь @ Дача"       (OwnTrack)      { mqttitude="mosquitto:owntracks/igor/154765f5340a9ed1:dacha" }
    Основное внимание здесь вот на что:
    mqttitude - способ биндинга;
    mosquitto - ваш mqtt клинт, который указан в файле openhab.cfg
    owntracks - только так и никак иначе;
    igor - имя, которое устанавливается в смартфоне;
    154765f5340a9ed1 - эти цифры смартфон прибавляет к посту сам. Их можно увидеть в настройках смартфона;
    work, home, dacha - события, на которые может реагировать OpenHAB и о появлении и уходу из которых сообщать смартфон.​
    Например, пришли домой - включился свет, приехали на дачу - включился фонарь на столбе, уехали - выключился. Или уехали с работы вечером - супруге оповещение на почту: готовь ужин.
     
    Последнее редактирование: 27 окт 2015
  7. ИгорьК

    ИгорьК Оракул Модератор

    13.2. Отредактируем openhab.cfg, раздел Mqttitude Binding
    Код (Bash):
    # Dacha
    mqttitude:home.lat=55.000000
    mqttitude:home.lon=37.000000

    # Optional. The geofence radius.
    mqttitude:geofence=200
     
    Откуда взялись цифры - смотрим здесь: http://forum.amperka.ru/threads/arduino-esp8266-raspberry-pi-2-openhab-Умный-дом-азы-управления.5043/page-2#post-42400
    mqttitude:geofence=200 - это радиус, находясь в котором от точки OpenHAB считает что вы в наличии.
     
    Последнее редактирование: 27 окт 2015
  8. ИгорьК

    ИгорьК Оракул Модератор

    13.3. Разбираемся с содеянным.
    Надеюсь, к этому моменту как воткнуть в sitemap созданные нами items объяснять не нужно.
    Мы создали четыре items.
    Первый (OwnTrack_Igor_AtHome) - связан с координатами точки, по прибытии в которую, сам OpenHAB включает этот item. Координаты записаны в файле openhab.cfg. Смартфон с периодичностью, указанной в настройках программы OwnTrack, посылает информацию о своем текущем положении, и эта информация обрабатывается OpenHAB. Когда приходит сообщение о координатах в радиусе 200 м (mqttitude:geofence=200 - записано в openhab.cfg) включатель срабатывает. Когда сообщение за пределами 200 - выключается.
    Три остальных реагируют непосредственно на сообщения из смартфона. Их координаты вносятся через меню смартфона Waypoints. И таких точек может быть сколько угодно. Здесь смартфон сам определяет - находится ли он в радиусе (тоже задается в настройках) определенной точки, или вышел за ее пределы и об обоих событиях сообщает OpenHAB.
    Что важно:
    - чтобы названия точек в смартфоне и items совпадали;
    - не забыть поставить галочку напротив Share.
    OpenHAB001.jpg
    [​IMG]
    [​IMG]
     
    Последнее редактирование: 19 сен 2016
  9. ИгорьК

    ИгорьК Оракул Модератор

    14. Мониторим сеть и самого себя (вновь).
    О пользе чтения мануалов говорят все умные люди, но я их не слушал. В результате родился способ определения наличия себя вблизи сервера OpenHAB, когда его железная часть пингует присутствие смартфона в сети. Происходит это раз в минуту, поскольку cron чаще не умеет, а осваивать python ради этого лень.
    Оказывается, авторы OpenHAB уже сделали такую фичу в нем самом и надо было лишь прочитать мануал.
    Создадим item(ы):
    Код (Java):
    Group    Network    (Home)
    Switch I_AT_Home_NWHelth "Здесь ли?"    (Network) { nh="192.168.0.177" }
    Switch I_Network "Сеть:"                (Network) { nh="www.google.com:80" }
    Первый итем - включается, когда сам OpenHAB пингует появление в сети вашего смартфона. Смартфону роутером должен быть назначен статический адрес.
    Второй - выключается, когда не может достучаться до серверa google. На это событие, например, можно повесить принудительную перезагрузку вашего роутера.
    По умолчанию пингование осуществляется раз в 5 секунд. Это время можно изменить, например { nh="www.google.com:80:600000" } будет пинговать сервер раз в десять минут.

    Каков же итог обучения дома распознавания нашего присутствия.
    Итак, мы можем заставить дом узнавать о нас тремя способами
    - через железный пинг,
    - через сервис OwnTracks и
    - через пинг самого OpenHAB.​

    Самым скоростным является последний.
    Железный пинг может применяться при определении вашего появления в сетях, где нет сервера OpenHAB, который, например расположен дома, а вы приезжаете на дачу.
    А вот об убытии с объектов лучше всего узнавать из сообщений OwnTracks, причем с использованием waypoint.
    Дело в том, что смартфон, если не используется некоторое время, видимо, с целью экономии энергии отключает (?) на некоторое время wi-fi, в результате чего пингующие системы иногда принимают решении о вашем отсутствии. Если на отсутствие завязаны какие-то события - они происходят.
    OwnTracks, наоборот, пока не убедится в том, что вы точно находитесь за пределами контрольной точки - не отправит об этом сообщение на OpenHAB.

    Таким образом, по моему мнению, наиболее эффективной связкой для определения прихода/ухода являются:
    - NetworkHealth binding для прихода и OwnTracks Waypoint для ухода;
    - железный способ для прихода туда, где нет сервера OpenHAB, и тот же OwnTracks Waypoint для ухода.
     
    Последнее редактирование: 27 окт 2015
  10. KamAdm

    KamAdm Нерд

    Я смотрю вы программируете esp8266 посредством lua. Не побывали через Arduino IDE для ESP8266?
    Я вот заказа пару esp8266 ESP-12E, но пока не трогал. Хочу Arduino IDE запрограммировать, но пока путаюсь с даташит
    [​IMG]
     
  11. ИгорьК

    ИгорьК Оракул Модератор

    Да, программирую ESP8266 на Lua следующим образом:
    - сама программа заливается через ESPlorer;
    - а редактор для нее - Notepad++.​
    У ESPlorer есть кнопка "Reload" - ей обновляю программу после сохранения в Notepad++ и дальше заливка и компиляция.

    Не пробовал через Arduino IDE.
    Я им вообще не пользуюсь даже для Ардуино - точно так же пишу скетчи в Notepad++ или CodeBlocks.
    А что касается его применения для ESP8266 - вообще не вижу смысла. В Lua все предельно ясно и весь инструментарий налицо - даже не знаю, что еще бы хотел. Это когда модуль используется отдельно. А в связке с Arduino - так UART он и есть UART.

    После Lua постоянно забываю ставить " ; " ... :)

    Все что касается API Lua для ESP8266 отлично изложено здесь: https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en
     
    Последнее редактирование: 16 июл 2015
  12. KamAdm

    KamAdm Нерд

    Что насчет размеров памяти? Я читал, что её не хватает порой. Все таки, загрузка интрапритатора и самих скриптов.
     
  13. KamAdm

    KamAdm Нерд

    Перечитал все что вы тут описывали. В интернете есть готовые ресурсы для умного дома, достаточно отправлять туда информацию с датчиков, с эти успешно справиться ESP8266. Она же как посредник для исполнительного механизма в обратной связи.
     
  14. ИгорьК

    ИгорьК Оракул Модератор

    Объем памяти небольшой, так и не самолетом же управлять. Скрипты компилируются. Есть специальные приемы в Lua загрузки и выгрузки из памяти тех модулей, которые необходимы в данный момент, после чего память чистится функцией collectgarbage().
    Это же IoT а не какие-то сложные расчеты. Общая логика очень проста: если произошло это - делать вот это, и все.
     
  15. ИгорьК

    ИгорьК Оракул Модератор

    Полно таких ресурсов в облаках. Но всегда хочется чего-то своего и, главное, очень гибкого - OpenHAB в данном случае. Ничего слишком хитрого там нет.
     
    Последнее редактирование: 27 июл 2015
  16. Tomasina

    Tomasina Сушитель лампочек Модератор

  17. ИгорьК

    ИгорьК Оракул Модератор

    15. Гоняем данные через ESP8266 на Ардуино и обратно через UART.
    15.1. Код для ESP8266.

    Хотя ранее мы соединяли ESP и Ардуино для включения уличной подсветки, но соединение это было "дубовым": пины ESP устанавливались в определенное положение, а Ардуино считывала это положение и предпринимало необходимые действия. Вполне рабочий вариант. Однако, бывают случаи, когда этого мало. Например, в Ардуино много аналоговых входов, а в ESP - всего один, да и тот работает с маленьким напряжением. (ESP8266, как элемент Умного Дома, похоже, не особо затачивался под работу с аналоговым входом. )
    В такой ситуации модуль должен стать посредником. Один из вариантов и рассмотрим.
    Для настройки этой штуковины рекомендую пользоваться программой MQTT Spy.

    Ниже код, на Lua, который устанавливает соединение с брокером и подписывается на прием информации для топиков, которые объединены в группу "arduino/".
    Далее, модуль слушает как брокера, так и свой порт UART.
    Принимая информацию от брокера, он формирует из нее стринг. Стринг представляет собой шаблон "номер ноги - двоеточие - данные". Этот стринг отправляется в UART на Ардуино.
    Прослушивая UART модуль принимает данные в таком же формате, парсит их и отправляет брокеру.
    Код постарался хорошо закомментровать.
    При загрузке в модуль все комментарии надо удалить.
    После проверки работоспособности следует удалить и все настроечные print() - они также указаны в комментариях.
    Код (Lua):

    Broker="www.ВашCайт.com"
    port=1883
    myClient="ESPUART"
    name="ESPUART"
    pass="password"
    sendmessage = false

    m = mqtt.Client(myClient, 180, name, pass) -- Объявляем MQTT клиента
    m:lwt("/lwt", myClient, 0, 0) -- Сообщение OpenHab о потере связи
    m:on("offline", function(con) -- Функция для возобновления связи с брокером, если терялась сеть
      sendmessage = false
      print ("reconnecting...") -- Закомментировать для рабочего варианта
      print(node.heap()) -- Закомментировать для рабочего варианта
      tmr.alarm(1, 120000, 1, function() -- Многократный вызов
      m:connect(Broker, port, 0, function(conn) -- Адрес и порт брокера
      tmr.stop(1) -- если соединились, прекращаем соединение
      m:subscribe("arduino/#",0, function(conn)
      sendmessage = true
      print ("Subscribed!")
      end)
      end)
      collectgarbage() -- Почистим память
      end)
    end)

    uart.on("data","\n",  -- Функция обработки информаци из UART
      function(input)
      if wifi.sta.status() == 5 then
      print("Received from UART:", input) -- Закомментировать для рабочего варианта
      local topic -- Две локальные переменные для захвата информации
      local info
      -- Функция захвата. Захватываем только шаблоны типа "Цифры-двоеточие-цифры ( и необязательно)-точка-цифры"
      topic, info = string.match(input, "(%d+):(%d+%.?%d?%d?)")

      if topic ~= nil  then -- Только если прошел правильный захват. Иначе и topic и info будут nil
          if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil and sendmessage == true then
           print("Publish Topic: "..topic.." and Info: "..info) -- Закомментировать для рабочего варианта
           m:publish("arduino/"..topic.."/state",info,0,0) -- Публикуем на брокер
          end
      end
      topic = nil -- Освобождаем и чистим память
      info = nil
      collectgarbage()
      end
      end, 0)
    m:on("message", function(conn, topic, data) -- Если пришли банные от брокера
      if (string.find(topic, "state")) == nil then -- И если это не подтверждение состояния, то есть в строке отсутствует "state"
      local top = string.gsub(topic, "arduino/","") -- Удаляем лишнюю часть информации
      print("To Arduino -> ") -- Закомментировать для рабочего варианта
      print(top..":"..data) -- Отправляем на Ардуино по UART
      end
      collectgarbage() -- Чистим память
    end)

    tmr.alarm(0, 1000, 1, function() -- Подписываемся на все топики, начинающиеся на "arduino/"
      if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then -- Если связь установлена
      tmr.stop(0) -- Останавливаем этот таймер, чтобы на повторять подписку
      m:connect(Broker, port, 0, function(conn)  -- Подписываемся
      print("connected") -- Закомментировать для рабочего варианта
      m:subscribe("arduino/#",0, function(conn)
      sendmessage = true
      end)
      end)
      end
    end)
     
    Дальше.
     
    Последнее редактирование: 11 июл 2016
  18. ИгорьК

    ИгорьК Оракул Модератор

    15.2. Код для Ардуино.
    Если код для ESP8266 - практически окончательный, он лишь транслирует информацию между Ардуино и Брокером, то код для Ардуино очень приблизительный - все зависит от вашего устройства. Здесь приведен вполне рабочий, но не факт что у вас все именно так.
    Код показывает как принимать данные для управления и как отправлять данные с датчиков.

    В данном случае на 9 ноге Ардуино сидит нечто PWM управляемое, а 13 нога - обычный выключатель.
    На ногах А0 и А1 находятся два аналоговых датчика. Эти же ноги можно называть, соответственно 14 и 15. Именно на этом построен код. Чтобы не перегружать мозги ESP8266 аналоговые датчики опрашиваются последовательно с промежутком 10 секунд: ESP8266 нужно время, чтобы отправить информацию брокеру.

    Код (C):
    String command;        // String для чтения всей команды
    String temp1,temp2;    // Временные
    char inByte;            // Byte для чтения
    int pin;                // Нога для управления
    int data;                // Данные для управления
    int place = 0;            // Позиция, где обнаруживается знак "двоеточие".
                            // Когда следующий опрос датчика
    unsigned long timeToCheckPins;
                            // Задержка между опросами
    #define DELAY_TO_NEXT_CHECK_PINS 10000

    int nextPin = 14;        // Первый пин для аналогового чтения, то есть А0

    void setup(){
      Serial.begin(9600);
      Serial.println("Programm: UARTTest001003"); // Это удалить потом
      pinMode(13, OUTPUT);
      digitalWrite(13,0);
      timeToCheckPins = millis()+ DELAY_TO_NEXT_CHECK_PINS;
    }
    // 3:22.35 -  формат отправки и получения данных. Нога : Данные.

    void loop(){
      if (Serial.available() > 0){ // Читаем UART и формируем управляющий стринг
        inByte = Serial.read();
        if ((inByte >= 48 && inByte <=58) || inByte ==46 ) { // Цифры, двоеточие и точка
            command.concat(inByte); // command - управляющий стринг
        }
      }
      if  (inByte == 0x0A || inByte == 0x0D) { // Если знак перевода или возврата каретки
        inByte = 0;    // Обнуляем
        if (command != "") { // Это удалить потом
          Serial.println(command);
        }
        place = command.indexOf(":"); // Находим позицию ":"
        if (place == 1 || place == 2) { // Если она первая или вторая, то есть первая цифра из одного или двух знаков, иное - ошибка
            Serial.println("Yes!"); // Это удалить потом
            temp1 = command.substring(0,place); // Стринг номера управляемой ноги
            temp2 = command.substring(place+1); // Стринг полученного значения
            Serial.println(temp1); // Это удалить потом
            Serial.println(temp2); // Это удалить потом
            pin = temp1.toInt();  // Переводим стринги в цифры
            data = temp2.toInt();

            if ( pin == 9) { // Здесь ваши условия, в зависимости от управляемых ног
                analogWrite(pin,data);
            }
            else if ( pin == 13) {    // Если набрать 13:0 или 13:1 можно зажигать диод на плате
                digitalWrite(pin,data);
            }
            place = 0;
        }
      command = "";
      }

        if(millis() > timeToCheckPins) {  // Если пришло время проверки, то определяем новое
            timeToCheckPins = millis()+ DELAY_TO_NEXT_CHECK_PINS;
            int data = analogRead(nextPin); // Читаем данные с аналоговой ноги
            String toUART = (String) nextPin;    // Формируем стринг для отправки через UART
            toUART += ":";
            toUART += (String) data;
            Serial.println(toUART);
            nextPin++; // Выбираем пин для чтения в следующий раз
            if (nextPin >=16) { // Есди дошли до последнего - возвращаемся к первому
                nextPin = 14;
            }
        }
    }
     
    Дальше.
     
    Последнее редактирование: 11 июл 2016
  19. koala

    koala Нуб

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

    Я пыталась вникнуть, но слишком много непонятных моментов :oops:
     
    Последнее редактирование: 6 авг 2015
  20. ИгорьК

    ИгорьК Оракул Модератор

    Вам этот вопрос надо задавать здесь: http://forum.amperka.ru/forums/Закажу-проект.22/
     
    koala нравится это.