使用ESP8266做为WIFI鼠标键盘
在前一篇文章中,(暂未实践)分析使用ESP32将有线键盘转换为蓝牙无线键盘,提到了基于ESP8266的一个有意思的开源项目,ESP8266 USB Software Driver,决定来折腾一下。模拟一个低速USB(USB 1.1)连接至计算机,在ESP8266开发板上使用WiFi的方式控制。现在可以实现的是,An Example USB HID,可以作为人体学输入设备使用。此处要注意,不要被误导了,这个开源项目不是将USB的鼠标键盘连接至ESP8266,来无线控制,在前面的一篇中已经阐述了为什么不能了。
这个项目还没有被移植到Arduino IDE中,所以我们得手动编译下。
下载编译esp-open-sdk
在cnlohr/espusb中有完整的Getting Started Guide,
前半段是官方的esp-open-sdk安装步骤,所以有啥问题可以参考官方的资料。
一开始安装依赖库。
Ubuntu 14.04:
$ sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf \
flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial \
sed git unzip bash help2man wget bzip2
Later Debian/Ubuntu versions may require:
$ sudo apt-get install libtool-bin
创建一个esp8266的文件夹,并进入。
mkdir ~/esp8266/
cd ~/esp8266/
然后就clone
git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
cd esp-open-sdk/
make
我们这里就用make命令就行了。还可以有
make STANDALONE=y
make STANDALONE=n
但是这里我们用不到。
编译中遇到的问题
我最开始使用的WSL,Windows的Linux子系统,使用的版本是Ubuntu 16.04。几乎,使用各种交叉编译工具,就没有一次就能成功的,如果不是发行版的问题,就需要解决一下网络问题,一般没什么特殊的问题。如果是其他平台,可以看官方esp-open-sdk的文档。
make[2]: Entering directory '/home/ubuntu/esp8266/esp-open-sdk/crosstool-NG'
[INFO ] Performing some trivial sanity checks
[INFO ] Build started 20190816.192731
[INFO ] Building environment variables
make的时候,会拉取其他依赖项,如果遇到了编译错误等问题,可以看esp-open-sdk/crosstool-NG/build.log
中的日志,看遇到了什么。显而易见,因为大家都明白的网络情况,所以几乎全是网络方面的问题。
当然需要Dai¥%Li,后文用DL代替,
export http_proxy=socks5://127.0.0.1:10808
export https_proxy=socks5://127.0.0.1:10808
但是我还是推荐,直接使用proxychains,比较省事。或者直接使用一台XX的服务器,我用的vultr,不要给我说还有什么网络问题。这个网速一慢,真的就不知道等到啥时候了。有时候,那个镜像的服务器可能恰好又在法国那种,即便是有了DL,速度也起不来。
sudo apt install proxychains
vim /etc/proxychains.conf
诸如提示,在wget某个链接时找不到cloog-0.18.4.tar.gz
了。
官方倒是甩锅比较直接,反正就是网络问题,自行解决。
Canned response: Download problems #100
可以手动上这里下载至目录esp8266\esp-open-sdk\crosstool-NG\.build\tarballs
。
jeremyd2019/crosstool-NG
http://www.bastoul.net/cloog/pages/download/cloog-0.18.4.tar.gz
当目录中已经有相应的依赖包时,会提示Already have。至于还有什么问题就再说吧,见招拆招。有些常见的问题可以看,crosstool-ng搭建交叉编译环境注意事项。
[DEBUG] Already have 'gmp-6.0.0a'
[DEBUG] Already have 'mpfr-3.1.3'
[DEBUG] Already have 'isl-0.14'
[DEBUG] Already have 'cloog-0.18.4'
[DEBUG] Already have 'mpc-1.0.3'
[DEBUG] Already have 'expat-2.1.0'
[DEBUG] Already have 'ncurses-6.0'
[DEBUG] Already have 'binutils-2.25.1'
放置文件应该是这样,请使用wget下载。
编译完成后
Xtensa toolchain is built, to use it:
export
PATH=/home/cyqsd/esp8266/esp-open-sdk/xtensa-lx106-elf/bin:$PATHEspressif ESP8266 SDK is installed, its libraries and headers are
merged with the toolchain
在使用了魔法让上面的编译成功了以后,咳咳咳,费这么大力干啥,Docker直接不就好了吗,Building/flashing under a Docker container。
export PATH=~/esp8266/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
我们回到根目录中,有如下的几个目录,对于平时开发足够了,但是这个项目要使用v1.5.4及以下版本,还得调整下。
- xtensa-lx106-elf 编译器
- esptool 烧录工具
- ESP8266_NONOS_SDK NONOS_SDK
警告:ESPUSB不适用于ESP8266_NONOS_SDK v2.0及更高版本。请下载并使用v1.5.4及以下版本。
从espressif下载ESP8266 nonos sdk v1.5.1并删除提供的sdk,因为提供的sdk是v2.0及更高版本。
rm sdk
cd ..
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1046"
unzip ESP8266_NONOS_SDK_V1.5.1_16_01_08.zip
最后,输入esp-open-sdk并将sdk v1.5.x链接回来。
cd esp-open-sdk/
ln -sf ../esp_iot_sdk_v1.5.1 sdk
还需安装libusb依赖项。
sudo apt-get install libusb-1.0-0-dev
从Git克隆espusb项目递归并进入'espusb'文件夹。
git clone --recursive https://github.com/cnlohr/espusb
cd espusb
此处是配置文件要注意,要进行一些修改。
- ESP的IP(默认值:192.168.4.1)
- 设备路径(默认值:/dev/ttyUSB0)
- PAGE_OFFSET:为网站分配的内存大小
- SDK_DEFAULT:SDK的路径位置(在我们的例子中:~/esp8266 /esp-open-sdk)
- FWBURNFLAGS:esptool将二进制文件烧录到ESP中的速度。CP2102默认值不能为1000000,请更改为115200或1500000。
- SDK:SDK文件夹的位置(默认为注释,删除'#'并将目录更改为“$(HOME)/esp8266/esp_iot_sdk_v1.5.1”(截图中为1.5.2根据实际情况修改,否则找不到)
如果需要修改引脚,不是这个下面的宏定义,真正的是这个的下面。
//DPLUS and DMINUS are not actually used except for setting things up.
#define DPLUS 12
#define DMINUS 13
运行make all来编译二进制文件。
export ESP_ROOT="~/esp8266/esp-open-sdk/"
make all
make burn
我没有把板子直接连接上来,烧写工具会报错,不管,拷贝出来用flash_download_tools。下次编译可以使用空中升级。
烧录固件
无论是自己从头编译的还是从Github下载的现有的Bin,均通过如下地址进行烧录。
文件名 | 烧录地址 |
---|---|
image.elf-0x00000.bin | 0x00000 |
image.elf-0x40000.bin | 0x40000 |
page.mpfs | 0x100000 |
编译完成后,会得到三个需要的文件。
/web
目录中
对于WSL可能还需要打开OpenSSH。
空中升级
如果您的ESP和开发PC在同一个网络中,运行make netweb,它将根据user.cfg中设置的内容找到IP地址,并烧写到ESP。
make netweb
连接线路
需要大于或等于1K的电阻
演示
CNLohr在油管上的视频:Wifi Controlled USB Mouse and Keyboard (ESP8285)
通过能连接到Wifi的设备,进行控制。
附录-完整的编译esp-open-sdk日志
百度网盘 提取码:m2ks
附录-真正的通过WiFi连接的鼠标
不过,话说回来抛开这个项目,我考虑的是这个东西科学吗?有基于2.4G的,基于蓝牙的,WiFi的?查了下,还真的有Ozmo2000芯片,不过也是板上的8051,11年左右的产品,这种东西,说实话,意义不大。颤抖吧凡人!全球第一款Wifi鼠标评测,只有以前的太平洋电脑网才真的在测评。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。