Завдання проекту – віддалене управління 20 комп'ютерами з одного головного комп'ютера. Під керуванням мається на увазі керування клавіатурами та мишками цих комп'ютерів.

Для віддаленої передачі команд візьмемо радіо-модуль NRF24L01. З боку комп'ютера використовуємо контролер Wemos D1 mini на основі ESP8266.


До решти комп'ютерів підключимо контролери Arduino Pro Micro на основі ATmega32U4. Цей контролер дозволяє реалізувати емулятор USB клавіатури та миші. Я знайшов лише п'ятивольтову версію Arduino Pro Micro. Тому до схеми довелося додати STEP DOWN модуль до 3,3В для живлення радіо-модуля.


Монтаж я рекомендую виконувати паянням або проводами або за допомогою спеціальної плати.


Монтаж Arduino Pro Micro не дуже гарний через STEP DOWN модуль, але радіо-зв'язок надійно працює. Підключається готовий електронний пристрій через кабель USB micro до комп'ютера.


Усі команди, які мені були потрібні за проектом, зведені в цю таблицю. У першому стовпчику номер керованого комп'ютера. У другому стовпчику коди команд. У третьому стовпчику таблиці дії, які будуть виконуватись на віддалених комп'ютерах.


Наприклад, щоб зробити клік правою кнопкою миші на десятому комп'ютері необхідно ввести код p10q21 на головному комп'ютері.

Для натискання кнопки “d” на сьомому комп'ютері, потрібно ввести код p7q4 на основному комп'ютері.

Програма головного контролера настільки проста, що міститься на екрані монітора. У setup знаходяться налаштування UART порту контролера, а також радіо-модуля NRF24L01. Вибір радіо-каналу тут закоментований, тому що його номер автоматично змінюватиметься під кожен віддалений комп'ютер. Кожному керованому комп'ютеру виділяю окремий номер каналу.
#include <SPI.h>                                          
#include <nRF24L01.h>                                    
#include <RF24.h>  
                               
//RF24 radio(9, 10); //(CE, CSN)
RF24 radio(2, 15); //(CE, CSN)

int id;
int cmd;

void setup(){
  Serial.begin(115200);
  radio.begin();                                        
  //radio.setChannel(1);  // Channel(0 ... 127)
  radio.setDataRate     (RF24_1MBPS);  // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS)
  radio.setPALevel      (RF24_PA_HIGH); //RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm
  radio.openWritingPipe (0x1234567890LL);  // 0x1234567890
}
void loop(){                     
  if(Serial.available()) {
    String str = Serial.readString();
    if (str.indexOf("p")>-1){
      String str1 = str.substring(str.indexOf("p") + 1, str.indexOf("q"));
      id = str1.toInt();
    
      str1 = str.substring(str.indexOf("q") + 1, str.length());
      cmd = str1.toInt();
     
      if(id>127) id=127;
      if(id<0) id=0;
      radio.setChannel(id);  // Channel(0 ... 127)
      radio.write(&cmd, sizeof(cmd));
    }
  }
}

У loop йде обробка команд із монітора порту. З прийнятої команди виділяється номер комп'ютера і цей номер визначає радіо-канал, яким буде відправлений номер дії у віддалений контролер. Номер дії записується в змінну cmd, а номер комп'ютера змінну id. Наприкінці програми радіомодулю передається номер каналу та значення змінної cmd.

Програма для контролерів Arduino Pro Micro містить бібліотеки Keyboard та Mouse для емуляції віртуальної клавіатури та миші керованих комп'ютерів. У налаштуваннях кожного з керованих контролерів повинен бути заданий унікальний номер радіоканалу. Тут, наприклад, поставлено номер 11.
//w, a, s, d, q, e, r, f, c, SPACE, ESC, -'(консоль), TAB, Caps, Shift, F1, 1, 2, 3, rightclick, leftclick, x +20, x-20, y +20, y -20
//1, 2, 3, 4, 5, 6, 7, 8, 9,    10,  11,          12,  13,   14,    15, 16,17,18,19,         21,       20,     22,   23,    25,    24
#include "Keyboard.h"
#include "Mouse.h"
#include <SPI.h>      
#include <nRF24L01.h> 
#include <RF24.h>   

RF24 radio(9, 10);  //(CE, CSN)  

int cmd;

