22.02.23 wemos 모듈 사용기

최고고·2022년 2월 23일
0
post-custom-banner
  • IoT의 특징:사용자가 최소한의행동을 하면 사물들이 인터넷을 통해 사용자에게 최대의 이득을 줌

  • IoT3대 기술

  1. 센싱 기술
  2. 네트워크 기술 (블루투스 등)
  3. 디바이스제어할 수 있는 인터페이스 기술(안드로이드)
  • 아두이노 UNO보드 장점
    오픈소스, 쉽다, 저전력, 마지막업로드 코드가 남아있다.
    단점 : 고급소스 활용 어려움, 연산시 처리용량이 2KB로 메모리가 작다.

센서 : 감각하여알아내는 장치, 외부상태를 알려주는 장치 모듈이 (나에게 신호를 보냄)
액추에이터 : 디지털이나 아날로그 신호를 보내서 모듈 제어, 시스템을 움직이거나 제어하는 기계장치 (내가 모듈에 신호를 보내 제어함)


  • ESP32 사용 전 설정하기
    -CH34x_Install_Windows_v3_4 설치
    -장치관리자에서 usb serial port번호 확인

    -환경설정에 추가매니저설정(https://dl.espressif.com/dl/package_esp32_index.json) 하고 Wemos Dev Moudule 체크
    -Upload Speed: 115200으로 설정해주기

  • GND- 5V+
    암묵적 룰 :검정 점퍼선- 빨강 점퍼선+ led 긴다리+

  • 풀다운저항: 눌렀을 때 1, 뗐을 때0 저항을 GND단자에 연결하고 입력핀 GND, 버튼이 열린 상태에서 입력핀의 값은 0

  • 풀업:눌렀을 때0, 뗐을 때1 저항을 VCC단자에 달고 입력핀에 5v전압

입력핀의 기본 상태는 HIGH, 버튼을 누르면 LOW

  • LED에 저항 220옴을 사용하는 이유: 과전류가 흐르지 않게하기위하여, 전류 고정
  • 누름버튼에 저항 1K옴을 사용하는 이유: 5V와 0V가 만나지않도록 하기 위하여/ 전류차를 막아준다.
  • void setup(): 스케치가 시작 될 때 호출, 변수 초기화, 핀 모드 설정, 라이브러리 초기화 작업, 한번 실행

  • void loop(): setup함수에서 초기화를 수행후 loop함수 호출, 연속적으로 반복하여 실행, 아두이노 보드 동작 제어 프로그램 실행 함수

  • Serial.begin(9600): 통신속도이며 보통 9600으로 설정

  • Serial.println(값): 시리얼 통신의 데이터를 시리얼
    모니터에 출력 후 줄바꿈 한다.

  • delay(): ms의 단위로 사용하며 대기시간 설정할때 사용

  • digital은 임의의 시간에 정수 값을 나타낸다, 즉 아두이노로 따지면 0=0v=low=꺼짐 1=5v-high-켜짐으로 정확히 나누어지는것
    그에 비해 아날로그는 연속성이 있는 코싸인파형 그래프로 0,1 두가지로 나누어 져있지않으며 digtal low, high상태 시간을 조절해서 아날로그 신호를 구할 수 있다.

  • 디지털 신호를 아날로그 신호로 바꾸기위해서 PWM과 analogWrite를 이용해야 한다

  • PWM(Pulse Width Modulation, 펄스폭변조)를 이용하면 디지털 신호를 아날로그 신호와 비슷하게 만들 수 있다.

  • analogWirte(PWM핀번호, value): pwm출력 조절하는 명령어, 밝기나 속도 조절 가능

//delay 1000은 1초 딜레이

int ledPin = 18; //전역변수
int ledPin2 = 19;
led_delay=25;

void setup() {
  pinMode(ledPin,OUTPUT);
  pinMode(ledPin2,OUTPUT);
}


void loop() {
  digitalWrite(ledPin,HIGH);
  delay(25);
  digitalWrite(ledPin,LOW);
  delay(25);
  digitalWrite(ledPin2,HIGH);
  delay(25);
  digitalWrite(ledPin2,LOW);
  delay(25);
  
}

  • 버튼을 누르면 led켜지게
int ledPin =18;
int ledPin2 =19;
int btn = 26;
void setup() {
  pinMode(btn, INPUT); //26번 핀에 sensor가 배선됨
  Serial.begin(115200); //시리얼모니터에서 통신 속도 확인해서 속도 일치시켜주기
  pinMode(ledPin,OUTPUT);
  pinMode(ledPin2,OUTPUT);
}

void loop() {
  int btnState = digitalRead(btn);
  Serial.println(btnState); //시리엁통신의 데이터 시리얼 모니터에 출력함

  if(btnState==1){
    digitalWrite(ledPin, HIGH);
    digitalWrite(ledPin2, HIGH);
  }else {
    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);
  }
    delay(10);

}

