python开发stm32软件_ADB+Python+STM32 实现 微信跳一跳辅助

说明:

安卓手机开启USB调试模式,具体如何开启,百度自己手机即可

安装ADB工具

安装python2.7

步骤:

1、安装adb工具

下载地址:https://download.csdn.net/download/qq_29769263/10420731

下载后解压到便于记忆的地方即可,以解压到桌面为例:

如图,我们记住他的地址,

C:Users.GungnirDesktopplatform-tools-latest-windowsplatform-tools

下面我们验证一下是否能够正常工作。

将手机通过数据线连接电脑,按住Windows + R键,输入cmd,点击确定,进入命令行界面

输入cd加刚才我们记住的地址,进入我们解压后的地址,记得在cd和地址之间加一个空格。

下面我们输入

adb devices

如图,如果出现寻找到device,说明已经连接成功了,如果出现下图,

List of devices attached

说明我们连接没有成功,那就要查看你是否开启了usb调试或adb打开是否正确。

adb工具的命令不止这两个,下面举两个例子,也是我们一会即将用到的。

adb shell screencap -p /sdcard/screen.png

adb pull /sdcard/screen.png C:Users.GungnirDesktopscreen.png

第一个指令的意思是截图,此截图将会保存到sdcard目录下,名字为screen.png,第二条指令的意思是将sdcard目录下名称为screen.png的文件pull到C:Users.GungnirDesktop目录下,名称为screen.png,C:Users.GungnirDesktop这一个地址根据你们电脑实际位置而定。

当然,这样还是很麻烦,因为我们每次使用adb指令时,都需要cd到adb工具所在的目录,这在我们使用开发过程中都很不方便,下面介绍一下他的配置方法。

右击 我的电脑 -> 属性 ,选择系统设置

进入 高级 页面,选择 环境变量

在下方 系统变量 处选择 Path ,点击 编辑

点击 新建 后,在左侧列表中输入我们adb工具解压的目录

C:Users.GungnirDesktopplatform-tools-latest-windowsplatform-tools

然后一路 确定 即可。

此时,我们再次进入命令行界面后,即可直接输入adb命令,而无需cd到adb目录。当然,如果电脑是win10 的话,也可以通过Windows power shell执行adb命令。

2、python2.7安装

安装完adb工具后,我们下载python2.7及所需要的库

下载地址:python2.7下载地址

在下方的列表中,选择 Python 2.7.15 - 2018-05-01 下的 Download Windows x86-64 MSI installer 选项,下载完成后直接安装即可。

python本身提供了一个IDLE,可以直接在其界面下使用

当然,我们也可以在命令行界面下运行,不过,我们同样需要在 Path下添加python2.7的位置,如果选择默认安装的话,python2.7的默认目录为

C:Python27

可以直接将这个地址添加到 Path 目录下,这样,我们就可以直接在命令行界面 或者 Windows power shell下进入python的环境

除了安装python2.7外,我们还需要装一些我们在运行过程中所需要的一些库,如果python2.7选择在默认目录下安装的话,进入目录

C:Python27Scripts

然后我们再次打开命令行界面,cd进该文件夹后,输入 pip,如果出现该界面而不是找不到pip命令,就说明电脑上已经存在pip包管理工具了,如果不存在的话,就需要下载一个

然后依次在命令行界面输入下面命令,安装相应的库

pip install backports.functools-lru-cache==1.4

pip install cycler==0.10.0

pip install matplotlib==2.1.1

pip install numpy==1.13.3

pip install olefile==0.44

pip install opencv-python==3.4.0.12

pip install Pillow==4.3.0

pip install pyparsing==2.2.0

pip install python-dateutil==2.6.1

pip install pytz==2017.3

pip install six==1.11.0

pip install tensorflow==1.4.0

pip install pandas==0.22.0

pip install scipy==1.0.0

pip install scikit_learn==0.19.1

pip install pyserial

安装成功后就可以进入下面的步骤。

3、下载实验

下载地址:https://download.csdn.net/download/qq_29769263/10421958

下载解压后,打开 wechat_jump.py 文件,可以用python自带的IDLE运行,也可以用其他编译软件运行,在运行之前

ser = serial.Serial('com5',9600)

需要将 com5 更改为连接到电脑的串口号,同时将串口(CH340)与电脑连接好后方可运行。

