Arduino Mega Server

Модератор: Alex

ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

Re: Arduino Mega Server

Сообщение ledmax » Вс фев 07, 2016 2:44 am

Переделал немного датчики температуры - в в моём последнем варианте был косяк в

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

if (!memcmp(tempSensor[i], idTempDat[n], 16)){
Выкладываю исправленный и доработанный для меги
*Информирует об ошибке при потере связи с датчиком.
*Переделал вывод в сериал ид датчиков (для удобства копирование)
*немного оптимизировал функцию подбора ИД датчиков memcmp

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

/*
  Modul Temperature
  part of Arduino Mega Server project
*/

#ifdef TEMP_FEATURE

#include <DallasTemperature.h>
#include <OneWire.h>

#define ONE_WIRE_BUS 2

byte const MAX_TEMP_SENSORS = 15;

byte const MAX_ID_DIGITS = 7;



char objSens[MAX_TEMP_SENSORS][12] = {"tempSTR", "tempHOM", "tempWRM", "sens4", "sens5", "sens6", "sens7", "colecIN", "colecOUT", "colec1", "colec2", "colec3", "colec4", "colec5", "colec6"};

// Sensors ID's
byte idTempDat[MAX_TEMP_SENSORS][MAX_ID_DIGITS] = {
  {40, 48, 197, 179, 0, 0, 0, },
  {40, 88, 199, 185, 0, 0, 0, },
  {40, 36, 193, 184, 0, 0, 0, },
  {40, 52, 197, 178, 0, 0, 0, },
  {40, 82, 194, 183, 0, 0, 0, },
  {40, 50, 197, 183, 0, 0, 0, },
  {40, 54, 197, 184, 0, 0, 0, },
  {40, 65, 194, 177, 0, 0, 0, },
  {40, 33, 198, 179, 0, 0, 0, },
  {40, 49, 197, 177, 0, 0, 0, },
  {40, 53, 197, 184, 0, 0, 0, },
  {40, 83, 198, 178, 0, 0, 0, },
  {40, 51, 197, 185, 0, 0, 0, },
  {40, 71, 196, 184, 0, 0, 0, },
  {40, 55, 197, 184, 0, 0, 0, },


};

float current_temp[MAX_TEMP_SENSORS];
int temp_[MAX_TEMP_SENSORS];

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempSensor[MAX_TEMP_SENSORS];

void tempInit() {
  initStart("Temperature");
  sensors.begin();
  timeStamp();
  Serialprint(" Parasite power ");
  if (sensors.isParasitePowerMode()) {
    Serialprint("ON\n");
  }
  else {
    Serialprint("OFF\n");
  }
  oneWire.reset_search();

  // locate devices on the bus
  timeStamp();
  Serialprint(" Found ");
  Serial.print(sensors.getDeviceCount());
  Serialprint(" devices\n");

  for (byte i = 0; i < MAX_TEMP_SENSORS; i++) {
    sensors.getAddress(tempSensor[i], i);
  }
  oneWire.reset_search();
  showSensorsId();
  modulTemp = MODUL_ENABLE;
  initDone();
}

void showSensorsId() {
  for (byte n = 0; n < MAX_TEMP_SENSORS; n++) {
    //timeStamp();
    //Serialprint("#");
    //Serial.print(n);
    Serialprint("{");
    for (byte i = 0; i < MAX_ID_DIGITS; i++) {

      Serial.print(tempSensor[n][i]);
      Serialprint(", ");
    }
    Serialprint("}, \n");

  }
}

void tempWorks() {
  sensors.requestTemperatures();
  for (byte i = 0; i < MAX_TEMP_SENSORS; i++)
    getTemperature(i);
}

void getTemperature(byte n) {

  for (byte i = 0; i < (MAX_TEMP_SENSORS + 1); i++) {

    if (!memcmp(idTempDat[n], tempSensor[i],  MAX_ID_DIGITS)) {

      current_temp[i] = sensors.getTempC(tempSensor[i]);

      timeStamp();

      Serial.print(objSens[n]);
      Serialprint(": ");
      Serial.println(current_temp[i]);

      temp_[i] = (current_temp[i] - (int)current_temp[i]) * 100;

      if ((current_temp[i] > -1) && (current_temp[i] < 0)) {
#ifdef MAJORDOMO_FEATURE
        sendRequestMinusM(objSens[n], "-", (int)current_temp[i], abs(temp_[i]));
#endif
      } else {
#ifdef MAJORDOMO_FEATURE
        sendRequestMinusM(objSens[n], "", (int)current_temp[i], abs(temp_[i]));
#endif
      }
      return; //если нашли нужный датчик, то переходим на следующий
    }

    else if (i == MAX_TEMP_SENSORS) { //если датчик не нашли, то сообщаем об этом (сюда можно добавить GET с ошибкой
      timeStamp();
      Serial.print(objSens[n]);
      Serialprint(" ");
      Serialprint("Sensor error");
      Serialprint("\n");
    }

  }
} // getTemperature( )

#endif // TEMP_FEATURE         
temp1.png
temp1.png (56.91 КБ) 18257 просмотров
temp2.png
temp2.png (142.88 КБ) 18257 просмотров
ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

Re: Arduino Mega Server

Сообщение ledmax » Вс фев 07, 2016 2:48 am

Alex писал(а):
Alex, а почему вы не пользуетесь milight?
Я вообще не знаю, что это такое, первый раз слышу. Вообще, систем беспроводного управления существует миллион и я за интеграцию с ними, просто nooLite оказался под рукой. Если бы оказалось что-то другое — интегрировал бы и его.
http://majordomo.smartliving.ru/forum/v ... it=milight

оч удобная и не дорогая штука
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Вс фев 07, 2016 9:37 am

оч удобная и не дорогая штука
Ну, не проблема — окажется под рукой — интегрирую. Или любой заинтересованный может самостоятельно интегрировать и выложить код модуля здесь.
Lisk
Сообщения: 16
Зарегистрирован: Пн апр 13, 2015 12:15 pm
Благодарил (а): 4 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение Lisk » Вт фев 09, 2016 12:20 pm

Проект замечательный! Установил, запустил все работает.
Помогите пжл. настроить датчики, подключил к пин2, в скетче нашел такую запись:

// Sensors ID's
byte idTempDat[MAX_TEMP_SENSORS][MAX_ID_DIGITS] = {
{40, 240, 72, 81, 3, 0, 0}, // STR
{40, 221, 16, 81, 3, 0, 0}, // SRV
{40, 23, 98, 87, 3, 0, 0}, // WRM
};

вроде как тут поменять надо на свои ид датчиков, но на моем датчике запись такая в терминале:

Dallas Temperature IC Control Library Demo
Locating devices...Found 2 devices.
Parasite power is: OFF
Device 0 Address: 28C0751506000056
Device 1 Address: 281B2A1506000090
Device 0 Resolution: 9
Device 1 Resolution: 9
Requesting temperatures...DONE
Device Address: 28C0751506000056 Temp C: 26.00 Temp F: 78.80
Device Address: 281B2A1506000090 Temp C: 26.00 Temp F: 78.80

Каким образом записать? или я чего то не понимаю? заранее спасибо!
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Вт фев 09, 2016 2:24 pm

Вам нужно перевести номера датчиков в десятичный формат по принципу:

28 → 40
C0 → 192

и так далее. Потом заменить семь цифр на свои.

Ещё у вас не включено паразитное питание. О нём можете почитать в Интернет или в ближайшее время я выложу инструкцию по подключению на сайте.
За это сообщение автора Alex поблагодарил:
Lisk (Ср фев 10, 2016 10:06 am)
Рейтинг: 1.16%
Lisk
Сообщения: 16
Зарегистрирован: Пн апр 13, 2015 12:15 pm
Благодарил (а): 4 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение Lisk » Ср фев 10, 2016 10:13 am

Спасибо, с этим понятно, разобрался. Как теперь сделать, чтоб на страничке показывала температуру:

в файле Sensors.htm нашел такие строки:
<tr class="tr-title"> <td class="td-first"><p>Название</p></td> <td><p>Объект</p></td> <td><p>Значение, °C</p></td> <td><p>Статус</p></td> <td><p>Здоровье, %</p></td> <td><p>Обновление, мин.</p></td></tr>
<tr class="tr-color2"><td class="td-first"><p>Температура на улице</p></td> <td><p>tempSTR</p></td> <td><p>15.3</p></td> <td><p>OK</p></td> <td><p>100</p></td> <td><p>1</p></td></tr>
<tr class="tr-color1"><td class="td-first"><p>Температура дома</p></td> <td><p>tempHOM</p></td> <td><p>27.3</p></td> <td><p>Ok</p></td> <td><p>100</p></td> <td><p>2</p></td></tr>
<t

я так понял, что там прописано статическое значение температуры! А как мне туда вытащить свои показания? в DASH температура меняется с 1го датчика но не смог понять откуда она берется:
<p>На улице: <span class="value" id="dash-voltage">...</span> C</p>
<p>Мощность: <span class="value" id="dash-power">...</span> Вт</p>
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Ср фев 10, 2016 1:09 pm

я так понял, что там прописано статическое значение температуры!
Страница «Sensors» это шаблон для будущей реализации, сейчас там не настоящие значения, а просто написанные.
А как мне туда вытащить свои показания? в DASH температура меняется с 1го датчика но не смог понять откуда она берется:
Без подробной инструкции (документация сейчас пишется) вы не сможете вывести температуру. Могу порекомендовать пока пишется документация самостоятельно попробовать понять, как выводится температура, анализируя код.

Подсказка: ищите в файле scripts.js по слову dash-voltage.
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: Arduino Mega Server

Сообщение uni » Ср фев 10, 2016 9:25 pm

Я, наконец, нашёл способ отладки скетчей Arduino. Выглядит это так:

Изображение

Но, чтобы такого добиться придётся немного потрудиться.

Инструментарий:

1. Установленная среда Arduino. Также нужно сделать специальный линк - связь каталогов, указывающий на место установки среды (C:\Arduino -> C:\Program Files\Arduino). В Far'е это комбинация Alt+F6. Для чего это нужно будет пояснено ниже.
2. Нужна последняя версия - AVR Studio 4.19.730 (можете скачать с официального сайта в разделе архивов или на рутрекере).
3. Нужен HappyJTAG2 (версия 2.45) и плата к нему. Плату можно сделать самому, но лучше заказать у DIHALT'а в магазине на easyelectronics.ru.
4. Нужна последняя версия компилятора avr-gcc с набором утилит. Я использую 4.9.2, если кому надо, то могу потом выложить архивчик папки. Можно использовать и другой.
5. Проект Arduino-Makefile, который есть на github'е. Там есть подробные инструкции что и как. На картинке показана работа с демо-проектом WebServer, который идёт там с примерами.
6. Arduino Mega 2560 + W5100.
7. Соединение при помощи 6 проводков платы отладчика с "бутером" из п. 6 по интерфейсу JTAG (земля, reset и 4 провода JTAG).
8. PuTTY конечно же в качестве терминала.

В общем, смысл такой. Выкидываем на помойку IDE Arduino и забываем про её существование в природе. Настраиваем "свой любимый" редактор на работу через makefile, т.е. чтобы можно было видеть листинги компиляции и гулять по ошибкам (это может быть реализовано по-разному). Для начала можно вообще без редактора запускать сборку, выполнив make в корне демо проекта из примеров.
Процесс изнутри выглядит следующим образом. Мы редактируем Makefile из примера под наши нужды (там нужно кое-что дописать по инструкциям). Далее собираем, выполнив команду make, при этом все зависимости подтянуться самостоятельно, так же как и в IDE Arduino. Если ошибок не будет, то появиться папочка с результатами компиляции, в которой будет в частности объектный файл .elf. В Makefile'е нужно обязательно указать формат отладочной информации, иначе студия не найдёт исходников и ничего не получится. Далее запускаем AVR Studio 4 и HappyJTAG2. С последним есть определённые тонкости - COM3 и COM4 должны быть свободны или отсутствовать для нормальной работы отладчика. Может быть достаточно даже COM4. Проблема в том, что студия неявно подключается к отладчику через COM4 и его либо не должно быть в Диспетчере устройств, либо он не должен быть занят (открыт в другой программе).
Скажу сразу, что я проверял работу HappyJTAG2 и в XP, и в Win7 (x86 и x64) - работает. При запуске HappyJTAG2 считывает сигнатуру мк и показывает его в своём окошке. Если мк опознан, то можно идти дальше. В студии открываем elf файл. Указываем отладчик JTAG ICE mkII и мк ATmega2560. Студия начнёт загружать прошивку в мк и потом спросит где находятся исходники. Лучше указать на корень папки с исходниками, где находится отлаживаемый проект (у меня папка с WebServer.cpp). Если попросит пути ещё к чему, а их нет, то тот же путь можно указать. На самом деле в elf файле должны быть перечислены все нужные файлы и пути к ним. Они потом появятся в дереве проекта студии.

После того как прошивка загрузится, студия перейдёт к точке входа - main(). По идее она должна найти её сама, но если этого не случилось, то нужно найти файл в дереве, где находится main() и выполнить Reset в меню отладки. Студия при этом будет в режиме отладки. После ресета точка входа должна быть помечена стрелочкой.

Тут есть ещё много неявных замечаний по процессу отладки. Нужно понимать, что не всё, что есть в исходнике, попадает в объектый файл. Поэтому "пошаговая" отладка не получится, если только у вас не выставлен уровень оптимизации -O0. Но и без него точки останова можно ставить и шагать до курсора (команда такая есть). При этом можно будет видеть всю периферию мк в отдельном окне, что очень удобно. Можно также смотреть на значения переменных в watch окне, если их туда перенести.

В общем, очень рекомендую тем, кто пишет сложный софт и не может найти глюки, освоить этот способ отладки.

Для примера WebServer Makefile может выглядит так (пути с пробелами не работают, поэтому нужен линк на место установки Arduino - в Windows это можно сделать, но через окольные пути):

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

# Arduino Make file. Refer to https://github.com/sudar/Arduino-Makefile

ARDUINO_DIR   = ../../../../Arduino
AVR_TOOLS_DIR = ../../../../avr-gcc
ARDMK_DIR     = ../../../../Projects/Arduino-Makefile

DEBUG = 1
DEBUG_FLAGS = -Os -gdwarf-2 -gstrict-dwarf

MCU         = atmega2560

BOARD_TAG   = mega

ARDUINO_LIBS = Ethernet SPI

include ../../Arduino.mk
Россия навсегда!
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Ср фев 10, 2016 9:57 pm

Чудо свершилось. :) Начато наполнение раздела «Документация».