int ledPin = 18; int ledPin2 = 19; 
void setup() {
  pinMode(ledPin, OUTPUT); 
  pinMode(ledPin2, OUTPUT);
  ledcSetup(0, 5000, 8); 
  //채널번호, 주파수(진동수)-1초에몇번, 해상도(비트단위)-2^8 => 0~255까지
  ledcAttachPin(ledPin,0); //18번핀에 0번 채널 매칭
  ledcAttachPin(ledPin2,0);
}

void loop() {
  ledcWrite(0, 0); //우노보드는 analogWrite
  delay(1000);
  ledcWrite(0,127);
  delay(1000);
  ledcWrite(0,255);
  delay(1000);
}

  • 버튼을 처음 한번 누르면 중간 밝기, 두번째누르면 가장 센 밝기, 세번째 누르면 꺼짐유지
int ledPin =18;
int ledPin2 = 19;
int btn = 26;
int cnt = 0;	//한번 눌렸을때마다 1씩 증가해줄 변수만들어줌
boolean check = true;	//실행할 때 true, false로 나눠줘서 꺼질때 (0) false로 만들어줌

void setup() {
  pinMode(btn, INPUT); 
  Serial.begin(115200); 
  
  pinMode(ledPin,OUTPUT);
  pinMode(ledPin2,OUTPUT);
  ledcSetup(0, 5000, 8); 
  ledcAttachPin(ledPin,0);
  ledcAttachPin(ledPin2,0);
}

void loop() {
  int btnState = digitalRead(btn);
  Serial.println(btnState);
  

  if(btnState==1){
    if(check){
      check = false; //실행되자마자 false로만들어서 최초 1번만 true, 몇백번이라도 if문에 들어올수없다. =>디바운스
      cnt += 1;
    } if(cnt==1){
      ledcWrite(0, 127); 
    } else if(cnt ==2){
      ledcWrite(0, 255); 
    } else if(cnt == 3){
      cnt = 0;
      ledcWrite(0, 0); 
    }
    
  } else {
    check = true;
  }
   
}

  • 가변 저항으로 led 밝기 제어하기
    아날로그 input은 생략가능
    -가변저항은 0~4095까지..led밝기는 0~255까지라 값을 맞춰줘야됨
    ㄴmap(센서값, 현재센서의 최소값, 현재센서의 최대값, 변화할 최소값, 변화할 최대값) : 센서의범위를 내가 원하는 범위로 조절하는 함수=>return이 int형
    -Write : 신호를보낼때는 핀번호,어떤신호보낼지 ->매개변수 두개
    -Read : 핀번호만 넣어주면 됨 -> 아날로그신호로 return해줌, 리턴값이 있음
int led = 18;

void setup() {
pinMode(led,OUTPUT);  
Serial.begin(115200);//시리얼모니터 input은 생략가능
ledcSetup(0, 5000, 8); 
ledcAttachPin(led,0);

}

void loop() {
int sensorValue = analogRead(2); //아날로그신호 불러들임
//가변저항은 0~4095까지..led밝기는 0~255까지라 값을 맞춰줘야됨
//Write - 신호를보낼때는 핀번호,어떤신호보낼지 ->매개변수 두개
//Read - 핀번호만 넣어주면 됨 -> 아날로그신호로 return해줌, 리턴값이 있음
Serial.println(sensorValue);
int a = sensorValue/16.4; // 이렇게 하거나
int mapValue = map(sensorValue,0,4095,0,255); 
ledcWrite(0, mapValue);	//매핑 값

}



  • 릴레이모듈 :
    -아두이노는 기본적으로 5V 전류에 동작하는데, 5V이상의 전류를 다룰 수가 없어서 대신해주는 역할이 릴레이 모듈
    -높은 전압에 동작하는 전자기기를 아두이노가 릴레이 모듈을 사용하여 쉽게 제어가 가능 예로 선풍기, 에어컨, 남방기기, 현광등 외 높은 전압을 사용하는 전자기기를 제어할 수 있다. => 스위치 역할
    -ON/OFF 스위치 기능 : 저전압/전류를 이용해 더 높은 전압/전류를 제어함 => 전기를 통하게 하느냐 마느냐 결정
    -아두이노연결은 DC+ DC- IN 은 디지털핀
    -COM:무조건연결-잘린선중하나는 여기에연결
    -NO(Normally Open) : high신호 릴레이 ON (전기통함), low신호 릴레이OFF(전기 안통함)
    -NC(Nomarlly Close) : NO와 반대
void setup() {
  pinMode(18, OUTPUT);
  pinMode(26, INPUT);
  Serial.begin(115200);
}

int cnt = 0;
boolean check = true;
void loop() {
  int bntState = digitalRead(26);
  Serial.println(bntState);
  if(bntState==1){
    if(check){
      check=false;
      cnt+=1;
    }if(cnt==1){
      digitalWrite(18,HIGH);
    }else {
      cnt = 0; 
      digitalWrite(18, LOW);
    }
  }
  else {
    check = true;
  }
}
post-custom-banner

0개의 댓글