同时,还需要注意

def send(distance):

distance = int(distance)

ser.write('[')

ser.write(str(distance))

ser.write(']')

这一段代码规定了我们向串口发送数据的格式,即以 字符 ‘ [ ’ 开头,以 字符 ’ ] ’ 结尾,我们在STM32编写代码时要根据这个确定我们串口接收后的程序。

如以下:

void USART1_IRQHandler(void)                    //串口1中断服务程序

{

u8 Res;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

{

Res =USART_ReceiveData(USART1); //读取接收到的数据

if(USART_RX_STA == 1)

{

Distance[rectim]  = Res - 48;    //发送的数据为char类型,需要 - 48

rectim ++;                      //用于记录位数

if(Res == 0x5D)       //如果接收到了 ‘ ] ’,接收完成

{

if(rectim == 2)  //接收到了两位,最后一位置 0xFF,用于后续检测位数

{

Distance[1] = 0xFF;

}

else

if(rectim == 1)   //如果接收到了个位数

{

Distance[1] = 0xFF;

Distance[2] = 0xFF;

}

USART_RX_STA = 0;     //接收完毕,清标志位

rectim = 0;

RecOK = 1;            //接收成功,置标志位

}

}

if(Res == 0x5B)      //如果接收到了 ‘ [ ’,置标志位,开始传输

USART_RX_STA = 1;

}

}

if(RecOK)

{

if(Distance[1]  == 0xFF)

Dist = Distance[0];

else if(Distance[2]  == 0xFF)

Dist = Distance[0] * 10 + Distance[1] ;

else

Dist = Distance[0] * 100 + Distance[1] * 10 + Distance[2];

RecOK = 0;

}

这只是一个例子,串口将数据存储到Distance数组,再将数组数据转为距离即可,具体编写可按实际情况来,通常情况下,传输数据为两点之间的距离,只需要再将一个舵机与STM32连接,即可通过STM32控制舵机按压屏幕时间来控制跳跃时间和距离。

当然,我们可以通过adb指令直接按压屏幕,这样就无需我们使用STM32通过舵机按压,

def jump(distance):

press_time = distance * 1.35

press_time = int(press_time)

cmd = 'adb shell input swipe 320 410 320 410 ' + str(press_time)

print(cmd)

os.system(cmd)

这一段代码即为通过adb指令实现按压屏幕,实验时,需要将

def on_click(event):

global update

global src_x, src_y

dst_x, dst_y = event.xdata, event.ydata

distance = (dst_x - src_x)**2 + (dst_y - src_y)**2

distance = (distance ** 0.5) / scale

print('distance = ', distance)

send(distance)

update = True

on_click 函数中的

send(distance)

更改为

jump(distance)

同时,为了获得更好的效果,可以更改按压时间与距离的比例系数

press_time = distance * 1.35

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不装mono,你的.NET程序照样可以在Linux上运行

让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过”mono your.exe“命令运行这个程序。 这种运行.net程序的办法有两个弱点,一个是需要客户机安装mono,二个是 ”mono xx.exe“ 这种命令行总让人感到有点…

JAVA面试常考系列一

