关于我昨天的问题(here),我试图用Bissont创建的fork实现这个python-ant repository。我试着利用他的力量演示塔克斯武士道智能教练机,因为这是同一个设备我使用。

我稍微修改了代码以适合我的Suunto ANT+接收器,并在控制台中运行它,代码就起作用了。现在,我尝试在TKinter环境中实现它,以显示从ANT+设备接收的实时数据,但最终出现以下错误代码,TKinter窗口不再打开:Traceback (most recent call last): File

"/usr/local/lib/python3.5/dist-packages/ant-0.1.1-py3.5.egg/ant/core/node.py",

line 212, in start

self.reset(wait) File "/usr/local/lib/python3.5/dist-packages/ant-0.1.1-py3.5.egg/ant/core/node.py",

line 197, in reset

evm.waitForMessage(message.StartupMessage) File "/usr/local/lib/python3.5/dist-packages/ant-0.1.1-py3.5.egg/ant/core/event.py",

line 163, in waitForMessage

return self.msg.waitFor(class_, timeout) File "/usr/local/lib/python3.5/dist-packages/ant-0.1.1-py3.5.egg/ant/core/event.py",

line 114, in waitFor

raise MessageTimeoutError("%s: timeout" % str(foo), internal=foo) ant.core.exceptions.MessageTimeoutError: : timeout

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File

"/home/pi/python-ant/demos/ant.core/ANT+ power.py", line 47, in

antnode.start() File "/usr/local/lib/python3.5/dist-packages/ant-0.1.1-py3.5.egg/ant/core/node.py",

line 217, in start

raise NodeError(err) ant.core.exceptions.NodeError: : timeout

所以(最终程序)应该做的是:接收并存储ANT数据

将数字四舍五入到2-3位小数(最大)

从文件中读取到目前为止的总功率输出

将电源数据写入文件(append)

总输出功率总和

显示当前速度、节奏、功率和总功率输出

以下是我目前为止的代码:# imports

import random

import time

from tkinter import *

from ant.core import driver

from ant.core.node import Node, Network, ChannelID

from ant.core.constants import NETWORK_KEY_ANT_PLUS, NETWORK_NUMBER_PUBLIC

from ant.plus.power import *

from config import *

# creating root tkinter Window

root = Tk()

root.title("TacX Bushido ANT+ Live Data")

# defining text variables

running = 0

SAVE_FILE = "power_doc.txt"

HEADLINE_TEXT = StringVar()

HEADLINE_TEXT.set('Headline')

HEADLINE_M= StringVar()

HEADLINE_M.set('M')

power_display = StringVar()

power_display.set('0')

cadence_display = StringVar()

cadence_display.set('0')

speed_display = StringVar()

speed_display.set('0')

powertotal_display = StringVar()

powertotal_display.set('0')

# defining ANT variables

device = driver.USB2Driver(log=LOG, debug=DEBUG, idProduct=0x1008)

antnode = Node(device)

antnode.start()

network = Network(key=NETWORK_KEY_ANT_PLUS, name='N:ANT+')

antnode.setNetworkKey(NETWORK_NUMBER_PUBLIC, network)

# defining Window Size

root.geometry("800x600")

# creating Label Frame to wrap labels

frame = LabelFrame(root)

frame.pack(padx=20, pady=20)

# creating labels, Headline 1

Mlabel = Label(root, font = ("Helvetica",48) ,textvariable = HEADLINE_M, justify=CENTER, bg="#FFFFFF", fg = '#000000')

Mlabel.pack(fill=BOTH, padx=20, pady=10)

# headline 2

headLine = Label(root, font=("Helvetica", 26), textvariable= HEADLINE_TEXT, justify=CENTER, bg="#FFFFFF", fg = '#000000')

headLine.pack(fill=BOTH, pady=5)

# power

l1 = Label(root, font = ("Helvetica",20) ,textvariable = power_display, justify=CENTER, bg="#190000", fg = '#B0C4C2')

l1.pack(fill=BOTH)

# cadence

l2 = Label(root, font = ("Helvetica",20), textvariable = cadence_display, justify=CENTER, bg="#190000", fg = '#B0C4C2')

