현재 라우터에 이더넷 실드가 연결된 Arduino 보드가 있습니다. 내 컴퓨터가 Wi-Fi를 통해이 라우터에 연결됩니다. 내 보드와 컴퓨터는 UDP 메시지를 서로주고받습니다. 내 컴퓨터는 클라이언트이고 보드는 서버입니다. 그러나 나는 컴퓨터에서 더 긴 UDP 메시지를 보낸 다음 더 짧은 UDP 메시지를 보낼 때 Arduino가 더 짧은 메시지를 수락 한 다음 더 긴 메시지의 나머지 비트를 받았다는 것을 알아 차렸다.Arduino : UDP 전송시 추가 문자가 발생합니다.
예를 들면 : 내 컴퓨터에서 "Hello World"를 보내면 "Test"; Arduino는 두 번째 메시지를 "Test"로 읽지 않고 "Testo World"라고 읽습니다.
아마 Arduino 끝에서 문제라고 생각했습니다. Arduino는 메시지를 packetBuffer
이라는 배열에 일시적으로 저장합니다. 매번 새 메시지를 받기 전에이 버퍼를 지우려고했습니다. 버퍼가 지워지지 만 오류 메시지가 다시 나타납니다.
그래서 범인은 컴퓨터, 클라이언트라고 가정합니다. 컴퓨터에서 UDP 메시지를 보내는 처리 스케치가 있습니다. 아래 예제는 스케치 자체가 아닙니다. 그러나 그것은 내가 본래의 스케치로 묘사 한 것과 같은 정확한 증상을 제공하는 훨씬 간단한 예입니다.
import hypermedia.net.*;
UDP udp; // define the UDP object
void setup() {
udp = new UDP(this, 6000); // Create a new datagram connection on port 6000
//udp.log(true); // <-- printout the connection activity
udp.listen(true); // and wait for incoming message
}
void keyPressed() {
String IPaddress = "192.168.1.177"; // The remote IP address
int port = 8888; // The destination port
if (keyCode == UP)
{
udp.send("Test", IPaddress, port);
}
else
if (keyCode == DOWN)
{
udp.send("Hello World", IPaddress, port);
}
}
void receive(byte[] data) { // <-- default handler
//void receive(byte[] data, String IPaddress, int port) { // <-- extended handler
for(int i=0; i < data.length; i++)
print(char(data[i]));
println();
}
어떻게하면 올바른 메시지를 보내도록 스케치를 얻을 수 있습니까?
물론 더 많은 정보를 기꺼이 제공 할 의향이 있습니다.
Wireshark를 사용하여 메시지가 잘못 전송되고 있는지 확인합니다. 전송이 OK이면 수신 측에 있어야합니다. –
좋은 제안; 놀랍게도 저에게 wireshark는 메시지가 컴퓨터에서 전송되는 것이 잘못되지 않았 음을 보여줍니다. 아마도 내 문제는 Arduino입니다. 고마워! –
UDP 클래스의 코드를 표시 할 수 있습니까? –