메뉴 건너뛰기

정보자료게시판

장비/디자인/구조

지그비(XBee)-ESP32-Blynk 오토메이션 종합 01

by 라키 posted Sep 21, 2018
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

지그비(XBee)-ESP32-Blynk 오토메이션 종합 01

목표

센서 지그비[건전지-LED-지그비] 2대가 코디네이터[지그비-ESP32]에게 지그비 통신을 통해 센서 정보를 보내고 그 정보는 블링크를 통해 핸드폰으로 전송.

핸드폰에서 센서 정보를 보고 코디네이터에 연결된 릴레이에게 온-오프 명령을 내리거나, 핸드폰에서 설정한 시간(시간 단위 반복)이 되면 해당 릴레이가 온-오프 된다.

테스트 소스

#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

#include <time.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "";
char pass[] = "";

int timezone=9;
int starttime=45;
int endtime=55;

float value01;
byte sig[30];
int Relay01=25;
int Relay02=32;
int Relay03=33;

int relayno=0;

int relayon=0;
int relaystate[3]={0,0,0};

BlynkTimer timer;

// This function sends Arduino&#39;s up time every second to Virtual Pin (5).
// In the app, Widget&#39;s reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.

void myTimerSensor()
{
//  0x8B : Sensor02 , 0x27 : Sensor03
//  = Relay02 , Relay03
//  = relaystate[1] , relaystate[2]
//  = VP6 : VP7
//  = VP0 : VP1
//  Sensor01 = VP5

  if(Serial.available() > 21) {
    while (Serial.read() != 0x7E);

    for(int i=0; i<21; i++){
      sig[i]=Serial.read();
      if(sig[i]==0x7E) break;
    }

    int analogReading=sig[18] + sig[19];
    value01=analogReading;

    if (value01<50) relayon=1;
    else if(value01>50) relayon=0;

    if(sig[10] == 0x8B) relaystate[1]=relayon;
    else if(sig[10] == 0x27) relaystate[2]=relayon;
  }
}

BLYNK_WRITE(V0)      // Slide V0 widget -> arduino
{
  int pinData = param.asInt();
  starttime=pinData;
}

BLYNK_WRITE(V1)      // Slide V1 widget -> arduino
{
  int pinData = param.asInt();
  endtime=pinData;
}

BLYNK_WRITE(V2)      // Button widget -> arduino
{
  int pinData = param.asInt();
  if(pinData == 1)    digitalWrite(Relay02,HIGH);  
  else              digitalWrite(Relay02, LOW);
}

BLYNK_WRITE(V3)      // Button widget -> arduino
{
  int pinData = param.asInt();
  if(pinData == 1)      digitalWrite(Relay03,HIGH);
  else              digitalWrite(Relay03, LOW);
}

void alarm()
{
  Blynk.virtualWrite(V6, relaystate[1]);  
  Blynk.virtualWrite(V7, relaystate[2]);  
}

void TimePrint() {
  String a[3];

  time_t now = time(nullptr);
  struct tm * timeinfo;
  timeinfo = localtime(&now); 
  a[0]=String(timeinfo->tm_sec, DEC); 
  a[1]=String(timeinfo->tm_min, DEC); 
  a[2]=String((timeinfo->tm_hour), DEC);  
  if(timeinfo->tm_sec<10)      a[0]="0"+a[0];
  if(timeinfo->tm_min<10)      a[1]="0"+a[1];
  if(timeinfo->tm_hour<10)     a[2]="0"+a[2];

  char tempstr[3];
  a[1].substring(0, 2).toCharArray(tempstr, 3);
  int minute = atoi(tempstr);

  if(minute >= starttime && minute <= endtime) {
    relaystate[0]=HIGH;
  }
  else {
    relaystate[0]=LOW;
  }
  digitalWrite(Relay01,relaystate[0]);
  Blynk.virtualWrite(V5, relaystate[0]);
}

void serialFlush(){
  while(Serial.available() > 0) {
    char t = Serial.read();
//    if (t==0x7E) break;
  }
} 

