메뉴 건너뛰기

정보자료게시판

장비/디자인/구조

지그비(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 장비/디자인/구조 13인치 맥북프로 논터치바 주문완료 file 라키 2017.01.01
295 장비/디자인/구조 2016 논터치바 맥북프로 터치바 만들기 file 라키 2017.01.01
294 장비/디자인/구조 2019 연간 달력 라키 2019.05.02
293 장비/디자인/구조 2019 음력 양력 연간달력 라키 2019.05.03
292 장비/디자인/구조 2020년 연간 달력 라키 2019.05.03
291 장비/디자인/구조 2021년 달력 file 모키 2020.04.27
290 장비/디자인/구조 2022 하반기 장비들 구매 내역, 스노우피크, IGT, 버너, 스토브 등 Summa 2022.11.29
289 장비/디자인/구조 2023년 연간달력 file 숨마 2022.01.03
288 장비/디자인/구조 2번 윈도우 서버 이상 숨마 2022.01.25
287 장비/디자인/구조 6개월만에 xe3를 설치해보았다. 숨마 2021.08.23
286 장비/디자인/구조 A7m2 Elgato | 미러리스를 통해 화상회의 및 유투브 실시간 스트리밍하기 숨마 2020.08.26
285 장비/디자인/구조 ARM 맥북프로 13인치 루머 숨마 2020.11.02
284 장비/디자인/구조 AS | 삼성 LED 49 TV 서비스 후기 숨마 2020.07.22
283 장비/디자인/구조 AS | 파세코 인버터 창문형 에어컨 AS 후기 숨마 2020.09.04
282 장비/디자인/구조 Blynk 대신 Arduino IoT Cloud를 써볼까?? 숨마 2022.03.27
281 장비/디자인/구조 CentOS 6.6 에서 APM 설치, GD라이브러리 설치, SSL, FTP 설치 작업 정리 라키 2017.06.02
280 장비/디자인/구조 Draw.io 텍스트 상자 줄바꿈 Summa 2023.01.10
279 장비/디자인/구조 DS Audio 카플레이 제대로 지원 시작 숨마 2020.07.17
278 장비/디자인/구조 ds photo 시놀로지 포토 사진 모바일에서 링크 따는 법 Summa 2023.01.13
277 장비/디자인/구조 egv70 대기 중 MsjcLaki 2022.05.01
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15
위로