l2.pack(fill=BOTH)

# speed

l3 = Label(root, font = ("Helvetica",20), textvariable = speed_display, justify=CENTER, bg="#190000", fg = '#B0C4C2')

l3.pack(fill=BOTH)

# total Power

l4 = Label(root, font = ("Helvetica",20), textvariable = powertotal_display, justify=CENTER, bg="#190000", fg = '#B0C4C2')

l4.pack(fill=BOTH)

# function to read total power values out of a file

def get_power_total(SAVE_FILE):

power_total = 0

with open(SAVE_FILE, 'r') as inp:

for line in inp:

try:

num = float(line)

power_total += num

except ValueError:

print('{} is not a number!'.format(line))

power_total = round_number(power_total)

return power_total

# rounds numbers to 2 decimals

def round_number(inputNumber):

inputNumber = round(inputNumber, 2)

return inputNumber

# use formula for a 28" Wheel to determine Speed using cadence

def determine_speed(cadence):

speed = float(cadence)*0.356

speed = round_number(speed)

return speed

# write in document to determine total power output

def write_file(SAVE_FILE, power):

f = open(SAVE_FILE, "a+")

f.write(str(power) + '\n')

f.close()

# updates label

def update_label(power, cadence):

power_total = get_power_total(SAVE_FILE)

speed = determine_speed(cadence)

power_total += power

write_file(SAVE_FILE, power)

power_display.set("Power: {} W".format(power))

cadence_display.set("Cadence: {}".format(cadence))

speed_display.set("Speed : {} Km/h".format(speed))

powertotal_display.set("Total Power Output: {} W".format(power_total))

root.after(1000, power_data)

root.update_idletasks()

# find device

def device_found(self, device_number, transmission_type):

print("Detect monitor device number: %d, transmission type: %d" % (device_number, transmission_type))

# determine power

def power_data(eventCount, pedalDiff, pedalPowerRatio, cadence, accumPower, instantPower):

update_label(instantPower, cadence)

power = BicyclePower(antnode, network, callbacks = {'onDevicePaired': device_found,

'onPowerData': power_data})

# Unpaired, search:

power.open()

monitor = None

while True:

try:

time.sleep(1)

except keyboardInterrupt:

break

power.close()

antnode.stop()

# mainloop to display the window

root.after(1000, power_data)

root.mainloop()

我已经知道whiletrue语句会阻止我的Tkinter窗口打开,直到找到一个设备为止,这是不合标准的,但我没有想出更好的办法让它保持原样。在

任何建议,帮助或任何其他高度赞赏。在

提前干杯!在

编辑(对于任何对同一主题感兴趣或陷入同一主题的人):

在进一步检查了图书馆之后,我想打开电源()创建回调的无限循环,这将导致根.mainloop()永远无法到达。我还没有找到一种方法来干预回调循环以获取数据,在主循环中显示数据并继续执行回调循环。

我会尽力提供更多的信息和一个可能的解决方案,一旦我找到它。

如果您对此有想法或不同的方法,请随时投稿:)

编辑2:

由于ANT+模块本身读取和写入数据,一种方法可能是在文件中写入数据,然后让另一个脚本从文件中读取数据。但是,我不知道这在python中是否可行(类似于readonly模式而不阻止来自其他源的访问)。在

编辑3:

解决问题:

将脚本分为两部分(单独的脚本)。

第一个脚本:

读取ANT+数据并将其写入如下文件:

^{pr2}$

第二个脚本:

只读数据和赋值,如下所示:def readFile():

file = open("ultimateFile.txt", "r")

VALUE = file.readline()

file.close()

return VALUE

我将在2019年更新代码/脚本,并将更新后的代码/脚本上传到github。在

