메뉴 건너뛰기

정보자료게시판

장비/디자인/구조

지그비(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
번호 분류 제목 글쓴이 날짜
296 장비/디자인/구조 힘펠 화장실 환풍기 분해 숨마 2021.05.19
295 장비/디자인/구조 홈페이지 디자인 & 로고 만들기 file 라키 2016.10.30
294 장비/디자인/구조 헤이홈 IR 리모컨 스마트싱스 연동 Summa 2023.07.05
293 장비/디자인/구조 헤놀로지 하드 인식 안될때 숨마 2021.01.21
292 장비/디자인/구조 헤놀로지 이전 in 버추얼박스 숨마 2020.07.05
291 장비/디자인/구조 헤놀로지 볼륨 충돌 Summa 2023.11.28
290 장비/디자인/구조 헤놀로지 메일 플러스 서버 설치 후기 라키 2019.11.09
289 장비/디자인/구조 핸드 반죽기 추천 라키 2019.10.27
288 장비/디자인/구조 해놀로지 webdav 이상 오류 라키 2019.06.27
287 장비/디자인/구조 해놀로지 webdav 외부 접속 문제 라키 2019.10.07
286 장비/디자인/구조 플로트 센서 플로트 스위치 노멀 오픈 클로즈 상태 바꿔주기 Summa 2022.08.07
285 장비/디자인/구조 플러터 안드로이드 툴체인 에러 숨마 2022.02.21
284 장비/디자인/구조 포린키 설정이 안된다? Summa 2022.07.17
283 장비/디자인/구조 파일질라의 갑작스러운 디렉터리 목록 조회 실패 숨마 2020.09.06
282 장비/디자인/구조 파일질라 FTPs 사용시 인증서 만료 메시지 숨마 2020.08.09
281 장비/디자인/구조 팁 | 아이폰 도서 앱 책에 목차를 추가하자. 숨마 2020.07.03
280 장비/디자인/구조 트로드프리 온오프 버튼 잘 동작 안할때 Summa 2022.05.30
279 장비/디자인/구조 투야 워터센서의 불안정성 숨마 2022.01.16
278 장비/디자인/구조 투야 도어센서로 수위센서 만들기 숨마 2022.03.13
277 장비/디자인/구조 텔레그램 모두 읽기 모키 2020.04.24
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15
위로