WiFi模块编程中字符串匹配功能失效问题求助
问题分析与解决思路
直接说你代码里导致功能失效的几个核心问题,以及对应的修复方案:
1. 字节串转字符串的方式错误
你的testLine是字节串(b'...'),直接用str(testLine)转换后,会得到带b''包裹的字符串(比如"b'Name=TEST01010_0x56ce_0xd05\\r\\n'"),这种格式下,你要匹配的command根本不可能出现在其中。
修复:用decode()把字节串转成普通字符串:
currentLine = testLine.decode('utf-8') # 替换原来的str(testLine)
2. 默认检查值与测试数据不匹配
你调用sendCmd时用了默认参数check="AOK",但你的测试数据testLine里完全没有"AOK"内容,所以哪怕找到命令,也无法触发成功判断逻辑。
修复:测试时把check改成测试数据里存在的内容,比如:
sendCmd('TEST01010_0x56ce_0xd05\r', check="Name=")
实际场景中,要换成WiFi模块返回的成功标识(比如模块文档里的确认字符串)。
3. 字符串匹配的细节问题
你传入的command是'TEST01010_0x56ce_0xd05\r',解码后的currentLine是'Name=TEST01010_0x56ce_0xd05\r\n'——command结尾是\r,而currentLine对应位置是\r\n,严格匹配的话两者不重合。
修复:去掉command的换行符,或者用strip()处理后再匹配:
# 方法1:调用时去掉command的换行符 sendCmd('TEST01010_0x56ce_0xd05') # 方法2:在匹配逻辑里处理空白 if command.strip() in currentLine.strip():
4. 无效的冗余代码
return currentLine之后的break完全没用,因为return已经直接退出函数了,直接删掉这个break即可。
修正后的完整示例代码
def sendCmd(command, check="AOK", checkNum=3, lookCmd="yes"): retryCount = 1 cmdReceived = "no" while retryCount <= 5: checkLine = 1 foundCmd = "yes" if lookCmd != "yes" else "no" print(f'Command: {command}') print(f'Check: {check}') print(f'foundCmd: {foundCmd}') print(f'sending: {command}') while checkLine <= checkNum: # 修正字节串转字符串方式 currentLine = testLine.decode('utf-8') print(f'reply: {currentLine}') # 修正匹配逻辑,处理空白 if command.strip() in currentLine.strip(): foundCmd = "yes" print('##FOUND IT##') # 验证成功条件 if check in currentLine and foundCmd == "yes": print('# Command received #\n') cmdReceived = "yes" return currentLine checkLine += 1 if cmdReceived == "yes": break if retryCount < 5: print(f'\n# Retry {retryCount} #') checkNum += 1 retryCount += 1 else: print('\n*********************************************') print('## COMMAND FAILED: please check connection and restart ##') print('*********************************************') quit() testLine = b'Name=TEST01010_0x56ce_0xd05\r\n' # 修正调用参数 sendCmd('TEST01010_0x56ce_0xd05', check="Name=")
额外提示
实际场景中,你不能一直用固定的testLine,要替换成读取WiFi模块输出的代码(比如用serial库读取串口数据),否则这个函数只是在测试固定数据,无法和真实模块交互。
内容的提问来源于stack exchange,提问作者Possibly.Soup
相关产品推荐
相关产品推荐

