라디오를 통해 패킷을 보내는 것은 AMSend.send (AM_BROADCAST_ADDR, msg, len)를 사용하여 수행됩니다. receive.receive에서 어떤 노드에서 메시지를 받았는지 확인할 수 있습니다. 그러나 메시지를 수신 한 동일한 노드로 메시지를 다시 보내려면 어떻게해야합니까? 노드 ID를 가지고 있는데, 데이터를 수신 한 노드의 네트워크 주소를 얻고 다시 보낼 수 있습니다. 단지 패킷을 인정하는 것이 아닙니다. 일단 데이터를 받으면 데이터를 보내야합니다. 어떤 도움을 주시면 감사하겠습니다.tinyOS를 사용하여 센서 노드에서 양방향 통신을 수행하려면 어떻게해야합니까?
2
A
답변
1
AMSend.send
의 서명은 다음 addr
는 어드레스로서 기록되어
command error_t send(am_addr_t addr, message_t* msg, uint8_t len);
패킷을 전송하는 데있다. AM_BROADCAST_ADDR
은 브로드 캐스트 주소를 나타내는 상수입니다. 해당 주소로 전송 된 패킷은 무선 범위의 모든 노드에서 수신됩니다. 패킷을 받고 발신자 ID를 얻으면 (AMPacket.source
) addr
부터 AMSend.send
까지 제공하십시오. 기본적으로 정수 (8 또는 16 비트) 인 동일한 유형 am_addr_t
을가집니다.
id는 일반적으로 노드를 컴파일하거나 프로그래밍하는 동안 할당되며 (슬라이드 613, this presentation 참고) 대개 모든 노드는 명시 적으로 할당하지 않는 한 기본적으로 동일한 ID를가집니다.
이 스 니펫에서 잘못하면 나를 수정하십시오. 이게 당신이 의미 한거야? '사용 { 인터페이스 AMSend; 인터페이스 SplitControl as AMControl; 인터페이스 패킷; 인터페이스 AMPacket; }' 'Receive.receive (msg * * payload, uint8_t len) {' 'msg_t * data = (msg_t *) 페이로드; am_addr_t addr = call AMPacket.source (msg); send_message (addr); // 나머지 코드 } void send_message (addr) { // AMSend.send()를 사용하여 소스에 메시지 보내기 } –
그래, 좋아 보인다. – maral