void setup()
{
  // Debug console
  Serial.begin(9600);

  pinMode(Relay01,OUTPUT);
  pinMode(Relay02,OUTPUT);
  pinMode(Relay03,OUTPUT);

  Blynk.begin(auth, ssid, pass);

  configTime(timezone * 3600, 0, "pool.ntp.org", "time.nist.gov");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("Time Setup");

  timer.setInterval(300L, myTimerSensor);
  timer.setInterval(1000L, TimePrint);
  timer.setInterval(1000L, alarm);
  timer.setInterval(2110L, serialFlush);
}

void loop()
{
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
}

센서 지그비 회로 구성

  • 1.2V 건전지 3개로 3.6V 출력을 만듦(Ni-Mh 충전 건전지 2개 2.4V로는 센서가 정상 감지 못함)
  • D3번-LED-저항(220옴)을 연결
  • 각 3.6V 전원을 연결해줌

센서 지그비 설정(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로(단순 통신 모드임)로 각 설정함
  • IR(IO Sampling Rate)는 하나는 1000(3E8), 다른 하나는 990(16진수 입력값으로는 3DE)으로 입력(완전 동일한 경우 각 센서들이 보내는 정보가 시간적으로 중복된 채로 반복되어 센서 정보를 번갈아 받기 어려운 문제가 있어서 시차를 줌)

코디네이터 지그비 회로 구성

  • ESP32의 RX,TX를 지그비의 TX,RX에 연결
  • 프로그램 업로드할때는 RX,TX 연결 선을 빼주어야 정상 업로드가 됨

수신부 지그비 설정(Coordinate API로 설정)

  • ID(PAN ID)는 위에서 적은 1234로
  • JV(Channel Verification)은 enable로,
  • CE(Coordinator Enable)은 enable(수신부 지그비는 Coordinator임)로,
  • AP(API enable)은 API enable로 각 설정

향후 체크할 점

  • 어느 정도 목표치에 접근함
  • 건전지 3개로 전원을 공급받는 센서 지그비가 어느 정도 버텨줄지가 관건

참고한 영상

TAG •

List of Articles
번호 분류 제목 글쓴이 날짜
890 장비/디자인/구조 힘펠 화장실 환풍기 분해 숨마 2021.05.19
889 생활/의료/안전 홍수위험지도 Summa 2022.09.02
888 장비/디자인/구조 홈페이지 디자인 & 로고 만들기 file 라키 2016.10.30
887 홈팟 미니의 반항 Summa 2023.06.03
886 전기차 현대차 | 수소전치가 넥쏘, '매우 뛰어난 차' 호평 숨마 2020.07.11
885 전기차 현대차 | 수소 전기 대형 트럭 10대 스위스 수출 숨마 2020.07.11
884 전기차 현대차 | 2021 전기차 전용 플랫폼 브랜드 '아이오닉' 런칭 숨마 2020.08.11
883 전기차 현대 전기차 아이오닉 일렉트릭 충전일지 라키 2018.02.08
882 전기차 현대 전기차 아이오닉 일렉트릭 사진 몇장과 여기저기 충전소 file 맘씨 2016.07.23
881 전기차 현대 전기차 아이오닉 일렉트릭 3,800키로 정기점검 리포트 file 라키 2017.01.14
880 전기차 현대 순정 네비게이션 업데이트 2019년 4월자 라키 2019.04.09
879 전기차 현대 네비게이션 아이오닉 | 네비게이션 시간 표시 오류 라키 2019.09.05
878 장비/디자인/구조 헤이홈 IR 리모컨 스마트싱스 연동 Summa 2023.07.05
877 장비/디자인/구조 헤놀로지 하드 인식 안될때 숨마 2021.01.21
876 헤놀로지 적출 하드 볼륨 충돌 숨마 2021.01.21
875 장비/디자인/구조 헤놀로지 이전 in 버추얼박스 숨마 2020.07.05
874 장비/디자인/구조 헤놀로지 볼륨 충돌 Summa 2023.11.28
873 장비/디자인/구조 헤놀로지 메일 플러스 서버 설치 후기 라키 2019.11.09
872 헤놀 서버 터짐 - 용량이 가득차 로그인할 수 없습니다. 숨마 2020.11.12
871 학습/연구 향후 주택 아파트 가격 집값 오를까, 내릴까. file 라키 2017.05.11
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 45 Next
/ 45
위로