Hardware
Module | Frequency | TX power | Sensitivity | Channels | Distance |
---|---|---|---|---|---|
PRO | 2,405 – 2,465GHz | 63.1mW | -100dBm | 12 | 7000m |
사용된 주파수는 2.4GHz의 자유 대역이며 채널 당 대역폭이 5MHz 인 12 개의 채널을 사용합니다.
도표 : 2.4GHz 대역의 주파수 채널
참고 : 2014 년 2 월부터 Libelium은 Standard 또는 Normal 버전에서 더 이상 XBee 802.15.4 무선 모듈을 제공하지 않습니다. 그 날부터 XBee 802.15.4는 PRO 버전에서만 제공됩니다. 표준 버전은 출력 전력 레벨이 낮고 감도가 더 낮습니다. 반면 표준 버전은 더 많은 채널 (16)에서 방사 할 수 있습니다. 기본적으로 두 버전 모두 동일한 방식으로 작동하므로 이 안내서는 표준 버전 사용자에게 여전히 유용합니다.
Channel Number | Frequency | Supported by |
---|---|---|
0x0C – Channel 12 | 2,405 – 2,410 GHz | PRO |
0x0D – Channel 13 | 2,410 – 2,415 GHz | PRO |
0x0E – Channel 14 | 2,415 – 2,420 GHz | PRO |
0x0E – Channel 15 | 2,420 – 2,425 GHz | PRO |
0x0E – Channel 16 | 2,425 – 2,430 GHz | PRO |
0x0E – Channel 17 | 2,430 – 2,435 GHz | PRO |
0x0E – Channel 18 | 2,435 – 2,440 GHz | PRO |
0x0E – Channel 19 | 2,440 – 2,445 GHz | PRO |
0x0E – Channel 20 | 2,445 – 2,450 GHz | PRO |
0x0E – Channel 21 | 2,450 – 2,455 GHz | PRO |
0x0E – Channel 22 | 2,455 – 2,460 GHz | PRO |
0x0E – Channel 23 | 2,460 – 2,465 GHz | PRO |
도표 : 2.4GHz에 있는 XBee 단위에 의해 사용되는 채널
XBee 802.15.4 모듈은 물리적 레벨과 링크 레벨 (MAC 레이어)을 정의하는 표준 IEEE 802.15.4를 준수합니다. XBee 모듈은 다음과 같이 표준이 제공하는 기능에 특정 기능을 추가합니다.
- 노드 탐색 : 특정 정보가 패킷 헤더에 추가되어 동일한 네트워크의 다른 노드를 검색 할 수 있습니다. 이 기능을 사용하면 노드 발견 메시지를 전송할 수 있으므로 나머지 네트워크 노드가 자신의 데이터 (노드 식별자, @MAC, @ 16 비트, RSSI)를 나타내는 것으로 응답합니다.
- 중복 패킷 탐지 :이 기능은 표준에서 설정되지 않고 XBee 모듈에 의해 추가됩니다.
IEEE802.15.4 표준과 완전히 호환되는 프레임을 얻고 다른 칩셋과의 상호 운용성을 가능하게하기 위해 xbee802.setMacMode (m) 명령은 모듈이 완전히 호환 가능한 표제 형식을 사용하는지 언제든지 선택하도록 작성되었습니다 또는 반대로 노드 발견 및 중복 패킷 감지에 대해 추가 옵션을 사용할 수 있습니다.
암호화는 AES 128b 알고리즘을 통해 제공됩니다. 특히 AES-CTR 유형을 통해 이 경우 프레임 카운터 필드는 고유 한 ID를 가지며 802.15.4 프레임의 위치 인 페이로드 필드에 포함 된 모든 정보를 암호화합니다
여기서 전송할 데이터가 저장됩니다.
모듈 프로그래밍을 위해 라이브러리가 개발 된 방식으로 다음과 같은 간단한 암호화 활성화가 가능합니다.
초기화 함수를 실행하고 암호화 프로세스에서 사용할 키를 제공합니다.
{
xbee802.setEncryptionMode(1);
xbee802.setLinkKey(key);
}
802.15.4 및 ZigBee 센서 네트워크의 암호화 시스템에 대한 추가 정보는 Libelium 웹 사이트의 개발 섹션, 특히 문서 "보안 : 802.15.4 및 ZigBee 네트워크"에서 액세스 할 수 있습니다.
이러한 유형의 네트워크의 고전적인 레이아웃은 노드가 MAC 또는 네트워크 주소와 같은 매개 변수를 사용하여 형제 노드와 지점 간 연결을 설정하기 때문에 스타 토폴로지입니다.
사진: 스타 토폴로지
에너지 섹션과 관련하여, 송신 전력은 여러 값으로 조정될 수 있습니다 :
Parameter | Tx XBee-PRO |
---|---|
0 | 10dBm |
1 | 12dBm |
2 | 14dBm |
3 | 16dBm |
4 | 18dBm |
도표: 전송 전력 값
그래프: XBee- PRO TX Power
General Considerations
Waspmote Libraries
Waspmote XBee Files
WaspXBeeCore.h, WaspXBeeCore.cpp, WaspXBee802.h, WaspXBee802.cpp
이 모듈을 사용할 때는 XBee802 라이브러리를 포함시켜야합니다. 처음에 다음 줄을 소개해야 합니다.
코드 :
#include <WaspXBee802.h>
Constructor
Waspmote XBee 라이브러리를 사용하려면 'WaspXBee802'클래스의 개체를 만들어야합니다. xbee802라는이 오브젝트는 Waspmote XBee 라이브러리 내에 생성되며 모든 라이브러리에 공개됩니다. 가이드를 통해 Waspmote가 어떻게 나타나는지 보여줍니다.
XBee 라이브러리가 작동합니다. 이 생성자를 만들 때 일부 변수는 기본적으로 값으로 정의됩니다.
API Functions
이 가이드를 통해 매개 변수를 사용하는 많은 예제가 있습니다. 이 예제에서 API 함수는 명령을 실행하기 위해 호출되며 관련 변수에 각 경우에 매개 변수 값을 저장합니다.
사용 예 :
{
xbee802.getOwnMacLow(); // Get 32 lower bits of MAC Address
xbee802.getOwnMacHigh(); // Get 32 upper bits of MAC Address
}
관련 변수
xbee802.sourceMacHigh [0-3] → MAC 주소의 상위 32 비트 저장
xbee802.sourceMacLow [0-3] → MAC 주소의 하위 32 비트 저장
'xbee802.getOwnMacLow'에서 돌아 오면 관련 변수 'xbee802.sourceMacLow'가 적절한 것으로 채워질 것입니다
값. 함수를 호출하기 전에 관련 변수가 만들어 지지만 비어 있거나 기본값이 있습니다.
함수가 실행될 때 채워지는 세 가지 오류 플래그가 있습니다.
- error_AT : AT 명령 기능 실행 중 오류가 발생했는지 여부를 저장합니다.
- error_RX : 패킷 수신 중 에러가 발생 하였는지를 저장한다.
- error_TX : 패킷 전송 중에 오류가 발생했는지 여부를 저장합니다.
모든 함수는 호출 된 함수가 성공했는지 여부를 알기위한 플래그도 반환합니다. 이 플래그에 사용할 수있는 값 :
- 0: 성공. 함수가 오류없이 실행되었고 노출 된 변수가 채워졌습니다.
- 1: 오류. 함수가 실행되었지만 실행 중 오류가 발생했습니다.
- 2: 실행되지 않습니다. 함수를 실행하기 전에 오류가 발생했습니다.
- -1: 이 모듈에서는 기능을 사용할 수 없습니다.
전원을 껐다 켠 후에 매개 변수 변경 사항을 저장하려면 writeValues () 함수를 실행해야합니다.
사용 예 :
{
xbee802.writeValues(); // Keep values after power down
}
API 확장
모든 XBee 명령을 보낼 수 있지만 관련되고 유용한 모든 기능이 Waspmote API에 포함되었습니다.
직접 송수신기에 연결하십시오.
사용 예 :
{
xbee802.sendCommandAT(“CH#”); // Executes command ATCH
}
관련 변수 :
xbee802.commandAT [0-100] → 모듈에 의해 주어진 응답을 최대 100 바이트까지 저장합니다.
Waspmote reboot
Waspmote가 재부팅되면 응용 프로그램 코드가 다시 시작되어 처음부터 모든 변수와 객체가 만들어집니다.
Constants pre-defined
'WaspXBeeCore.h'라는 파일에 미리 정의 된 상수가 있습니다. 이 상수는
최대 데이터 크기. 가장 중요한 상수는 다음에 설명됩니다.
- MAX_DATA : (기본값은 300) 패킷에 사용할 수있는 최대 데이터 크기를 정의합니다. 이 상수는 같거나 같아야합니다. 각 패킷에서 데이터가 전송되는 것보다 큽니다. 이 크기는 1500보다 커야합니다.
- MAX_PARSE : (기본값은 300) treatData ()에 대한 각 호출에서 파싱되는 최대 데이터를 정의합니다. 더 많은 데이터가 수신되면 treatData ()에 대한 다음 호출이있을 때까지 UART 버퍼에 저장됩니다. 그러나 UART 버퍼가 가득 차면 다음 데이터가 버퍼에 기록되므로 이 점에 주의하십시오.
- MAX_BROTHERS : (기본값은 5) 저장 될 수있는 형제의 최대 수를 정의합니다.
초기화
모듈을 사용하기 전에 초기화해야합니다. 모듈을 사용하기 전에 초기화해야합니다. 이 과정에서 모듈과 통신 할 UART가 열리고 XBee 스위치가 켜져 있어야합니다.
Setting ON
초기화 된 변수는 다음과 같습니다.
- protocol : 사용되는 프로토콜을 지정합니다 (이 경우 802.15.4).
- pos : 수신 된 패킷에서 사용할 위치를 지정합니다.
- discoveryOptions : 노드 검색의 옵션을 지정합니다.
- awakeTime : 잠자기 전에 깨어있는 시간을 지정합니다.
- sleepTime : 잠자기 시간을 지정합니다.
- scanChannels : 검사 할 채널을 지정합니다.
- scanTime : 각 채널을 검색 할 시간을 지정합니다.
- encryptMode : 암호화 모드가 활성화되어 있는지 여부를 지정합니다.
- powerLevel : 전원 전송 수준을 지정합니다.
- timeRSSI : RSSI LED가 켜지는 시간을 지정합니다.
- sleepOptions : 잠자기 옵션을 지정합니다.
- retries : 802.15.4 프로토콜에 정의 된 세 번 재시도 외에도 재시도 횟수를 지정합니다.
- delaySlots : CSMA / CA의 백 오프 지수의 최소값을 지정합니다.
- macMode : 사용 된 Mac 모드를 지정합니다.
- energyThreshold : 채널이 사용 가능한지 여부를 결정하는 데 사용되는 에너지 임계 값을 지정합니다.
- counterCCA : 채널에서 너무 많은 에너지가 발견 된 횟수를 지정합니다.
- counterACK : ACK가 손실 된 횟수를 지정합니다.
사용 예
{
xbee802.ON ();
}
확장 라디오 보드 (XBee 802.15.4)
확장 보드를 사용하면 Waspmote 센서 플랫폼에서 두 개의 통신 모듈을 동시에 연결할 수 있습니다. 이는 Waspmote에 사용할 수있는 무선 라디오를 사용하여 여러 가지 조합이 가능하다는 것을 의미합니다. 802.15.4, ZigBee, DigiMesh, 868MHz, 900MHz, LoRaWAN, LoRa, Sigfox, Bluetooth Pro, Bluetooth Low Energy, RFID / NFC, WiFi, GPRS Pro, GPRS + GPS 및 3G / GPRS. 또한, RS-485 / Modbus, RS-232 직렬 / Modbus 및 CAN 버스와 같은 산업용 프로토콜 모듈을 사용할 수 있습니다. 가능한 조합은 다음과 같습니다.
- LoRaWAN - GPRS
- 802.15.4 - Sigfox
- 868 MHz - RS-485
- RS-232 - WiFi
- DigiMesh - 3G/GPRS
- RS-232 - RFID/NFC
- WiFi - 3G/GPRS
- CAN bus - Bluetooth
- 등등
참고 : GPRS Pro, GPRS + GPS 및 3G / GPRS 모듈에서는 확장 보드를 Waspmote에 연결할 필요가 없습니다. 소켓 1에 직접 꽂을 수 있습니다.
다음 사진에서 할당 된 UART와 함께 사용할 수있는 소켓을 볼 수 있습니다. 한편, SOCKET0은 UART0을 통해 모든 종류의 무선 모듈을 연결합니다. 반면, SOCKET1은 UART1을 통해 무선 모듈을 연결할 수 있습니다.
API는 XBee 모듈을 켜기 위해 'ON'이라는 함수를 제공합니다. 이 함수는 SOCKET을 선택할 수있는 매개 변수를 지원합니다. SOCKET0과 SOCKET1 중에서 선택할 수 있습니다.
SOCKET0 선택 (둘 다 유효 함) :
xbee802.ON ();
xbee802.ON (SOCKET0);
SOCKET1 선택 :
xbee802.ON (SOCKET1);
두 개의 XBee-802.15.4 모듈이 필요하다면 (각각의 소켓에 하나씩), WaspXBee802 클래스로부터 새로운 객체를 만들어야합니다. 기본적으로 'xbee802'라는 객체가 이미 일반 SOCKET0에 사용됩니다.
새로운 객체를 만들려면 다음 선언을 Waspmote 코드에 넣어야합니다.
WaspXBee802 xbee802_2 = WaspXBee802 ();
마지막으로 두 모듈을 모두 초기화해야합니다. 예를 들어 xbee802는 다음과 같이 SOCKET1의 SOCKET0 및 xbee802_2에서 초기화됩니다.
xbee802.ON (SOCKET0);
xbee802_2.ON (SOCKET1);
나머지 함수는 이전 API 버전과 동일한 방식으로 사용됩니다. 그들을 이해하기 위해이 가이드를 읽는 것이 좋습니다.
경고:
- 확장 보드로 작업 할 때는 DIGITAL7 핀을 사용하지 마십시오. 이 핀은 XBee를 절전 모드로 설정하는 데 사용됩니다.
- 확장 보드로 작업 할 때는 DIGITAL6 핀을 사용하지 마십시오. 이 핀은 확장 보드의 전원 공급 장치로 사용됩니다.
- 센서 보드와의 비 호환성 :
- 가스 보드 : SOCKET4 및 NO2 / O3 센서와 호환되지 않습니다.
- 농업위원회 : Sensirion 및 대기압 센서와 호환되지 않습니다.
- 스마트 미터링 보드 : SOCKET11 및 SOCKET13과 호환되지 않습니다.
- 스마트 시티 보드 : 마이크 및 인터럽트 시프트 레지스터의 CLK와 호환되지 않습니다.
- 이벤트 보드 : 인터럽트 시프트 레지스터와 호환되지 않습니다.
Setting OFF
The OFF() function closes the UART and switches the XBee OFF.
Example of use:
{
xbee802.OFF();
}
Node Parameters
노드를 구성 할 때 네트워크에서 최근에 사용될 일부 매개 변수를 설정하고 API 기능을 사용하는 데 필요한 일부 매개 변수를 설정해야합니다.
MAC Address
64 비트 RF 모듈의 고유 한 IEEE 주소. 32 비트 (고 / 저)의 두 그룹으로 나뉩니다.
수정이 불가능한 네트워크 내에서 노드를 고유하게 식별하며 제조업체가 제공합니다. 64 비트 유니 캐스트 전송에 사용됩니다.
사용 예
{
xbee802.getOwnMacLow (); // MAC 주소의 하위 32 비트 가져 오기
xbee802.getOwnMacHigh (); // MAC 주소의 상위 32 비트 가져 오기
}
관련 변수
xbee802.sourceMacHigh [0-3] → MAC 주소의 상위 32 비트 저장
xbee802.sourceMacLow [0-3] → MAC 주소의 하위 32 비트 저장
게다가 XBee 모듈은 MAC 주소가 표시된 하단에 스틱을 제공합니다. MAC 주소는 0013A200xxxxxxxx로 지정됩니다.
Network Address
16 비트 네트워크 주소. 네트워크 내의 노드를 식별하며, 실행 중 수정될 수 있습니다. 이것은 16 비트 유니 캐스트 전송으로 노드에 데이터를 전송하는 데 사용됩니다.
사용 예 :
{
xbee802.setOwnNetAddress (0x12,0x34);
xbee802.getOwnNetAddress ();
}
관련 변수 :
xbee802.sourceNA [0-1] → 16 비트 네트워크 주소 저장
PAN[1] ID
네트워크를 식별하는 16 비트 숫자. 네트워크를 차별화하려면 고유해야 합니다. 동일한 네트워크의 모든 노드는 동일한 PAN ID를 가져야 합니다.
사용 예 :
{
uint8_t panid [2] = {0x33,0x31};
xbee802.setPAN (panid);
xbee802.getPAN ();
}
관련 변수 :
xbee802.PAN_ID [0-1] → PAN ID 저장
• XBee 구성 예제 :
http://www.libelium.com/development/waspmote/examples/802-01-configure-xbee-parameters
관련 변수 :
xbee802.PAN_ID [0-7] → 16 비트 PAN ID를 저장합니다. 두 개의 첫 번째 위치에 저장됩니다.
Node Identifier
네트워크의 노드를 식별하는 최대 20 자의 ASCII 문자열입니다. 응용 프로그램 수준에서 노드를 식별하는 데 사용됩니다. 또한 NI를 사용하여 노드를 검색하는데도 사용됩니다.
사용 예 :
{
xbee802.setNodeIdentifier ( "node01");
xbee802.getNodeIdentifier ();
}
관련 변수 :
xbee802.nodeID [0-19] → 20 바이트 최대 문자열 노드 식별자 저장
Channel
이 매개 변수는 모듈이 전송 및 수신하는 데 사용하는 주파수 채널을 정의합니다.
802.15.4는 사용할 12 개의 채널을 정의합니다.
• 2.405-2.465GHz : 12 채널이 모듈은 채널 당 5MHz 대역폭을 가진 12 채널을 갖는 2.4GHz 대역에서 작동합니다.
이 모듈은 채널 당 5MHz 대역폭을 가진 12 채널을 갖는 2.4GHz 대역에서 작동합니다.
사용 예 :
{
xbee802.setChannel (0x0D);
xbee802.getChannel ();
}
관련 변수 :
xbee802.channel → 운영 채널 저장
Power Gain and Sensibility
노드와 네트워크를 구성 할 때 중요한 매개 변수 중 하나는 전력 이득 및 감성과 관련됩니다.
Power Level
RF 모듈이 전도 된 전력을 전송하는 전력 레벨 (dBm). 가능한 값은 다음과 같습니다.
Parameter | XBee-PRO | XBee-PRO International |
---|---|---|
0 | 10dBm | -3dBm |
1 | 12dBm | -3dBm |
2 | 14dBm | 2dBm |
3 | 16dBm | 8dBm |
4 | 18dBm | 10dBm |
참고 : dBm은 1mW 신호를 기준으로 전력 레벨을 측정하는 표준 장치입니다.
dBm으로 표시된 값은 다음 수식을 사용하여 쉽게 mW로 변환 할 수 있습니다.
802.15.4 실습 온도값 받아오기
로드맵
Waspmote IDE (센서키트+Waspmote 본체: 온도 측정) -----(802.15.4 통신)-----> X-CTU(USB - 값 받기)
X-CTU셋팅
X-CTU를 설치한 폴더로 이동합니다.
./launcher
다음과 같은 창이 뜨게 되면, 좌측 상단의 + 버튼을 클릭
연결된 두개의 USB 포트 중 Rx 부분을 연결합니다.
연결이 완료되면, 다음과 같이 생성된 것을 확인할 수 있습니다. 생성된 부분의 우측 두번째 버튼(Discovery radio nodes in the same network)을 클릭합니다.
연결된 센서 모듈이 있다면, 아래와 같이 찾을 수 있게됩니다. 'Add selected devices'를 클릭하면,
연결이 된 것을 확인할 수 있습니다.
이제 우측 상단의 모니터 텝을 눌러, 출력값을 확인합니다.
Open 버튼을 누르면, 연결을 시도하는 코드들이 찍히는 것을 확인할 수 있습니다.
IDE 셋팅
전체코드
#include <WaspXBee802.h>
#include <WaspFrame.h>
// Destination MAC address
//////////////////////////////////////////
char RX_ADDRESS[] = "0013A20040D532BD";
//////////////////////////////////////////
// define variable
uint8_t error;
float temperature = 0.0;
int light = 0;
void setup()
{
// Open the USB connection
USB.ON();
USB.println(F("USB port started..."));
// set Waspmote identifier
frame.setID("node_TX");
// init XBee
xbee802.ON();
}
void loop()
{
// read temperature sensor connected to ANALOG6 pin
temperature = Utils.readTemperature();
USB.print(F("Value of temperature: "));
USB.print(temperature);
USB.println(F(" Celsius degrees"));
USB.println(F("------------------------------------------------------"));
delay(1000);
frame.createFrame(ASCII);
frame.addSensor(SENSOR_STR, "Complete example message");
frame.addSensor(SENSOR_BAT, PWR.getBatteryLevel() );
frame.addSensor(SENSOR_IN_TEMP, temperature);
// frame.addSensor(SENSOR_TC, (float *) temperature);
frame.addSensor(SENSOR_DATE, "2017-11-15");
frame.showFrame();
error = xbee802.send( RX_ADDRESS, frame.buffer, frame.length );
USB.println(F("\n2. Send a packet to the RX node: "));
// check TX flag
if( error == 0 )
{
USB.println(F("send ok"));
// blink green LED
Utils.blinkGreenLED();
}
else
{
USB.println(F("send error"));
// blink red LED
Utils.blinkRedLED();
}
}
헤더부분
802.15.4 통신을 위해, WaspXBee802.h와 값을 넘겨주는 Frame의 형태를 선언합니다.
#include <WaspXBee802.h>
#include <WaspFrame.h>
보낼 MAC Address를 RX[2] 변수로 선언해줍니다.
// Destination MAC address
//////////////////////////////////////////
char RX_ADDRESS[] = "0013A20040D532BD";
//////////////////////////////////////////
setup()함수
아두이노에 쓰이는 setup(), loop() 이 두 함수는 아두이노가 작업의 시작과 반복 부분을 인식하기 위해 만든 특별한 함수 이름입니다.
즉, 아두이노에 전원을 넣으면 setup 블록에 사람을 먼저 투입해서 계획대로 1회 실행합니다. setup()이 끝이 나면 이제 loop 블록에 사람을 이동해서 무한반복 시키게 됩니다.
따라서 setup 함수에는 각종 초기화 관련된 작업들을 추가하고, loop 함수에는 반복되면서 수행해야 할 메인 작업들을 적어두는 것이 일반적입니다.
void setup()
{
// Open the USB connection
USB.ON();
USB.println(F("USB port started..."));
// set Waspmote identifier
frame.setID("node_TX");
// init XBee
xbee802.ON();
}
frame[3].setID("node_TX");
setID () 함수를 사용하면 사용자가 Waspmote ID를 EEPROM 메모리에 저장할 수 있습니다. Waspmote ID는 createFrame () 함수를 호출 할 때 프레임 헤더의 해당 필드를 설정하는 데 사용됩니다.
Waspmote frame은 특정 형식의 센서 데이터 프레임을 생성하기 위해 설계되었습니다. 이 데이터 프로토콜은 Meshlium (Meshlium은이 데이터 프레임을 해독 할 수 있음)에서 지원되므로 Meshlium으로 데이터를 전송하는 데 사용되는 형식입니다.
xbee802.ON();
ON () 함수는 모든 전역 변수를 초기화하고 해당 UART[4]를 열고 XBee를 ON으로 전환합니다. UART를 여는 데 사용되는 baud rate는 라이브러리에서 정의됩니다(기본적으로 115200bps).
loop()함수
void loop()
{
// read temperature sensor connected to ANALOG6 pin
temperature = Utils.readTemperature();
USB.print(F("Value of temperature: "));
USB.print(temperature);
USB.println(F(" Celsius degrees"));
USB.println(F("------------------------------------------------------"));
delay(1000);
frame.createFrame(ASCII);
frame.addSensor(SENSOR_STR, "Complete example message");
frame.addSensor(SENSOR_BAT, PWR.getBatteryLevel() );
frame.addSensor(SENSOR_IN_TEMP, temperature);
frame.addSensor(SENSOR_DATE, "2017-11-15");
frame.showFrame();
error = xbee802.send( RX_ADDRESS, frame.buffer, frame.length );
USB.println(F("\n2. Send a packet to the RX node: "));
// check TX flag
if( error == 0 )
{
USB.println(F("send ok"));
// blink green LED
Utils.blinkGreenLED();
}
else
{
USB.println(F("send error"));
// blink red LED
Utils.blinkRedLED();
}
}
temperature = Utils.readTemperature();
온도센서를 이용해 온도를 가져오는 부분입니다.
frame
WaspFrame 클래스를 ASCII 형태로 보내는 프레임을 생성하고, SENSOR값을 추가하여 보내는 코드입니다.
frame.createFrame(ASCII);
ASCII 프레임을 만듭니다. Waspmote ID는 setID() 함수가 이전에 설정 한 EEPROM 메모리에서 가져옵니다.
addSensor() 함수를 사용하면 사용자가 프레임에 새 센서 필드를 추가 할 수 있습니다.
첫 번째 매개 변수는 추가 할 센서를 식별하는 센서 태그입니다("센서 필드"섹션에 설명되어 있음).
센서 식별자는 다양한 유형 (int, float, strings 등)으로 표시 될 수있는 센서 값이 따라옵니다.
이 기능은 여러 가지 가능성을 허용하기 위해 몇 가지 프로토 타입으로 정의됩니다.
이 함수는 프레임의 현재 길이를 반환합니다. 이 함수를 호출 할 때마다 새 필드에 충분한 공간이 있으면 새 필드가 추가됩니다.
이 함수가 최대 프레임 버퍼 크기를 초과하는 센서 필드를 삽입하려고하면 센서 필드가 추가되지 않고 함수는 -1을 반환합니다.
SENSOR 값의 포맷은 여러 개가 있지만, 현재 사용된 센서값은 아래와 같습니다.
Sensor | Sensor Reference | Sensor TAG | SENSOR ID | Number Of Fields | Binary | ASCII | Unit | ||
Binary | ASCII | Type of variable | Size per Field(Bytes) | Default Decimal Precision | |||||
String | N/A | SENSOR_STR | 65 | STR | 1 | string | variable | N/A | N/A |
Battery level | N/A | SENSOR_BAT | 52 | BAT | 1 | uint8_t | 1 | 0 | % |
Internal_temperature | N/A | SENSOR_IN_TEMP | 62 | IN_TEMP | 1 | float | 4 | 2 | ºC |
Date | N/A | SENSOR_DATE | 58 | DATE | 3 | uint8_t | 1 | N/A | N/A |
frame.addSensor(SENSOR_STR, "Complete example message");
frame.addSensor(SENSOR_BAT, PWR.getBatteryLevel() );
frame.addSensor(SENSOR_IN_TEMP, temperature);
frame.addSensor(SENSOR_DATE, "2017-11-15");
frame.showFrame():
시리얼 모니터에 프레임 구조를 출력합니다.
//===============================
//Current ASCII Frame:
//Length: 62
//Frame Type: 128
//frame (HEX): 3C3D3E800223343030353738343936236E6F64655F54582331235354523A436F6D706C657465206578616D706C65206D657373616765234241543A393023
//frame (STR): <=>�#400578496#node_TX#1#STR:Complete example message#BAT:90#
//===============================
frame info | 설명 |
---|---|
<=> | 프레임의 시작을 알리는 구획문자 |
프레임타입(Binary or ASCII) + 필드 수 [1 바이트] | 이 필드는 프레임에서 전송 된 센서 필드 수를 지정, 프레임 길이를 계산하는 데 도움이 됨. |
# | 구분자 |
Waspmote ID | node_TX |
Frame sequence | 1 |
PAYLOAD | BAT:90 |
error = xbee802.send( RX_ADDRESS, frame.buffer, frame.length );
값을 받을 맥주소와, 보낼 인자를 변수로 두고 전송합니다.
리턴값은 전송이 성공적이면 0, 실패면 1로 되어있습니다.
이 리턴값을 활용해, 실제, TX 모듈에서도 확인할 수 있게 라이트를 킵니다.
// check TX flag
if( error == 0 )
{
USB.println(F("send ok"));
// blink green LED
Utils.blinkGreenLED();
}
else
{
USB.println(F("send error"));
// blink red LED
Utils.blinkRedLED();
}
성공시(초록불이 켜짐)
실패시(빨간불이 켜짐)
결과
우측 Tx모니터에서 보내는 값을 좌측 Rx 모듈에서 받아와 배터리, 날짜, 온도 정보를 출력하는 것을 확인할 수 있다.
- ↑ PAN personal area network; 개인 영역 통신망 PAN은 대개 10 m 안팎의 개인 영역 내에 위치한 정보기술 장치들 간의 상호 통신을 말한다 예를 들면 노트북 컴퓨터와 PDA 및 휴대용 프린터를 가지고 여행하는 사람은 일종의 무선 기술을 이용하여 서로 간에 플러그를 꼽지 않고서도 이 장치들을 상호 연결시킬 수 있게 되는 것이다 PAN은 일반적으로 인터넷이나 기타 다른 네트웍에도 회선 없이 연결시킬 수 있다 무선이라는 의미의 Wireless라는 단어를 앞에 붙여 만든 WPAN이라는 용어도 PAN과 같은 뜻으로 사용되고 있는데 그것은 어떤 종류의 PAN 이라 하더라도 무선 기능을 갖추는 것은 기본이기 때문이다 개념적으로 PAN과 무선 LAN과의 차이는 PAN이 한 개인을 지원하는 것에 초점을 맞춘 것에 비하여 무선 LAN은 회선 연결 없이 다수의 사용자를 지원하는 것 이다.
- ↑ 데이터 통신을 하는데 신호선이 송신신호선과 수신신호선이 분리되어있고 그러한 신호를 입출력하는 포트에는 수신신호가 들어오는곳이 Rx가 되고, 송신신호선이 나가는곳이 Tx가 됩니다. Rx는 Receive 의 약어이고, Tx는 Transmitt의 약어입니다.
- ↑ Waspmote frame은 특정 형식의 센서 데이터 프레임을 생성하기 위해 설계되었습니다. 이 데이터 프로토콜은 Meshlium (Meshlium은이 데이터 프레임을 해독 할 수 있음)에서 지원되므로 Meshlium으로 데이터를 전송하는 데 사용되는 형식입니다. 프레임에는 두 가지 종류가 있습니다 : ASCII와 Binary.
- ↑ UART란 Universal Asynchromous Receiver/Transmitter의 약자로, 통신규격 중 하나입니다. UART는 우리에게 시리얼 통신(Serial communication)으로 더 잘 알려져 있는데, UART의 통신 방법은 마치 사람이 대화 하는 것과 같은 원리를 가지고 있습니다. UART를 하기 위해서는 Rx(데이터 수신), Tx(데이터 송신), GND가 서로 연결이 되어야 하며, 비동기 통신이기 때문에 둘 간의 baud rate를 일치 시켜주어야 합니다. (예를 들어 11시 30분부터 10초간 신호를 보낼테니 잘 받으라는 약속(프로토콜)을 정해놓았다면, 따로 신호에 대한 부분을 설정할 필요없이 값을 주고 받을 수 있는 것이다.)
'IT > IoT' 카테고리의 다른 글
Waspmote ZigBee Networking Guide (0) | 2017.12.28 |
---|---|
Waspmote PRO v1.2 실습 (0) | 2017.12.28 |
Waspmote event-sensor-board 2.0 (0) | 2017.12.28 |
Waspmote-SD Examples (0) | 2017.12.28 |
Waspmote Quickstart Guide (0) | 2017.12.28 |