지그비 통신_COORDINATOR API 와 ROUTER AT 사이 의사소통(센서-릴레이)
목표
원격 지그비(AT모드)에서 수위를 감지해 수위가 감지되는 경우 원격 지그비에 연결된 릴레이 온, 감지되지 않는 경우 릴레이 오프하는 구조. 그 정보를 코디네이터 지그비가 관리한다.
테스트 소스
float value01; //water sensor
byte sig[30];
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 21) {
if(Serial.read() == 0x7E) {
for(int i=0; i<23; i++){
sig[i]=Serial.read();
Serial.print(sig[i],HEX);
Serial.print(", ");
}
Serial.println();
Serial.println();
}
Serial.println(sig[20],HEX);
Serial.println(sig[21],HEX);
int analogReading=sig[20] + (sig[21]);
value01=analogReading;
Serial.print(value01);
Serial.println(" degree");
Serial.println();
if (value01>50) {
Serial.print("Relay On");
setRemoteState(0x5);
}
else {
Serial.print("Relay Off");
setRemoteState(0x4);
}
Serial.println();
}
}
void setRemoteState(char value)
{
Serial.write(0x7E); // start byte
Serial.write((byte)0x0); // high part of length (always zero)
Serial.write(0x10); // low part of length (
Serial.write(0x17); // 0x17 is a remote AT command
Serial.write((byte)0x0); // frame id set to zero for no reply
// ID of recipient, or use 0xFFFF for broadcast
Serial.write((byte)0x0);
Serial.write((byte)0x0);
Serial.write((byte)0x0);
Serial.write((byte)0x0);
Serial.write((byte)0x0);
Serial.write((byte)0x0);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFE);
Serial.write(0x02);
Serial.write('D');
Serial.write('4');
Serial.write(value);
long sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '4' + value;
Serial.write(0xFF - (sum & 0xFF));
}
원격 지그비 회로 구성
- 1.2V 건전지 3개로 3.6V 출력을 만듦(Ni-Mh 충전 건전지 2개 2.4V로는 센서가 정상 감지 못함)
- 수위감지센서의 센서부-지그비 D3번에 연결
- 각 3.6V 전원을 연결해줌
원격 지그비 설정(ROUTER AT로 설정)
- XCTU 다운로드(https://www.digi.com/resources/documentation/digidocs/90001526/tasks/t_download_and_install_xctu.htm)
- 맥용 XCTU 프로그램도 있음
- 셋팅으로 들어가면 XBEE S2C, 작성일 기준으로, Product Family는 XB24C로, Function set 은 ZIGBEE TH Reg, Firmware Version은 4060임
- Help에서 Update Check, Update, Install 다 해주는 걸 권장하는데 시간이 좀 걸림
- ID(PAN ID) 는 아무 숫자나 해도 되는데 수신부 지그비와 일치시켜야. 여기서는 1234로
- JV(Channel Verification)은 enable(통상 채널 확인 하고 시작함)로,
- CE(Coordinator Enable)은 disable로(Router 설정임),
- AP(API enable)은 Transparent mode로(단순 통신 모드임)로 각 설정함
- D3은 ADC[2]로, D4는 Disable[0]로 설정
코디네이터 지그비 회로 구성
- 지그비 아두이노 쉴드를 사용하면 비교적 쉬움(먼저 아두이노 쉴드를 이용해 지그비에 프로그램이 업로드 된 다음에는 빵판으로 아두이노와 연결하면 작동함!)
- 아두이노에 아두이노 쉴드를 꽂고, 그 위에 지그비를 꽂음. USB 선으로 PC와 연결
- 아두이노 쉴드에는 XBEE/USB 스위치와 RUN/PROG 스위치가 있음. 아두이노 IDE에서 프로그램을 업로드할때는 USB 쪽으로 놓고, 실행할때는 XBEE로 놓음
- RUN/PROG는 RUN으로 놓음
수신부 지그비 설정(Coordinate API로 설정)
- ID(PAN ID)는 위에서 적은 1234로
- JV(Channel Verification)은 enable로,
- CE(Coordinator Enable)은 enable(수신부 지그비는 Coordinator임)로,
- AP(API enable)은 API enable로 각 설정
향후 목표
- 이제 ESP32와 연결해 원격 지그비 동작 정보를 Blynk로 알려주면 핸드폰으로 동작상태를 확인