python ant_python3.7.1ant+TKinter在Tkin中显示来自ANT+设备的实时数据相关推荐

  1. python listbox大小_Python3 tkinter基础 Listbox height 显示行数的上限

    Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda : 4.5.11 typesetting : Markdown ...

  2. linux系统用什么手柄,如何直接在Linux系统中处理来自角色设备/游戏手柄的输入?...

    我正在开发一个C程序,它使用 USB SNES controller输入基于RPM的分发.有没有人知道的库可以让它更容易与之交互,或者某些工具(joydev?)允许从设备中正确读取输入?我不需要整个游 ...

  3. python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫

    这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...

  4. 在SharePoint Foundation 2010中显示来自其他站点的列表

    SharePoint Foundation 锁定为只能显示同一个网站下的列表数据源,幸亏有SharePoint WebService,使得我们有办法解决该问题. 这里我们用到的WebService是 ...

  5. python树形结构显示_Python将字典转换成树状的层次结构,并在tkin中显示

    解决方案是创建一个带有一个额外列的treeview,然后添加一个向树中添加项的函数.如果它是一个子元素,则通过字典的所有元素递归.在 下面是一个使用python2.x的简单示例.我不知道它是否符合你对 ...

  6. python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...

    UDID 全名:Unique Device Identifie(设备唯一标识符) 说明:UDID,即设备唯一标识符,这是除序列号之外每台iOS设备的独一无二的号码.UDID只是和设备相关的,是用来区分 ...

  7. python 读取发票内容,在窗口中显示并保存到excel文件中

    编写两个文件ReadPdf.py和QTShow.py ReadPdf.py 1.采用正则表达式re定义提取的字段:(目前只读取这8个字段,开户行及账户在测试中出现问题) self.template_f ...

  8. html所有页面根的对象,在django中显示来自所有用户的对象,无需登录到html页面...

    我无法在主页上显示所有用户的歌曲.我想把它们像Youtube或其他音频流媒体网站一样直接显示在主页上,而不需要登录.我试了objects.all()什么也没发生.在 请告诉我在views.py上写什么 ...

  9. jsf mysql_在JSF数据表中显示来自MySQL数据库的图像[关闭]

    小编典典 您可以使用来显示存储在中的图像byte[],而不管其byte[]来源(数据库,磁盘文件系统,网络等)如何.最简单的例子是: 指的是StreamedContent财产. 但是,这有一个陷阱,尤 ...

  10. python定义方法self会被当作变量_为什么Python必须在方法定义和调用中显式使用“self”?...

    为什么Python必须在方法定义和调用中显示使用"self"? 这个想法借鉴了 Modula-3 语言.出于多种原因它被证明是非常有用的. 首先,更明显的显示出,使用的是方法或实例 ...

最新文章

  1. Code Sign error: Provisioning profile 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  2. R语言ggplot2可视化在图像边界内绘制geom_text文本标签实战
  3. python 中的 and / or
  4. jsp中String path = request.getContextPath()的作用
  5. ADO.NET高级应用
  6. AAAI 2020 Oral | 华科提出TANet:提升点云3D目标检测的稳健性
  7. pycharm、idea换一种思路---延长试用(无限使用30天)
  8. java中String字符串的替换函数:replace与replaceAll的区别
  9. 让计算机教育因云而变,阿里云正式发布云原生人才培养合作计划
  10. POJ 2503-Babelfish(map)
  11. 分治法 --- 大整数的乘法
  12. 新型智能优化算法——海鸥优化算法(基于Matlab代码实现)
  13. HDU-3987 Harry Potter and the Forbidden Forest(最大流)
  14. HTML基础之表单提交
  15. c语言中rewind函数_C语言中的rewind()函数与示例
  16. 计算机丢失wlanapi all,如何解决wlanapi.dll丢失的问题
  17. FP-Tree的Python实现
  18. SVN提示E200033: Another process is blocking the working copy database错误的解决方法
  19. 操作系统(Operation System,OS)
  20. 首份小程序广告投放价值榜单发布:游戏、工具类小程序占主导地位

热门文章

  1. JS动态呈现还可以输入字数
  2. 一个按照行来截取显示文章摘要的函数
  3. PHP去掉Bom标记
  4. 非Json字符串转map对象
  5. 书海拾贝|开发艺术探索之 android 的消息机制
  6. 年底换机潮来了,都有哪些手机受欢迎?
  7. 【USACO 2.4】Fractions to Decimals(分数转小数)
  8. Sublime text2 插件推荐
  9. 如何更改static控件的字体大小
  10. mysql数据库集群版_MySQL数据库集群实战