Arduino Mega Server
Модератор: Alex
Re: Arduino Mega Server
Alex, а почему вы не пользуетесь milight? вроде бы очень легко управляются, не дорого стоят и есть возможность использовать пульты + никаких провод в отличии от nooLite
Re: Arduino Mega Server
Я вообще не знаю, что это такое, первый раз слышу. Вообще, систем беспроводного управления существует миллион и я за интеграцию с ними, просто nooLite оказался под рукой. Если бы оказалось что-то другое — интегрировал бы и его.Alex, а почему вы не пользуетесь milight?
Можно попросить у друзей коммутатор и проверить гипотезу.Как бороться с роутером и вообще с AMS - не знаю ((
Re: Arduino Mega Server
Переделал немного датчики температуры - в в моём последнем варианте был косяк в
Выкладываю исправленный и доработанный для меги
*Информирует об ошибке при потере связи с датчиком.
*Переделал вывод в сериал ид датчиков (для удобства копирование)
*немного оптимизировал функцию подбора ИД датчиков memcmp
Код: Выделить всё
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 Re: Arduino Mega Server
http://majordomo.smartliving.ru/forum/v ... it=milightAlex писал(а):Я вообще не знаю, что это такое, первый раз слышу. Вообще, систем беспроводного управления существует миллион и я за интеграцию с ними, просто nooLite оказался под рукой. Если бы оказалось что-то другое — интегрировал бы и его.Alex, а почему вы не пользуетесь milight?
оч удобная и не дорогая штука
Re: Arduino Mega Server
Ну, не проблема — окажется под рукой — интегрирую. Или любой заинтересованный может самостоятельно интегрировать и выложить код модуля здесь.оч удобная и не дорогая штука
Re: Arduino Mega Server
Проект замечательный! Установил, запустил все работает.
Помогите пжл. настроить датчики, подключил к пин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
Каким образом записать? или я чего то не понимаю? заранее спасибо!
Помогите пжл. настроить датчики, подключил к пин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
Каким образом записать? или я чего то не понимаю? заранее спасибо!
Re: Arduino Mega Server
Вам нужно перевести номера датчиков в десятичный формат по принципу:
28 → 40
C0 → 192
и так далее. Потом заменить семь цифр на свои.
Ещё у вас не включено паразитное питание. О нём можете почитать в Интернет или в ближайшее время я выложу инструкцию по подключению на сайте.
28 → 40
C0 → 192
и так далее. Потом заменить семь цифр на свои.
Ещё у вас не включено паразитное питание. О нём можете почитать в Интернет или в ближайшее время я выложу инструкцию по подключению на сайте.
Re: Arduino Mega Server
Спасибо, с этим понятно, разобрался. Как теперь сделать, чтоб на страничке показывала температуру:
в файле 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>
в файле 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>
Re: Arduino Mega Server
Страница «Sensors» это шаблон для будущей реализации, сейчас там не настоящие значения, а просто написанные.я так понял, что там прописано статическое значение температуры!
Без подробной инструкции (документация сейчас пишется) вы не сможете вывести температуру. Могу порекомендовать пока пишется документация самостоятельно попробовать понять, как выводится температура, анализируя код.А как мне туда вытащить свои показания? в DASH температура меняется с 1го датчика но не смог понять откуда она берется:
Подсказка: ищите в файле scripts.js по слову dash-voltage.
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Контактная информация:
Re: Arduino Mega Server
Я, наконец, нашёл способ отладки скетчей 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 это можно сделать, но через окольные пути):
Но, чтобы такого добиться придётся немного потрудиться.
Инструментарий:
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
Россия навсегда!