![]() |
|
|
|
|
#1 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Модуль "SmartPoint"
Создан SergeJey, он же является основателем программы управления умным домом "MajorDoMo" Перед установкой модуля установите модуль "Драйвер USB-Serial" для Вашей модели Arduino Запускаем и настраиваем модуль: Указываем ID или генерируем его соответствующей кнопкой, Указываем порт Arduino и скорость обмена. Регистрируем устройство в разделе SLP своего проффайла на http://connect.smartliving.ru и настраиваем правила и интерфейс узла автоматики. Интерфейс настроек: |
|
|
|
|
|
#2 |
|
Junior Member
Регистрация: 16.08.2012
Сообщений: 23
Вес репутации: 0 ![]() |
Спасибо за публикацию модуля!
В двух словах расскажу, для чего предназначен этот модуль. С помощью данного модуля и подключенного Arduino-контроллера роутер превращается в так называемый "Универсальный узел автоматики". Контроллер в данной схеме служит для взаимодействия с внешним миром -- он выдаёт информацию от датчиков в консоль и может принимать команды на исполнение. Роутер, в свою очередь, загружает из интернета набор правил, предназначеных для обработки входящих данных от контроллера. Правила загружаются при запуске роутера и работают без необходимости постоянного соединения с интернетом. В случае невозможности загрузить набор правил, используется последний загруженный. Более детальное описание концепции можно найти в статье Универсальный узел автоматики Я лично применяю данную систему для создания различных шлюзов и передачи данных в систему MajorDoMo, но вообще модуль можно использовать совершенно автономно -- правила обработки данных базовые, но многим можно успешно пользоваться (переменные, условные вызовы действий, отправка http-запросов, отправка команд контроллеру, таймеры и многое другое). Так же с установкой модуля пользователь получает несложное HTTP API для взаимодействия с подключенным контроллером. Кроме того, имеется возможность создавать человеко-дружественный интерфейс для просмотра поступающей информации, а так же для инициализации каких-либо команд. Важный момент -- в модуле есть так называемая "Облачная синхронизация", включив которую можно получить доступ к управлению устройством без дополнительной настройки сети (проброса портов и т.п.) Пример базового скечта для Arduino, который выдаёт случайным образом данные и может принимать команды: Код:
#include <EEPROM.h> //Needed to access the eeprom read write functions
#define PIN_LED (13) // INDICATOR
unsigned int unique_device_id = 0;
unsigned int packet_received_id = 0;
unsigned int uptime = 0;
unsigned int old_uptime = 0;
String inData;
struct SEND_DATA_STRUCTURE {
//put your variable definitions here for the data you want to send
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
//Struct can'e be bigger then 26 bytes for VirtualWire version
unsigned int device_id;
unsigned int destination_id;
unsigned int packet_id;
byte command;
int data;
};
SEND_DATA_STRUCTURE mydata;
//This function will write a 2 byte integer to the eeprom at the specified address and address + 1
void EEPROMWriteInt(int p_address, unsigned int p_value)
{
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >> 8) & 0xFF);
EEPROM.write(p_address, lowByte);
EEPROM.write(p_address + 1, highByte);
}
//This function will read a 2 byte integer from the eeprom at the specified address and address + 1
unsigned int EEPROMReadInt(int p_address)
{
byte lowByte = EEPROM.read(p_address);
byte highByte = EEPROM.read(p_address + 1);
return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}
void setup()
{
pinMode(PIN_LED,OUTPUT);
Serial.begin(9600);
// Device ID
randomSeed(analogRead(0));
Serial.print("Getting Device ID... ");
unique_device_id=EEPROMReadInt(0);
if (unique_device_id<10000 || unique_device_id>60000 || unique_device_id==26807) {
Serial.print("N/A, updating... ");
unique_device_id=random(10000, 60000);
EEPROMWriteInt(0, unique_device_id);
}
Serial.println(unique_device_id);
}
void blinking(int count) {
for(int i=0;i<count;i++) {
digitalWrite(PIN_LED, HIGH);
delay(1000);
digitalWrite(PIN_LED, LOW);
delay(1000);
}
}
void loop() {
uptime=round(millis()/1000);
if (uptime!=old_uptime) {
Serial.print("Uptime: ");
Serial.println(uptime);
old_uptime=uptime;
if (random(0,100)>70) {
Serial.print("DATA RECEIVED: ");
Serial.println(uptime);
}
}
if (Serial.available()) {
char c=Serial.read();
if (c == '\n' || c == ';')
{
Serial.println(inData);
if (inData.equals("blink")) {
Serial.println("BLINKING!");
blinking(3);
} else {
Serial.print("Unknown command: ");
Serial.println(inData);
}
inData="";
Serial.flush();
} else {
inData += (c);
}
}
delay(100);
}
Последний раз редактировалось SergeJey; 03.12.2014 в 21:23. |
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|