【发布时间】:2021-11-26 13:32:11
【问题描述】:
我必须通过串行方式将 jpeg 从 uart 发送到 esp8266,jpeg 在某些地方有 0 值,如果我按原样发送零,接收到的帧包含零之前的字符,所以我要做的是我发送一个“0”(0x30 ascii 代码)而不是一个零,
如你在merge的图片上看到的,右边是我收到的jpeg,左边是正常的jpeg,看看上面的第五个字节,你会看到区别!
我不能那样工作我真的很想发送 char[i]= 0 并接收它
我也给你我的发送代码:
for (i=0;i<244;i++){
if (Storage_ReadWrite_Buffer[i]!=0)
sprintf(Storage_ReadWrite_Buffer[i],"%c", Storage_ReadWrite_Buffer[i]);
else
Storage_ReadWrite_Buffer[i] = '0';
//sprintf(Storage_ReadWrite_Buffer[i],"%d", Storage_ReadWrite_Buffer[i]);
}
RS485_Send_CHAN_A("<",1);
RS485_Send_CHAN_A(Storage_ReadWrite_Buffer,244);
// RS485_Send_CHAN_A(">",1);
RS485_Send_CHAN_A("\0",1);
这是 esp 中获取数据的代码:
void loop() {
recvWithStartEndMarkers();
showNewData();
}
void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static int ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
//delay(5);
if (recvInProgress == true) {
if (rc != endMarker) {
receivedChars[ndx] = rc;
compteur++;
ndx++;
if (ndx >= numChars-1) {
ndx = 0;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
//Serial.println(ndx,DEC);
recvInProgress = false;
ndx = 0;
//publish_image();
newData = true;
}
}
else if (rc == startMarker) {
recvInProgress = true;
for(int comp;comp<6000;comp++){
receivedChars[comp] = 0;
}
}
}
}
void showNewData() {
if (newData == true) {
Serial.print("This just in ... ");
Serial.println(receivedChars);
//Serial.println(receivedChars[4],HEX);
newData = false;
publish_image();
}
}
【问题讨论】:
-
我无法跟随你。如果你发送一个 0,你会收到一个 0。你到底为什么要把它变成 0x30? “在零之前包含字符”是什么意思?
-
如果我发送 ttt0ppp 我不会收到 0,我把它放在 char tab[] ans 然后当我在 esp 中打印(tab)时我只看到“ttt”
-
我必须发送 ttt0x30ppp 才能接收 ttt0ppp
标签: arduino null serial-port esp8266 rs485