使用nodemcu和mpu6050给cemu做一个体感

说明

cemu就是这个 http://cemu.info/ (之所以做这个是因为我xbox手柄没体感 + 闲的)

nodemcu硬件选的esp12,体感用mpu6050

目前勉强每秒17帧数据吧,lua语言真的不会

项目地址 https://github.com/feilongfl/wifi-gyro

测试用硬件

我真的懒得焊板子…

绿色的是逻辑电平转换,我也不知道这是什么鬼,以前从来没用过这货,这次竟然不用读取不出来数据,不然我几根线就连好了(就是不想焊板子…)mpu6050插在IIC0上面

准备工作

wireshark

nodemcu代码及编译工具

cemu作者提供的PadTest(https://files.sshnuke.net/PadTest_1011.zip)

cemu传感器协议

这个主要可以参考项目 https://github.com/hjmmc/WebGyroForCemuhook ,里面注释描述了整个cemu传感器包

整个协议我也描述在 https://gist.github.com/feilongfl/2fe93501561d46ba59689b6a26b91ec5 这个wireshark插件里面了(虽然偷懒了一些只描述了陀螺仪和加速度计).

我实际用到的只有三种报文,分别是电脑的ping,mcu的pong和传输传感器数据的报文,三种报文使用相应的头部算法

头部

定义了包头,版本号,包长度,校验,id和类型,crc使用的是特征值为 0xCBF43926 的crc算法,nodemcu固件库中不存在,可使用https://github.com/nodemcu/nodemcu-firmware/pull/2771 (由于nodemcu成员希望绝大多数包使用lua语言创建,所以这个pr被合并的可能性不大)

电脑端ping报文

这个数据是电脑发送出来用于识别器件的,mcu收到后需要响应

这个包不需要制作出来,收到后解析(解析时候可以偷懒,毕竟mcu性能有限(我的lua太渣)),可得到电脑ip和端口

mcu的pong报文

这个报文就需要自己制作了,里面写一些状态参数,电池,id什么的

这个包基本是常量,直接硬拼出来就行了

传感器数据报文

先声明所有的unused指的是我没用到(偷懒)协议里面是有用的

陀螺仪单位是°,加速度单位是g,都是浮点型

lua优化记录

这个货开始的时候每秒2包都不到,经过一番艰难爬坑终于能有个十七八包左右(凑合应该能用了吧).

首先,绝对不要使用table.insert函数,这个函数巨慢无比可以使用t[#t+1] = xxx的写法,会快不少.

表的插入巨慢无比,因此在启动时先初始化包,以后每次仅修改有变化的位置

table序列化如果单纯使用lua去循环会奇慢无比,本来我制作了 https://github.com/nodemcu/nodemcu-firmware/pull/2774 来实现table序列化,但是被https://github.com/nwf指出修改了lua语言…好吧,这个库是lua的,nodemcu只是移植过来,不能乱改

不过https://github.com/nwf提供了lua的快速实现方法,利用unpack将table拆开送给string.char方法,不过这样的问题就是table里面只能存在数字,字符串是不可以的,也就是报文头部dsus和dsuc需要用ascii代替

mpu6050驱动在https://github.com/nodemcu/nodemcu-firmware/pull/2769不过同crc,他们更希望lua语言实现(这里在校准零点漂移需要注意喂狗,不然会重启)

float转化字符在https://github.com/nodemcu/nodemcu-firmware/pull/2773不过被指出可以用struct包实现(我没试,不过看文档好像可以)

启动的时候检查到lua文件则启动编译成.lc,按道理应该会快,不过我没感觉

尽量不要写死循环,用定时器代替,长时间循环注意喂狗

大量数据打印会浪费时间同时导致lua传输失败

目前还记得的就这些,想起来再补充 (最核心的就是lua太慢的时候就拿c来提速,逃:)

参考链接

https://github.com/hjmmc/WebGyroForCemuhook

https://nodemcu.readthedocs.io/en/master/

https://cemuhook.sshnuke.net/padudpserver.html

https://www.wireshark.org/

mpu6050 datasheet

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s