如何用python读取标准输入USB操纵杆的输入

收藏(258个)
& 共13页&&nbsp&...&&&nbsp&&nbsp&&nbsp&&nbsp&&nbsp&&nbsp&&nbsp&&nbsp&&nbsp&micropython的USB通讯代码及遇到的问题 - allankliu的日志 -
电子工程世界-论坛
micropython的USB通讯代码及遇到的问题
已有 24 次阅读 16:47
|个人分类:
USB通讯代码
先贡献代码。由于PyBoard缺省通讯口是USB VCP/CDC,所以蛮实用的,不必再转接USB串口IC。但要避免与REPL争夺USB CDC通讯。
在与micropython反复“搏斗”后,总算把USB串口打印代码做成了:
# main.py -- put your code here!import pybimport select
def pass_through(usb, uart):& & usb.setinterrupt(-1)& & led = pyb.LED(1)& & i = 0& & while True:& && &&&usb.write(hex(i))& && &&&usb.write(chr(i))& && &&&usb.write('\t')& && &&&i = (i+1)%256& && &&&led.toggle()& && &&&pyb.delay(100)
pass_through(pyb.USB_VCP(), pyb.UART(1, 9600))复制代码
本例基于官网的pass_through例子修改的。可以以9600bps慢速向USB_VCP循环打印HEX和对应的ASCII字符。在TeraTerm中制表符也可以定位等等,所以以后如果移植curses包就可以构建一个VT100终端。
发现PyBoard不成熟的一面:写入用户代码后重启后,boot.py和main.py会经常性地丢失、重启。
写入main.py后,按下硬件复位按键后的现象:
boot.py中出现乱码;频繁性的重置main.py,即使main.py证实是可以运行的。
最离谱的事情就是boot.py内容被修改成乱码了。因为乱码之后micropython无法运行,估计内部文件系统出问题。可以直接把官网上的boot.py贴回去。boot.py实际就一句话:import pyb。
官方文档micropython.pdf中提到一个例子,UART/USB桥接。USB/UART可以互联互通。可以基于此例子更新到通用的代码。
修改了代码后,发现出现了其他网友出现的NameError。推测是缺乏import pyb而导致的错误,但NameError异常未能够在终端完整打印出来。这种现象我之前也发现过,micropython有“暂停”的现象,估计和内部的垃圾回收算法有关。或者直接堆栈或者堆出错了。
Ctrl+D可以软重启系统,正常的话可以直接运行用户代码,并可以截获部分系统抛出的用户带出错信息。但是经常性崩溃。
作者的其他最新日志
评论 ( 个评论)
Powered by如何用Wireshark捕获USB数据_百度知道
如何用Wireshark捕获USB数据
提问者采纳
py看到界面就是安装成功了,必须要的)robotframework-2。之前我也接触过selenium,请选择将Python加入Path)wxPython2;ride,如图OK,就用ie吧.7,即Start Selenium Server和Stop Selenium Server,没有详细说明每个步骤的操作。如果需要AutoIt支持就下载下面2个东东。输入参数.11.win32.8.0-py27。接下来在test case里添加一个步骤,不过感觉那个工具更贴近开发人员使用,第二个参数默认是firefox,有了robotFramework之后。首先新增一个project然后新增suite然后新增test case,他会在运行时帮助我们自动启动seleniumserver,添加后按F5检验是否添加成功,发现这个工具倒是可以满足我的要求;Scripts&#92最近刚刚接触到RobotFramework。AutoItLibrary-1,把selenium library加进来,主要是这些测试脚本都可以用文本格式保存(如txt&#47.1.exe(然后装robot的Framework)robotframework-ride-0:这篇文章的内容比较旧了.6,接着在suite层级add library.win32-py2.exe(robotFramework的IDE,这个框架可以说是基于keyword的操作,感觉这个工具相当强大。红色表示有一个必选参数要给定输入值,用来做web的自动化测试相当不错,不过我没装,添加后关键字变成蓝色表示找到关键字了,按F5可以看到所有加载的keyword.exe(wxPython,很不错)robotframework-seleniumlibrary-2,只是初步介绍.7,最新的安装指南请查看 更新篇python-2.msi(首先要有python,具体参数可以看F5里的keyword说明.exe==入门篇==安装完成了.1.8.1pywin32-216,open browser(一般用selenium做web测试都要用这个方法来打开浏览器).win32,而且是贴近测试人员的.38.win32.0,继续在suite的setting里设置suite启动和结束的keyword.exe(seleniumLibrary)安装成功后执行[PythonDir]&#92。之所以说强大,而且可以结合seleniumLibrary。以上只是一个简单的例子.8-win32-unicode-2,否则可能是拼写错误或者没有加载相应的html等)==安装篇==如果有想学的朋友可以自己下载以下文件安装(Google-code里可以找到大部分的安装文件)
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁pyMagic:用python控制的Geek入门神器 | 邪恶十六进制
& pyMagic:用python控制的Geek入门神器
原创作者:
大学四年快要结束了,这几年也学习了一点新的姿势。最近一直在跟国外的micropython项目,这个项目是由剑桥大学的理论物理学家(theoretical physicist)Damien George发起的,一个用python语言来控制硬件的项目。
0×01 缘起
大家都知道,如果要对一个MCU进行控制的话,一般方法是需要写基于c或者asm语言的代码,再经过专业的编译器编译后,再通过工具下载到芯片中,才能够完成整个开发过程,当然还免不了有多次调试。
这个过程肯定有很多g点,触之则痛。记得,我刚开始学51单片机的时候,安装到下载进去第一个程序花费了几天的时间,才点亮了第一个LED灯。但这还不算什么,还要学习51核的各种中断机制,还有串口,总线等各种各样的姿势,花费了不少的时间。
虽然这也对深入了解底层有很大的好处,但是,当我们只是简单的想用来做一个小测试或者小diy的时候,这种大精力的学习往往得不偿失。大家一定记得这样一句话,人生苦短,快用python。如果能够将python的轻量级与microcontroller的小型化结合在一起,那想必是及好的。
大学四年,我也一直在做这方面的努力,尝试写了一些代码库,但是还是没有脱离编译语言的窠臼。后期看到了micropython在Kickstarter上进行筹款,正好满足我这方面的想法,所以就一直在跟。由于micropython官方出品的硬件-pyBoard在价格较高,而且micropython遵照MIT协议的。所以我就自己做了一块板子,从原理图到PCB,再到最后代码移植成品,最后终于完成了,并且在接下来的一段时间会逐渐的开源。
Mircopython主板+FPC转接板
pyMagic为一块基于STM32F405RG微控制器运行Python语言解释器的硬件平台。与Arduino类似,但pyMagic更为强大。整体来说,pyMagic支持python3语法,具有完成的Python语法分析器,解释器,编译器,虚拟机和运行环境。完全可做到离线运行,并且能够模拟键盘和鼠标,完全可以替代teensy的工作,而且可以写python代码的那种哦。当然还有些更强大的功能,比如能够通过内置的socket进行tcp/ip数据的发送,等等,这些在后面的文章再进行介绍。
0×03 人生苦短快用python
比如说,我现在要点亮一个板子上面的一颗led灯珠,那么在pyMagic上面只要做这么几步:
第一步:插入U盘,不,插入pyMagic,然后电脑上面会弹出来一个名称为PYBFLASH的U盘,比就像这样:
空间有点小只有95KB,对你没有看错,不是95MB,只有95KB。这是因为现在使用的是STM32芯片内置的flash空间,所以就只有这么大了,但是这么小写入N个python脚本文件也是足够的了。而且,我会告诉你插入TF卡后,能够扩展到4个G的嘛。
第二步:打开U盘打开后里面有如下四个文件
其中boot.py为启动文件,指明一些启动的选项main.py文件是执行的主文件,当然也可以改成其他乱七八糟的名字pybcdc.inf是windows下的驱动信息文件README.txt就是readme了。
第三步:用记事本打开boot.py
# boot.py -- run on boot-up
# can run arbitrary Python, but best to keep it minimal
import machine
import pyb
#pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('CDC+MSC') # act as a serial and a storage device
#pyb.usb_mode('CDC+HID') # act as a serial device and a mouse
去掉#pyb.main(‘main.py’) 前的注释符号,并进行保存,也就是告诉板子,启动的时候运行boot.py后要运行main.py。
第四步:用记事本打开main.py写入如下三行代码并保存:
from pyb import LED
led = LED(1) # red led
第五步:按下复位按键bingo,灯亮了!
从拿到一块板子,到点亮一个led灯只需要五步,并且不需要安装任何的软件,进行任何的设置,或许这就是python的精髓,人生苦短快用python。
0×04 使用pyMagic的方式不只一种
在第二节里面提到了pyMagic内置python3的解释器,也就是能够随时解释,也就是说我们可以写一行代码就可以看到一行代码的效果咯。so cool~这种方法起始也很简单,就是将串口作为一个终端,用来进行数据的回显。是不是有种上世纪90年代geek的感觉。下面来演示下(ps:我直接在Ubuntu上面进行视频录制的演示了,操作方法和windows略有不同,不过原理类似),其中:picocom 为linux下的串口工具:
0×05 预告
pyMagic的功能不只是这么多,还可以读取管脚电压,播放歌曲,和其他设备连网等,当我们在碰到些硬件问题时,能够迅速解决提高效率。在接下来的文章中还会给大家带来使用pyMagic读取硬件flash,离线破解RFID卡,等简单的操作。希望能够和热爱硬件的geek一起交流学习。最后附上pyMagic的硬件特点:
STM32F405RG MCU.
168 MHz Cortex-M4 CPU with 32-bit hardware floating point.
1 MiB flash storage, 192 KiB RAM.
USB口, 支持 串口,通用存储,HID协议。
SD卡插槽。
4 LEDs, 1复位按钮, 1通用按钮.
3.3V0.3A板载 LDO , 可从USB口或者外置电池供电。
实时时钟。
30个通用IO口,其中28个支持5V输入输出。
2个 SPI接口, 2个 CAN接口, 2个I2C接口, 5个USART接口.
14个 12-bit ADC引脚。
2个DAC 引脚。
以及pyBoard的原理图:
* 作者:comover,本文属FreeBuf原创奖励计划文章,未经许可禁止转载。python调用摄像头摄像并保存图片 - 为程序员服务
为程序员服务
python调用摄像头摄像并保存图片
[Python]代码
#! /usr/bin/env python
#coding=utf-8
用过USB摄像头的都知道,你需要使用鼠标来操作它,比如截个图,录个像什么的,要点N次鼠标,对于我们那些不喜欢多次点击鼠标的人来说,这是一件很boring的事情,所以,本文将教你如何使用Python来操作摄像头。
这里,我们需要三个Python库: VideoCapture, PIL
和 pygame。使用这三个库你可以非常容易的编写一个摄像头程序。之所以使用pygame,其目的就是因为这个库可以处理视频帧(fps)。
这段代码中的一些要点的解释如下:
o第15行的那个函数是在视频上显示些信息。这个例子中,显示的是抓图的数量以及当前的亮度和对比度。这个函数先显示深灰色的文本,然后偏移几个像素,再显示浅灰色的,这样可以有阴影的效果。
o第26行是在调整亮度和对比度。30-33行是在设置数字键1-4用于调整亮度和对比度。
o34 和35行是在设置 ‘q’ 和 ‘w’ 来显示摄像头的对话框。在那里你可以调整分辨率和暴光度等等。
o36行及以下的代码,是在存一个抓图文件。文件名中使用了当前时间。.
from VideoCapture import Device
import ImageDraw, sys, pygame, time
from pygame.locals import *
from PIL import ImageEnhance
res = (640,480)
pygame.init()
cam = Device()
cam.setResolution(res[0],res[1])
screen = pygame.display.set_mode((640,480))
pygame.display.set_caption('Webcam')
pygame.font.init()
font = pygame.font.SysFont(&Courier&,11)
def disp(phrase,loc):
s = font.render(phrase, True, (200,200,200))
sh = font.render(phrase, True, (50,50,50))
screen.blit(sh, (loc[0]+1,loc[1]+1))
screen.blit(s, loc)
brightness = 1.0
contrast = 1.0
camshot = ImageEnhance.Brightness(cam.getImage()).enhance(brightness)
camshot = ImageEnhance.Contrast(camshot).enhance(contrast)
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
keyinput = pygame.key.get_pressed()
if keyinput[K_1]: brightness -= .1
if keyinput[K_2]: brightness += .1
if keyinput[K_3]: contrast -= .1
if keyinput[K_4]: contrast += .1
if keyinput[K_q]: cam.displayCapturePinProperties()
if keyinput[K_w]: cam.displayCaptureFilterProperties()
#以下的代码,是在存一个抓图文件。文件名中使用了当前时间
if keyinput[K_s]:
filename = str(time.time()) + &.jpg&
cam.saveSnapshot(filename, quality=80, timestamp=0)
shots += 1
camshot = pygame.image.frombuffer(camshot.tostring(), res, &RGB&)
screen.blit(camshot, (0,0))
disp(&S:& + str(shots), (10,4))
disp(&B:& + str(brightness), (10,16))
disp(&C:& + str(contrast), (10,28))
pygame.display.flip()
您可能的代码
相关聚客文章
荣誉:1290
相关专栏文章

我要回帖

更多关于 python读取输入参数 的文章

 

随机推荐