之前,我写过一篇“Arduino 打造自动输入器”【参考1】。文章的应用场景是“某些时候因为一些特殊的原因,使得我们不能直接使用U盘之类的存储设备”。在这样的条件下,我们可以用 Arduino打造一个虚拟键盘,一个字节一个字节的敲入我们期望的程序。有了输入内容的方法,接下来的问题是:如何把需要的内容输出出来。本文给出一个方法:将要输出的文件,转化为二维码通过屏幕输出,用户再用手机对着屏幕进行识别。
大多数人都不希望看着长篇的代码,这里我只是列出来大概的思路,有需要的朋友可以在后面下载到Delphi编写的代码。
具体方法是:将欲传文件切为一定的大小(决定大小的是QR Code的容量【参考2】,屏幕分辨率和你手机的摄像头的分辨率),然后通过程序将十六进制表示的字节转换为字符串,再通过程序生成一张张二维码,之后显示在屏幕上就可以通过手机来识别,识别之后可以发送到邮箱,再用另外的程序把所有的文件“粘”起来就恢复原样了。
下面是一个具体的操作例子。
首先选择文件,这里我们选一个比较小的文件。
程序会将文件转换为 QR_Code,这里我直接生成的是BMP,体积较大。切成了 6 个图片。
然后一边显示,一边用手机拍照(半自动)。
这个照片中展示的是 ZXing 软件进行识别,不过最后我发现小米手机的二维码扫描工具,感觉识别率和容错能力更好。
这里手工粘贴下来(我使用的二维码生成控件有问题,无法生成数字0 ,所以我代码上用 “-” 来替代了所有的 “0”)。
把每个文件的扫描结果单独存放在一个个*.labz文件中,使用替换方法将“-”替换为“0”,再使用另外的Delphi编写的工具把他们转换为十六进制。
替换之后会生成 0001.bin 这样的文件,最终用批处理将他们粘在一起就好了。
最终结果和原始文件没有差别。
完整的工具下载
Demo
参考:
1. http://www.lab-z.com/ardkey/ Arduino 打造自动输入器
2. GBT 18284-2000 快速响应矩阵码