转载自 JAVA面试常考系列一 题目一 什么是Java虚拟机?为什么Java被称为平台无关的编程语言? java虚拟机是一个可以执行字节码文件(.class)的虚拟机进程。 为什么java与平台无关呢?因为java源程序(.java&…

转:运维监控系统-监控项及指标的梳理

转自: 运维监控系统-监控项及指标的梳理_程序员杂谈-CSDN博客_运维监控指标综合监控功能工具 综合监控工具完成对被管对象的集中监控、集中维护和集中管理,被管对象包括网络设备、服务器、PC设备、数据库、中间件、存储、备份、安全设备、应用系统等。工…

圆心角 圆弧上点坐标_数控加工中心CNC的G02/G03圆弧指令的I、J、与R的区别

G02:顺(CW)圆弧插补G03:逆(CCW)圆弧插补根据所选择的X、Y平面,指令格式如下两种:G17 G02/G03 X_ Y_ I_ J_ F_;G17 G02/G03 X_ Y_ R_ F_;定义方式:依右手坐标系统&#xf…

AutoMapper 使用实践

一. 使用意图 常常在开发过程中,碰到一个实体上的属性值,要赋值给另外一个相类似实体属性时,且属性有很多的情况。一般不利用工具的话,就要实例化被赋值实体B,然后再将实体A的字段一个个赋值给B的属性,单…

kafka可靠数据传递

【README】 本文阐述了kafka可靠消息传递机制; 本文部分内容总结于《kafka权威指南》(一本好书,墙裂推荐),再加上自己的理解; 【1】可靠性保证 1,在讨论可靠性时,一般使用保证这个…

JAVA面试常考系列二

转载自 JAVA面试常考系列二 题目一 解释一下线程和进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上…

雨滴桌面时间插件_Win10美化向——如何搭配你的桌面

// 2020-02-11 //桌面这个东西大家肯定不陌生了,很多人的桌面都如下。_______滑动查看更多图片这多重水印是什么鬼?????还有很多网友呢,也美化了一下自己的桌面。不过呢严格来说,这应…

python画建筑_专题 | Python 绘图入门

我的施工之路Python 绘图入门这是施工系列第18篇,同时也进入到一个新的阶段:Python绘图篇。作为绘图模块的第一篇,与大家一起过过最基本的Python绘图原理。掌握基本的绘图原理很有必要,各个常用绘图库的原理基本都是相通的。所以了…

最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】

RC1是http://get.asp.net里面提供的https://docs.asp.net/en/latest/getting-started/index.html,使用旧的ASP.NET Core 1.0。这个版本会使用dnvm,dnu restore和dnx web等,而RC2则不需要,RC2只需要dotnet restore和dotnet run&…

kafka生产者开发方式

【README】 本文记录了 kafka生产者开发方式; 【1】生产者概览 【1.1】kafka发送消息过程 【1.2】创建kafka生产者 1)创建kafka生产者, 有3个必选属性: bootstrap.servers: kakfa集群节点地址;key.seri…

JAVA面试常考系列三

转载自 JAVA面试常考系列三 题目一 什么是迭代器(Iterator)? 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址。迭代器提供了一种方法,可…

linux wait函数头文件_手把手教Linux驱动9-等待队列waitq

在上一篇《手把手教Linux驱动8-Linux IO模型》我们已经了解了阻塞、非阻塞、同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞。应用场景:当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还…

HoloLens开发手记-配置开发环境 Install the tools

随着Build 2016开发者大会的结束,HoloLens开发包也正式开放下载。Hololens没有独立的SDK,开发特性被集成到最新的Visual Studio Update 2中。如果你没有HoloLens真机,那么可以安装HoloLens模拟器。 安装清单 注意: 这里为了方便大家顺利下载安…

kafka再均衡监听器测试

【README】 本文使用的kafka是最新的 kafka3.0.0;本文kafka集群有3个节点分别是 centos201, centos202, centos203 ; brokerid 分别为 1,2,3;本文主要用于测试 再均衡监听器;当有新消费者加入时,会发生分区…

java面试常考系列四

转载自 java面试常考系列四 题目一 大O符号(big-O notation)的作用是什么?有哪些使用方法? 大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好。大O符号也可用来描述其他的行为,比如&…

用python进行自然语言处理_Python自然语言处理示例:SVM和贝叶斯分类

❝关于自然语言处理(NLP)方面的文章、书籍非常之多,对于自然语言处理的上手,很多人是不知所措的。通过对本文的浏览,您应该能够对自然语言处理会有一个能够完整的有趣的基于Python的对自然语言处理的了解。❞什么是文本分类文本分类是将文本按…

Build 2016,你可能忽视的几个细节

微软公司主办的Build 2016大会尚在进程中,但是两场重量级的主题演讲已经结束。下面列举了我个人非常关注的几个细节,介绍一些背景知识以饲读者。 Bash on Windows背后的历史和未来 微软和IBM二十多年前联合开发NT内核的时候就已经为接驳多种操作系统留下…

JAVA面试常考系列五

转载自 JAVA面试常考系列五 题目一 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存…

kafka消费者开发方式小结

【README】 1, 本文总结了 kafka消费者开发方式;2, 本文使用的是最新的kafka版本 3.0.0;【1】 kafka消费则 【1.1】消费者与消费者组 1)消费者: 应用程序需要创建消费者对象,订阅主题并开始接…