В раздел «Оборудование» добавлено описание датчиков с которыми работает Arduino Mega Server. По каждому типу датчиков дано описание и принципиальная схема подключения.

http://hi-lab.ru/arduino-mega-server/documentation

Всем пользователям АМС посвящается. :)
За это сообщение автора Alex поблагодарили (всего 4):
samum (Ср фев 10, 2016 10:34 pm) • serghei (Ср фев 10, 2016 10:35 pm) • Pilot63 (Чт фев 11, 2016 12:03 am) • ингвар (Пн фев 15, 2016 1:23 pm)
Рейтинг: 4.65%
Pilot63
Сообщения: 5
Зарегистрирован: Ср дек 23, 2015 10:51 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение Pilot63 » Чт фев 11, 2016 12:24 am

Alex, Вы- нехороший человек, я только спать собрался а тут это, а завтра на смену на 3 дня)))) Шучу.
Теперь по шилду W5100: как уже писал, роут зуксель у меня его не увидел (что с DUE, что с UNO с примерами из библиотек и сам писал простейшие, дабы добиться от него того, чего добился мой друг Коля Остенбакен от польской красавицы Инги Зайонц. Он добился от неё любви. Ой, не оттуда), ну у меня простой, самый дешевый.
Железо было взято на работу и там замучено всячески.
Итог: при подключении заранее известной рабочей пары ардуино- интернет шилд не видится эта связка, , причем протестировано было и на других роутерах, увидел только старенький D- link, который непонятно почему еще не выкинули. При подключении в качестве посредника любого свича все в сетке определяется. Путем всяких хитрых извращений был настроен этот зуксель, проблема с портами и скоростью. Ну или мне такой шилд попался. Я уж чуть не выкинул его сперва.
Ответить