![]() |
![]() |
#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) | |
|
|