有一个在 Uart 上工作并接受这种形式的命令的设备:完整文档
有个现成的C++库很好用,发送命令的原理是:
#define BYTE unsigned char
#define WORD unsigned int
#define DWORD unsigned long
#define STX1 0x55 //Header1
#define STX2 0xAA //Header2
#define SB_OEM_PKT_SIZE 12
#define SB_OEM_CHK_SUM_SIZE 2
enum {CMD_OPEN = 0x01}
typedef struct {
BYTE Head1;
BYTE Head2;
WORD wDevId;
DWORD nParam;
WORD wCmd;// or nAck
WORD wChkSum;
} SB_OEM_PKT;
WORD CalcChkSumOfCmdAckPkt( SB_OEM_PKT* pPkt ){
WORD wChkSum = 0;
BYTE* pBuf = (BYTE*)pPkt;
int i;
for(i=0;i<(sizeof(SB_OEM_PKT)-SB_OEM_CHK_SUM_SIZE);i++){
wChkSum += pBuf[i];
}
return wChkSum;
}
void SendCmdOrAck(WORD wDevID, WORD wCmdOrAck, DWORD nParam) {
SB_OEM_PKT pkt;
int nSentBytes;
pkt.Head1 = (BYTE)STX1;
pkt.Head2 = (BYTE)STX2;
pkt.wDevId = wDevID;
pkt.wCmd = wCmdOrAck;
pkt.nParam = nParam;
pkt.wChkSum = CalcChkSumOfCmdAckPkt( &pkt );
nSentBytes = gtmSerial->write( (BYTE*)&pkt,SB_OEM_PKT_SIZE);
}
WORD gwDevID = 1;
int main(){
SendCmdOrAck(gwDevID, CMD_OPEN, 1);
return 0;
}
如何在Python中实现这种类型的发送?
试图通过结构打包:
ser.write(pack('<BBILII', 0x55,0xAA,0x0001,1,1,258))
但是模块返回错误(通过 uart 发回指示错误的响应)。你能告诉我如何在 python 中实现这个吗?
我将不胜感激任何帮助,甚至是猜测。
解决方案:
有什么问题:
I它的长度为 4,根据文档中的表格,它的长度应该为 2,我将其替换为Hint(str(cmd), 16)这是一个GTM-5110c31指纹扫描仪模块,也许有人需要一个程序来使用它: