Віддалене керування пристроями або дружимо смартфон та Launchpad
User Rating: / 5
PoorBest 
There are no translations available.

Remote ControlІснує доволі багато способів змусити працювати смартфон та мікроконтролер в парі. Один з них розглядається в цій статті.
Сама ідея керування пристроями, чи моніторингу потрібних даних на відстані, є досить цікавою та креативною. Такі рішення можна побачити в проектах “розумний дім” та подібних. Зазвичай, в потрібний момент під руками опиняється не все необхідне обладнання, тому наш проект буде використовувати апаратну складову по мінімуму.
Перш за все, потрібно зробити проект системи. Нижче схематично показані основні складові елементи, та взаємодія між ними:
Remote Control-1
Схема доволі проста і вона дає уяву про масштаби проекту та ресурси, які потрібно задіяти. Також відразу виникає чимало питань, наприклад, яким чином “зв’язати” мікроконтролер та ПК, або як читати команди з бази даних, щоб бути в курсі, що потрібно виконувати мікроконтролеру, і так далі, але давайте все поступово.
Виділяємо в схемі ключові вузли та визначаємо їх функції
Перший: це веб-сервер, він знаходитиметься віддалено, буде опрацьовувати команди, які ми передаємо та зберігати їх в базі даних. Скористаємось джентльменським набором: PHP+MySQL. Команди, які надійдуть з смартфону будуть оброблені та записані в базу даних, база даних та код обробки даних буде наведений нижче.
Другий:  локальний сервер чи ПК, на ньому знаходитиметься програмний код, який робитиме запити до бази даних та буде відправляти команди на наш пристрій виконання - Launchpad. Мова, на якій писатимемо програму, має назву Processing - це відкрита мова програмування, написана на Java. Більш детально можна прочитати на сайті http://www.processing.org/.
Третій: це сам мікроконтролер (МК) - тут зупинимось трохи детальніше. Розглянемо відладжувальну плату LaunchPad MSP-EXP430G2 від компанії Texas Instruments, яка активно рекламує МК серії MSP430.
Плата та контролер певний час пропонувалися за досить привабливою ціною і тому стали доволі популярними. Ззовні плата схожа на Arduino, але зрозуміло, що не може бути сумісною з нею.
Remote Control-2
Фотопорівняння плат.
Remote Control-3
З таблиці зрозуміло, що мікроконтролери компанії TI є не такими “прокачаними” в плані периферії, при порівнянні з AVR Arduino, але за енергозбереженням MSP430 є лідером серед МК.
Середовище програмування Launchpad - Energia, воно не є основним програмним продуктом для даних МК, але досить популярне серед розробників, бо дуже нагадує Android IDE.
Четвертий: смартфон - у нашому випадку під управлінням Android OS. Тут нічого особливого від смартфону не знадобиться. Розробляти інтерфейс керування будемо за допомогою HTML 5, CSS 3, JavaScrip, та бібліотеки JQuery: все це закинемо в так званий “тостер” -  PhoneGap і вуаля - маємо установочний пакет, з нашим інтерфейсом керування для потрібної нам операційної системи.
З планом дій ніби все зрозуміло, залишилось розібрати програмний код та показати систему в дії. Забігаючи наперед відзначу, що весь необхідний код можна завантажити з мого репозиторія на GitHub: github.com/flash-man/RDM. Насправді, все дуже просто, але давайте розглянемо код, щоб не виникало зайвих питань.
sketch.ino - необхідний для роботи Launchpad, знаходиться в папці: RDM/arduino_launchpad/launchpad/sketch/ Відкривається та завантажується на плату контролера за допомогою Energia.
Ініціалізуємо роботу з світло-діодами та послідовним портом:
  void setup()
{
  Serial.begin(9600);
  pinMode(RED_LED, OUTPUT);
  pinMode(GREEN_LED, OUTPUT);
  digitalWrite(RED_LED, LOW);
  digitalWrite(GREEN_LED, LOW);  
}
Перевіряємо дані, які прийшли через послідовний порт, та вибираємо відповідну дію:
void loop(){
  if (Serial.available()){
       cmd = Serial.read() - '0';
       Serial.print(cmd); }
     if (cmd == 0) {
          digitalWrite(RED_LED, LOW);}
     if (cmd == 1) {
    …
    ...
}
launchpad.pde - робить запити до бази даних та посилає відповідні команди в послідовний порт, запускається в середовищі Processing, знаходиться в папці: RDM/processing_scetch/
Підключаємо необхідні бібліотеки:
import processing.serial.*;
import de.bezier.data.sql.*;
Serial new_my_port;
MySQL myDBconection;
Ініціалізуємо роботу з послідовним портом, базою даних та оголошуємо змінні (name_of_user, input_pass, name_of_database, hosting повинні містити дані про користувача, назву та адресу бази даних):
void setup()
{
  new_my_port = new Serial(this, Serial.list()[0], 9600);
  String name_of_user = "my_user_name";
  String input_pass = "password_for_my_user";
  String name_of_database = "my_database_name";
  myDBconection = new MySQL( this, "hosting-name", name_of_database, name_of_user, input_pass );
  myDBconection.connect();
}
Serial.list()[0] - використовується для зв’язку з відлагоджувальною платою, значення в квадратних дужках “0” і воно залежить від налаштувань віртуальних COM-портів. Це значення можна переглянути в  середовищі Energia, Tools>Serial Monitor.
Далі, головний цикл роботи програми: тут виконуються запити до бази даних та відправка прочитаних команд в послідовний порт:
void draw()
{    
  myDBconection.query( "SELECT * FROM comand WHERE id = (SELECT max(id) FROM comand)" );
  while (myDBconection.next())
   {
    int a = myDBconection.getInt("action");
    int c = myDBconection.getInt("comand_handler");    
    if (a == 0) new_my_port.write('0');
    if (a == 1) new_my_port.write('1');
    …
    …
}
В запиті до бази використовується вкладений запит для вибору останньої відправленої команди.
submit.php - сюди “посилатимемо” команди зі смартфону і звідси будемо записувати їх в базу - знаходиться в RDM/server_and_db/. Тут же знаходиться файл comand.sql - ним можна створити потрібну нам таблицю з відповідними полями. Також пам’ятайте, що доступ до бази даних повинен бути відкритий для різних IP-адрес. Я думаю коментувати вміст цих файлів не потрібно - там все надто просто. Краще розглянемо нашу програму для смартфона.
index.html - так, саме цей файл буде нашою програмою для смартфона. Вміст доволі простий, увагу може привернути частина, де ми відправляємо дані через Ajax: даний функціонал необхідний для того, щоб неперезавантажувати сторінку, коли працюватимемо в режимі програми.
Що ж тут відбувається? Спочатку шукаємо елемент з id = “comand_form” - це наша форма, після відправлення якої спрацьовує функція, що відповідає за збір даних з елементів форми, підготовки для відправлення, та саме відправлення. В змінній m_action, myhost змінюємо на адресу сайту, на якому знаходиться скрипт обробки форми.
</script>
<script type="text/javascript">
    $('#comand_form').submit(function(e){
        e.preventDefault();
        var m_method=$(this).attr('method');
        var m_action='http://myhost/submit.php';
        var m_data=$(this).serialize();
        $.ajax({
            type: m_method,
            url: m_action,
            data: m_data,
        success: function(result){
            $("#result").empty();
            $("#result").append(html);
        }
        });
        });
</script>
Після створення файлу створюємо його zip-архів. Заходими на веб-ресурс, призначений для створення програмних пакетів під різні платформи та відвантажуємо наш архів. Даний ресурс можна використовувати безкоштовно для створення однієї програми. Нам більше і не потрібно. Після створення необхідного “білда”, з'являється QR-код, за допомогою якого можна легко завантажити установочний пакет на смартфон. Після встановлення побачимо наступне:
Remote Control-4
От і все. Залишилось продемонструвати в дії цей міні проект:
Павло Лозінський, магістрант НТУУ «КПІ»
 
>
BookNewsPractice SearchPartnersAbout
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting
Google Analytics Alternative