센서 노드에 탑재된 여러 개의 센서를 제어하고 이를 통해 무선으로 패킷을 전송하는 방법을 살펴보자.
1. 센서의 갯수 만큼 타이머를 할당하여 타이머 이벤트에 따라 제어 및 전송하는 방식
- 센서로부터 센싱하는 시간이 대체적으로 길거나 신뢰성 있는 패킷 전송을 필요로 할 때 사용
- 전송시간이 길며 배터리 소모면에서 불리하다.
- 예시
event void Temperature.readDone(error_t result, uint16_t data){
//inject data to payload//
}
event void Humidity.readDone(error_t result, uint16_t data){
//inject data to payload//
}
event error_t AnalTemperature.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
}
event error_t Light.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
}
event error_t Microphone.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
}
event error_t Gyro.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
call Send.sendPacket(transmitPacketPtr);
}
event void Timer.fired(){
if(count % 6 == 1) call Temperature.read();
else if(count % 6 == 2) call Humidity.read();
else if(count % 6 == 3) call AnalTemperature.getData();
else if(count % 6 == 4) call Light.getData();
else if(count % 6 == 5) call Microphone.getData();
else call Gyro.getData();
count++;
}
2. 순차적으로 센서를 제어하는 방식으로 마지막으로 센싱된 후 패킷을 전송하는 방식
- 센싱이 빠르며 패킷 전송 또한 빠르다.
- 적절한 타이머를 사용하지 않으며 패킷 손실 및 전송 실패가 발생할 수도 있다.
- 예시
event void Temperature.readDone(error_t result, uint16_t data){
//inject data to payload//
call Humidity.getData();
}
event void Humidity.readDone(error_t result, uint16_t data){
//inject data to payload//
call AnalTemperature.getData();
}
event error_t AnalTemperature.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
call Light.getData();
}
event error_t Light.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
call Microphone.getData();
}
event error_t Microphone.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
call Gyro.getData();
}
event error_t Gyro.dataReady(uint16_t data, uint8_t status){
//inject data to payload//
call Send.sendPacket(transmitPacketPtr);
}