void setup(){
  delay(1000);
  Mouse.begin();
  Keyboard.begin();
  radio.begin();                                        
  radio.setChannel(11);                        // Channel  0 ... 127
  radio.setDataRate     (RF24_1MBPS);         // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
  radio.setPALevel      (RF24_PA_HIGH);       // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm
  radio.openReadingPipe (1, 0x1234567890LL);  // 0x1234567890
  radio.startListening  ();                             
//radio.stopListening   ();                             
}

void loop(){
  if(radio.available()){                                
    radio.read(&cmd, sizeof(cmd)); 
    switch (cmd) {
      case 22:
        Mouse.move(20, 0);
        break;
      case 23:
        Mouse.move(-20, 0);
        break;
      case 24:
        Mouse.move(0, -20);
        break;
      case 25:
        Mouse.move(0, 20);
        break;
      case 20:
        Mouse.click(MOUSE_LEFT);
        break;
      case 21:
        Mouse.click(MOUSE_RIGHT);
        break;
      case 1:
        Keyboard.write('w');
        break;
      case 2:
        Keyboard.write('a');
        break;
      case 3:
        Keyboard.write('s');
        break;
      case 4:
        Keyboard.write('d');
        break;
      case 5:
        Keyboard.write('q');
        break;
      case 6:
        Keyboard.write('e');
        break;
      case 7:
        Keyboard.write('r');
        break;
      case 8:
        Keyboard.write('f');
        break;
      case 9:
        Keyboard.write('c');
        break;
      case 10:
        Keyboard.write(' ');
        break;
      case 11:
        Keyboard.write(KEY_ESC);
        break;
      case 12:
        Keyboard.write('`');
        break;
      case 13:
        Keyboard.write(KEY_TAB);
        break;
      case 14:
        Keyboard.write(KEY_CAPS_LOCK);
        break;
      case 15:
        Keyboard.write(KEY_LEFT_SHIFT);
        break;
      case 16:
        Keyboard.write(KEY_F1);
        break;
      case 17:
        Keyboard.write('1');
        break;
      case 18:
        Keyboard.write('2');
        break;
      case 19:
        Keyboard.write('3');
        break;
    }
    delay(100);
    Keyboard.releaseAll();
  }
}


У loop контролер очікує на отримання номера дії від радіо-модуля. При отриманні номера виконується одна з команд з бібліотеки Keyboard або Mouse. Наприклад, при отриманні коду 22, курсор миші комп'ютера повинен пересунутися на 20 пікселів вправо.

При отриманні коду 3 буде натиснута клавіша “s” віртуальної клавіатури.

При отриманні команди 14 буде натиснуто клавішу CAPS_LOCK. Для повторення цього проекту під ваші завдання я рекомендую ознайомитись з бібліотеками Keyboard та Mouse детальніше. З ними підтримують роботу лише деякі контролери з лінійки Arduino. Тому Arduino Pro Micro обрано не випадково.

Після завантаження програм у контролери я запускаю монітор порту на основному комп'ютері і вводжу код команди p11q1, що означає: 11 комп'ютер натисніть клавішу "w". На віддаленому комп'ютері номер 11 відкрито блокнот для показу натискання клавіш клавіатури.

Також можна перевірити керування курсором миші.

Перевіримо також натискання правої і лівої клавіші миші.

Ось спрацював правий клік миші.

Ось спрацював лівий клік миші.

Сподіваюся, вам сподобався проект. З простими радіо-модулями NRF24L01 можна керувати комп'ютерами з відривом до 100м, а застосовуючи самі модулі з підсилювачами, відстань можна збільшити до 1км.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Плата STM32F103C8T6

Плата STM32F103C8T6

Мінімальна плата контролера від світового лідера по виробництву контролерів - фірми STM32.Для заливк..

211.50грн.

Контроль виконання програми Arduino

Контроль виконання програми Arduino

Контроль виконання програми ArduinoЦя стаття присвячена опису структур, що використовуються для упра..

Цикли 3 — Цикл while

Цикли 3 — Цикл while

Цикли 3 — Цикл while Вступ Цикл while — це конструкція, яка виконує код доти, доки задан..

Драйвер крокового двигуна RAMPS 1.4 для CNC або 3D-принтера

Драйвер крокового двигуна RAMPS 1.4 для CNC або 3D-принтера

Драйвер A4988 під шилд RAMPS 1.4Є можливість налаштовувати робочий струм двигуна за допомогою з..

60.91грн.

Кронштейн для кріплення крокового двигуна

Кронштейн для кріплення крокового двигуна

Якісний сталевий кронштейн підходить для кріплення крокового двигуна Nema 17, а також для його модиф..

153.09грн.