打印Pi从串行连接获取的选定数据,然后打开名为d的文件

2024-10-03 06:29:22 发布

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

嗨,经过几个小时的研究,我来向人们寻求帮助,我有一个简单的脚本

import serial 
serialport = serial.Serial("/dev/ttyACM0",115200,timeout=1)

     while 1:
           print serialport.readline(),

serialport.close()

该脚本的功能是从Arduino获取数据并在Pi上显示。 我要做的是获取所有数据,只打印一个数据字符串。范例

在我的Arduino上,我有这套设备来打印我的RFID卡的UID

// Display some basic information about the card
    Serial.println("Found an ISO14443A card");
    Serial.print("  UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
    Serial.print("  UID Value: ");
    nfc.PrintHex(uid, uidLength);
    Serial.println("");

我在PI上得到的数据如下

Found an ISO14443A card
  UID Length: 4 bytes
  UID Value: 0x3A 0xDE 0x4D 0x02

我不想显示所有这些数据,我只想要UID值:所以我的最终结果是“UID值:0x3A 0xDE 0x4D 0x02”或其他任何卡的UID不是其他数据

下一步我需要帮助,因为我不知道这是采取UID值删除空格,因此它是一个单一的字符串删除其名称,并删除0x,使其看起来像“3ADE4D02”,并运行一个名为该字符串的sh文件,使其运行3ADE4D02.sh

TL:DR我想从串行连接获取UID并打开一个名为该UID的sh文件

有什么想法吗


Tags: 数据字符串脚本anuidshserialcard
1条回答
网友
1楼 · 发布于 2024-10-03 06:29:22

我假设您的串行读取工作正常,因此我将只处理第二部分

for line in serialport.readline():
  if "UID Value:" in line:
    filename = ''.join([word[2:] if word.startswith('0x') else '' for word in line.split()])+'.sh'

然后可以使用os.system(filedir+filename)运行sh文件,前提是您知道filedir是什么

编辑:确保在列表理解中使用line.split()而不是line,我意识到字符串遍历每个字母,而不是每个单词

相关问题 更多 >