Задача проекта – удаленное управление 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Watchdog и Arduino Uno

Watchdog и Arduino Uno

Зачем нужен watchdog (сторожевой таймер)? Сторожевые таймеры используются, чтобы исключить пзавис..

Фольгированный текстолит двухсторонний 75х100мм

Фольгированный текстолит двухсторонний 75х100мм

Двухсторонний фольгированный медью текстолит для изготовления печатных платТолщина 1,5 мм Размеры 7..

67.60грн.

Разработка IoT устройств под ключ

Разработка IoT устройств под ключ

Разработка IoT устройств под ключ Вам нужно IoT устройство под ключ — от ..

AT24C02 EEPROM I2C

AT24C02 EEPROM I2C

Микросхема постоянной памяти EEPROMНапряжение питания 2,7 ... 5,5 ВОбъем 256 БайтКомуникация I2..

4.54грн.

Умный дом 1. Постановка задачи.

Умный дом 1. Постановка задачи.

Умный дом 1. Постановка задачи. Каждый человек представляет себе свой умный дом в соответствии со с..