micro:bit Python发送无线电图像

2024-04-20 09:46:56 发布

您现在位置:Python中文网/ 问答频道 /正文

micro:bit无线电台使用Python

我想通过无线电发送图像采集(Image.HEART)的一名成员。我知道如何发送字符串和自定义图像,但不是图像集合的成员

我希望display.show(或者可能是要修改的中间变量)直接使用接收方的消息_字符串。我不想使用if/else或字典测试图像集合中每个可能成员的接收字符串

我在下面的代码中尝试过一些想法,但都失败了。我感谢你的帮助

# micro:bit radio: Send an image from Image collection
from microbit import *
import radio
radio.config(group=1)
radio.on()
while True:
    if button_a.is_pressed():
        radio.send(Image.HEART) # ?????
#        radio.send(index(Image.HEART)) # ?????
#        radio.send(str(Image.HEART)) # ?????
#        radio.send('Image.HEART') # ?????
#        radio.send('HEART') # ?????

    message_in = radio.receive()
    if message_in != None:
        display.show(message_in) #show heart
        # and other tries at syntax for argument

Tags: 字符串infrom图像imagesendmessageif
2条回答

马克所建议的方式运作良好,允许发送任何图像。我把它放在一个函数中,让我更容易进行实验

from microbit import *
import radio
radio.config(group=1)
radio.on()

def tx_value(image_to_send):
    return ''.join([x for x in str(image_to_send) if x in '0123456789:'])

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        radio.send(tx_value(Image('97531:97531:97531:97531:97531')))
    elif button_a.is_pressed():
        radio.send(tx_value(Image.DUCK))
    elif button_b.is_pressed():
        radio.send(tx_value(Image.HEART))
    sleep(.25)
    
    message_in = radio.receive()
    if message_in != None:
        display.show(Image(message_in))

另一种方法是使用图像字典,只需传输字典键:

from microbit import *
import radio
radio.config(group=1)
radio.on()

IMAGES = {'duck': Image.DUCK,
          'heart': Image.HEART,
          'fade': Image('97531:97531:97531:97531:97531')}

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        radio.send('fade')
    elif button_a.is_pressed():
        radio.send('duck')
    elif button_b.is_pressed():
        radio.send('heart')
    sleep(.25)
    
    message_in = radio.receive()
    if message_in != None:
        display.show(IMAGES[message_in])

这要求在两个micro:位上定义相同的字典

这感觉有点像“hacky”和脆弱,如果有更好的方法出现,我很乐意删除它,但有一种方法是这样的

如果运行此(link to docs):

repr(Image.HEART)

您将得到以下结果:

"Image('09090:99999:99999:09990:00900:')"

如果查看Image类(link to docs)的文档,您将看到可以从该字符串创建一个新的Image。因此,我目前的建议是:

# Get a string corresponding to Image.HEART
s = repr(Image.HEART)[7:-3]

... TRANSMIT ...

# Convert received string back into Image
I = Image(received)

我想这是从repr输出中提取数字和冒号的一种稍微不那么脆弱的方法,但它仍然很难看:

s = ""
for char in repr(Image.SAD):
    if char in '0123456789:': s += char

相关问题 更多 >