IoT의 특징:사용자가 최소한의행동을 하면 사물들이 인터넷을 통해 사용자에게 최대의 이득을 줌
IoT3대 기술
센서 : 감각하여알아내는 장치, 외부상태를 알려주는 장치 모듈이 (나에게 신호를 보냄)
액추에이터 : 디지털이나 아날로그 신호를 보내서 모듈 제어, 시스템을 움직이거나 제어하는 기계장치 (내가 모듈에 신호를 보내 제어함)
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
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);
}
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;
}
}
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); //매핑 값
}
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;
}
}