一个简单的python api,它与arduino设备交互,用于usb鼠标和键盘模拟。

PyDuino-MK的Python项目详细描述


pyduino mk


<;p>;一个简单的python api,它与arduino设备交互(通过串行通信),用于usb鼠标和键盘模拟。它兼容所有支持Arduino鼠标/键盘库的Arduino设备(Leonardo、Micro等)。<;/p>;
<;h1 id="功能">;功能<;/h1>;
<;ul>;
<;li>;简单的python 2.7 api<;li>;
<;li>;绝对鼠标定位<;li>;
<;li>;香草味Arduino(不含HID改装)<;li>;
<;li>;扩展鼠标和键盘功能<;li>;
<;li>;贝塞尔曲线鼠标移动<;li>;
<;li>;人性化键盘输入<;li>;
<;/ul>;
<;h1 id="Requirements">;要求<;/h1>;
<;ul>;
<;li>;<;a href="https://www.python.org/">;python 2.7.x<;/a>;(当前不适用于python 3.x)<;/li>;
<;li>;<;a href="http://pyserial.sourceforge.net/">;pyserial 2.7<;/a>;<;/li>;
<;li>;<;a href="http://www.arduino.cc/en/main/software">;arduino ide 1.6+<;/a>;<;/li>;
<;li>;兼容的Arduino设备<;li>;
<;/ul>;
<;h1 id="安装">;安装<;/h1>;
<;p>;要从pypi存储库安装pyduino mk,请从命令行运行以下命令:<;/p>;
<;pre>;<;code>;pip安装pyduino_mk
<;/code>;<;/pre>;<;p>;从源目录本地安装pyduino mk;<;code>;cd<;/code>;到包含<;code>;setup.py<;/code>;的<;python<;/code>;目录并运行:<;/p>;
<;pre>;<;code>;python setup.py build安装
<;/code>;<;/pre>;<;h1 id="设置">;设置<;/h1>;
<;ol>;
<;li>;通过USB将Arduino设备插入计算机。<;li>;
<;li>;<;code>;CD<;/code>;到<;code>;Arduino<;/code>;文件夹并打开Arduino IDE中的<;code>;Arduino.ino<;/code>;文件。<;/li>;
<;li>;将草图上载到Arduino设备。<;li>;
<;/ol>;
<;p>;上传Arduino草图后,Arduino设备现在可以接受来自Python API的串行消息。
<;h1 id="用法">;用法<;h1>;
<;p>;若要使用pyduino mk,必须首先导入Arduino mk鼠标/键盘常量和封装Arduino命令的<;code>;Arduino<;/code>;类。鼠标/键盘常量用于指定鼠标按钮(即<;代码>;鼠标左键<;/代码>;、<;代码>;鼠标右键<;/代码>;)和键盘键(即<;代码>;f1<;/代码>;、<;代码>;ctrl<;/代码>;、<;代码>;插入<;/代码>;)。<;p>;
<;pre>;<;code class="lang python">;<;span class="hljs keyword">;来自<;/span>;arduino mk.constants<;span class="hljs keyword">;导入<;/span>;。*
<;span class="hljs keyword">;来自<;/span>;arduino mk<;span class="hljs keyword">;导入<;/span>;arduino
<;/代码>;<;/前>;
<;p>;实例化<;code>;Arduino<;/code>;类既简单又容易。
<;pre>;<;代码class="lang python">;arduino=arduino()
<;/代码>;<;/前>;
<;p>;pyduino mk自动检测并建立与arduino设备所在的串行端口的连接。但是,如果由于任何原因pyduino mk无法这样做,则可以显式地将端口作为可选参数提供。<;/p>;
<;pre>;<;code class="lang python">;arduino=arduino(端口=<;span class="hljs string">;'com5'<;/span>;)<;span class="hljs comment">;《Windows示例》<;/span>;
<;/代码>;<;/前>;
<;pre>;<;code class="lang python">;arduino=arduino(端口=<;span class="hljs string">;'/dev/tty.usbmodemfa141'<;/span>;)<;span class="hljs comment">;>;OSX示例<;/span>;
<;/代码>;<;/前>;
<;pre>;<;code class="lang python">;arduino=arduino(端口=<;span class="hljs string">;'/dev/ttys2'<;/span>;)<;span class="hljs comment">;《Linux示例》<;/span>;
<;/代码>;<;/前>;
<;h2 id="移动鼠标">;移动鼠标<;/h2>;
<;p>;pyduino mk提供了两个模块,用于将鼠标从一个位置移动到另一个位置。这些模块采用两个表示笛卡尔坐标的参数。屏幕左上角表示原点的坐标系,<;code>;(0,0)<;/code>;,因此假定像素坐标在右下方向增加。<;/p>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;调用此模块将鼠标从当前鼠标位置移动到<;/span>;
<;span class="hljs comment">;线性运动中指定的鼠标位置。<;span>;
arduino.移动(<;span class="hljs number">;300<;/span>;,<;span class="hljs number">;300<;/span>;)
<;/代码>;<;/前>;
<;p>;<;img src="https://cloud.githubusercontent.com/assets/10904556/8178406/a19b4b9c-13c2-11e5-847e-b364a73d7445.gif"alt="besenham">;<;/p>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;调用此模块将鼠标从当前鼠标位置移动到<;/span>;
<;span class="hljs comment">;立方体贝塞尔运动中的指定鼠标位置。此模块生成<;/span>;
<;span class="hljs comment">;每次调用两个随机控制点以更改鼠标路径。<;span>;
arduino.bezier_move(<;span class="hljs number">;300<;/span>;,<;span class="hljs number">;300<;/span>;)
<;/代码>;<;/前>;
<;p>;<;img src="https://cloud.githubusercontent.com/assets/10904556/8178416/b67bfdae-13c2-11e5-9a39-234df8d34675.gif"alt="bezier">;<;/p>;
<;h2 id="单击鼠标">;单击鼠标<;/h2>;
<;p>;要使用鼠标单击,请调用"单击(按钮)"模块。此模块在50-100毫秒之间随机按住指定按钮,然后释放按钮,使其类似于人类的单击动作。<;/p>;
<;p>;所有单击模块都有默认的参数值,<;代码>;鼠标左键<;/code>;<;/p>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;左键单击(两种方式)<;/span>;
Arduino.点击()
Arduino.单击(鼠标左键)
<;/代码>;<;/前>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;中键单击<;/span>;
Arduino.单击(鼠标中键)
<;/代码>;<;/前>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;右键单击<;/span>;
Arduino.单击(鼠标右键)
<;/代码>;<;/前>;
<;p>;要在不短时间按住鼠标按钮的情况下单击,请使用快速单击(按钮)<;代码>;模块。<;p>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;快速自动单击<;/span>;
<;span class="hljs keyword">;而<;/span>;<;span class="hljs keyword">;为真<;/span>;:
Arduino.快速单击(鼠标左键)
<;/代码>;<;/前>;
<;p>;使用<;代码>;按(按钮)<;/code>;和<;代码>;释放(按钮)<;/code>;模块按住鼠标按钮并在命令下释放它。<;/p>;
<;pre>;<;code class="lang python">;<;span class="hljs keyword">;导入<;/span>;时间 < BR>
<;span class="hljs comment">;按住鼠标右键5秒钟<;span>;
按Arduino(鼠标右键)
时间。睡眠(<;span class="hljs number">;5<;/span>;)
Arduino.释放(鼠标右键)
<;/代码>;<;/前>;
<;前>;<;code class="lang python">;<;span class="hljs comment">;将鼠标左键拖动到(500,500)<;/span>;
按Arduino.Press()
arduino.bezier_move(<;span class="hljs number">;500<;/span>;,<;span class="hljs number">;500<;/span>;)
Arduino.释放()
<;/代码>;<;/前>;
<;h2 id="使用键盘">;使用键盘<;/h2>;
<;p>;若要将字符或字符串作为单个击键发送,请使用"编写(字符)<;/code>;或"编写(字符串)<;/code>"模块。<;p>;
<;p>;所有键盘模块都只能使用与键盘上的键对应的ascii字符<;strong>;工作。除了backspace之外,将不可打印字符的ascii代码作为参数传递将产生未定义的结果。<;/p>;
<;p>;但是,修改键(如ctrl、shift、alt)可以作为参数传递。修饰符键常量是可用的,可以从<;code>;pyduino_mk.constants<;/code>;导入。常量的名称几乎与<;a href="http://www.arduino.cc/en/reference/keyboard modifiers">;arduino键盘修饰符<;/a>;相同。唯一的区别是常量省略了前缀。<;code>;键左键&u ctrl<;/code>;变为<;code>;键左键<;/code>;,<;code>;键大写锁定<;/code>;变为<;code>;大写锁定<;/code>;,依此类推。<;/p>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;用两种方式编写字母"a"。字符或整数序数<;/SPAN>;
<;span class="hljs comment">;表示字符的可以用作参数。<;span>;
arduino.write(<;span class="hljs string">;'a'<;/span>;)
arduino.写入(<;span class="hljs number">;65<;/span>;)
<;/代码>;<;/前>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;编写"Hello World!"通过Arduino键盘进行一次按键。<;/SPAN>;
arduino.write(<;span class="hljs string">;"你好,世界!"<;/SPAN>;)
<;/代码>;<;/前>;
<;p>;与鼠标一样,键盘键也可以按住或松开。对于键盘,<;code>;按(按钮)<;/code>;和<;code>;释放(按钮)<;/code>;模块超载。<;code>;release all()<;/code>;可用于释放所有按下的键。<;/p>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;按ctrl+alt+delete<;/span>;
按Arduino键(左键控制)
按Arduino(左Alt)
按(删除)
arduino.releaseall()
<;/代码>;<;/前>;
<;h2 id="真实的人工键入">;真实的人工键入<;/h2>;
<;p>;消息也可以作为一系列击键发送,而不是作为单个击键来写入消息。pyduino mk提供的扩展键盘功能之一是人工打字模拟。这可以通过"类型(字符串)"模块获得。默认情况下,模块将以80 wpm的速度键入,准确率为96%。如果出现错误,Arduino将暂停片刻并纠正错误。如果需要,可以禁用错误以获得100%的准确性。<;/p>;
<;pre>;<;code class="lang python">;<;span class="hljs comment">;80 wpm,准确率为85%<;/span>;
arduino.type(<;span class="hljs string">;'https://github.com/nelsontran/pyduino mk/'<;/span>;,accurity=<;span class="hljs number">;85<;/span>;)
<;/代码>;<;/前>;
<;p>;<;img src="https://cloud.githubusercontent.com/assets/10904556/8180364/ffa5fd22-13d1-11e5-9b7b-0b76537b862f.gif"alt="键入">;<;/p>;
<;h3 id="可选参数">;可选参数<;h3>;
<;ul>;
<;li>;<;代码>;WPM<;/code>;(int)-每分钟单词数(假设每个单词5个字符)<;strong>;不考虑错误。<;/strong>;
<;li>;<;code>;错误<;/code>;(bool)-判断是否出错的真/假值。<;/li>;
<;li>;<;code>;准确性<;/code>;(int)-介于1和100之间的值,表示确定键入准确性的百分比。<;/li>;
<;/ul>;
<;h1 id="notes">;注释<;/h1>;
<;p>;请记住,在Arduino设备完成操作之前,所有Arduino模块都会阻塞。例如,调用"移动(目标)"<;code>;将导致python脚本挂起,直到arduino完成将光标移动到目标为止。如果您使用长消息和低精度的慢速wpm调用<;code>;type()<;/code>;,则需要等待一段时间才能完成调用。<;/p>;
<;h1 id="license">;许可证<;/h1>;
<;p>;Pyduino MK是根据麻省理工学院的许可证获得许可的(有关详细信息,请参阅<;代码>;许可证<;/代码>;。<;/p>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在一个问题被连续正确回答三次/并添加差异后,我如何将程序循环回开始   Java中未实例化的匿名类   java如何在Android中录制视频,只允许横向模式和最长时间录制时间   java从另一个活动发送实时消息   多线程java线程和互斥   java禁用Spring安全日志   JAVA伊奥。StreamCorruptedException:在与子级和父级ProcessBuilder通信时写入子级中的标准输出时,流头无效   使用Java(HttpURLConnection)对Restheart进行身份验证(对于Mongodb)   java如何解决Jenkins中的SAXParseException?   java为什么我需要mockito来测试Spring应用程序?   计算sin-cos和tan时缺乏精度(java)   java Hibernate。不同项目中相同一对一映射的不同行为   java图像滑块:如何使用JavaFX将图像放在另一个图像上   java Mockito在使用when时抛出NotAMockException   http Java servlet发送回响应