반응형

 

계속해서 아두이노(Arduino) 스케치를 이용하여 프로그램을 코딩할 때 사용하는 명령어에 대해 알아보고 있는데요, 처음 아두이노를 시작할 때 접했던 생소한 느낌보다는 조금은 익숙해지고 있을 거라 생각됩니다. 익숙해지려면 계속 사용하고 적용하는 방법이 제일 빠르더라고요 ^^ 그럼 오늘도 지난번 포스팅에 이어 프로그램을 코딩할 때 유용한 몇 가지 명령어를 알아보겠습니다.

 

지난번 알아보았던 pinMode, digitalWrite, if 명령어들은 아래 링크 걸어놓을 테니 참고 부탁드립니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙

it-g-house.tistory.com


 

명령어 기능 사용법
Serial.read 시리얼 통신으로 수신된 데이터를 읽음  변수 = Serial.read();
millis 시간 카운팅 변수 = millis();
char 문자형 값을 처리하기 위한 변수 설정  char 변수;

 

1. Serial.read( );

 

아두이노 Serial.read() 함수는 아두이노가 수신한 데이터를 읽어오는데 사용하는 명령어입니다. 보통 시리얼 통신을 통해 아두이노로 데이터를 송신할 수 있고, 가장 쉽게 시리얼 모니터에서 입력한 text를 아두이노가 수신할 수 있습니다. Serial.read() 명령어를 사용하여 호출 시 1바이트씩만 읽어오며 유효한 데이터가 있을 때까지 반복됩니다.

 

아래와 같이 코드를 입력하고 시리얼 모니터를 실행해 보겠습니다. void setup에서 Serial.begin에 통신속도 9600으로 설정하고, void loop에는 다른 명령어를 설정하지 않았습니다.

 

void setup(){
 Serial.begin(9600);
 }
 
void serialEvent(){
    char Input;
    Input = Serial.read();
    Serial.println(Input);
}

void loop(){
}

 

void serialEvent 안에 Input이라고 char 변수를 설정하고 Input에 시리얼 통신으로 수신된 데이터를 Serial.read()로 읽어 Serial.println 명령어로 Input을 출력하라고 프로그래밍하였습니다. serialEvent는 시리얼통신에 대해서 우선적으로 응답할 때 사용하는데, 명령어가 loop 안에 있지 않아도 시리얼 통신으로 데이터가 수신되거나 하면 자동으로 호출되어 명령어를 실행합니다. 자세한 내용은 다음에 다루도록 하겠습니다.

 

스케치를 통해 아두이노로 업로드 후 시리얼 모니터를 실행시켜 상단 입력창에 text를 입력하면 아래와 같이 입력한 문자의 1바이트씩 출력되는 것을 확인할 수 있습니다. 차례로 a, ok, IT-G-House를 입력하였습니다. 

 

아두이노(Arduino) 프로그램 코딩 초급 II : (Serial.read, millis, char)

 


 

2. millis( );

 

아두이노를 사용하다 보면 타이머나 시간을 설정하는 경우가 있습니다. millis() 명령어는 millisecond (1/1000) 초를 말하며, 아두이노가 동작한 시점으로부터 millisecond 단위로 나타내어 줍니다. 시간을 잴 수 있는 최대 값은 약 49.7일이며, 이 시간이 지나면 0부터 다시 시작합니다.

 

아쉬운 점은 아두이노가 시작하는 시점부터 시간을 잰다는 거라서 간혹 중간에 전원 공급이 끊긴다거나 어떠한 사정으로 리셋되면 아두이노가 재시작되면서 0부터 시작하는 큰 단점과 실제 시각과 맞추기 어렵다는 점입니다. 인터넷이 된다면 실시간과 맞춰 시간을 설정할 수 있지만 시계열 동작이나 측정이 필요한 경우는 보통은 DS1302 RTS 같은 시계 모듈을 사용합니다.

 

아래와 같이 코드를 입력하고 아두이노에 업로드하면 변수 now에 시간이 기록되고 시리얼 모니터에서 "time: 아두이노가 시작한 후 경과한 시간"을 볼 수 있습니다.

 

unsigned long now;

void setup(){
 Serial.begin(9600);
 }
 

void loop(){
  now = millis();
  Serial.print("time: ");
  Serial.println(now);
}

 

아두이노(Arduino) 프로그램 코딩 초급 II : (Serial.read, millis, char)

 


 

3. char

 

char는 character(문자)의 약자로 문자형 변수를 설정할 때 사용합니다. 8비트 정수형 처리 변수로 -128~127까지의 숫자를 취급할 수 있습니다.

 

char는 if 문이나 조건에서 같다면을 표시하는 '=='을 사용할 수 있지만 String은 사용하더라도 원하는 결과와 달라질 수 있기 때문에 필요에 따라 char 또는 String을 적절하게 사용할 수 있습니다. char 사용 예시는 Serial.read() 예시에서 보셨으니 String 예시와 비교하여 살펴보면 좋을 것 같습니다.

 

아래와 같이 코드를 입력하고 아두이노에 업로드한 후 시리얼 모니터에 a, ok, IT-G-House를 입력하였습니다.

void setup(){
 Serial.begin(9600);
 }
 
void serialEvent(){
    String Input;
    Input = Serial.readString();
    Serial.println(Input);
}

void loop(){
  
}

 

아두이노(Arduino) 프로그램 코딩 초급 II : (Serial.read, millis, char)

 

char로 변수를 입력했을 때와 다르게 1바이트씩 출력되는 게 아니라 입력한 그대로 출력되는 것을 볼 수 있습니다.

 


 

오늘은 아두이노(Arduino) 프로그램 코딩에 필요한 'Serial.read()', 'millis()', 'char'에 대해 알아보았습니다. 이런 명령어를 통해 시간제어를 한다던지 시리얼 통신으로 수신된 데이터를 신호를 통해 제어를 하는 등의 프로그램을 코딩할 수 있습니다. 최근 진행 중인 실내 식물 재배기 프로젝트를 예시로 응용 부분에서 더 자세하게 다루어 보겠습니다.

 

다음번 포스팅에도 더 쓰임이 좋은 명령어를 소개드리겠습니다.

긴 글 읽어 주셔서 감사합니다. 질문이나 추가적으로 필요하신 내용 있으면 언제든지 댓글로 남겨주세요~ ^^

 

 

반응형
반응형

 

 

 

아두이노(Arduino)에서 자주 사용하는 센서 및 모듈을 소개하는 시간으로 오늘은 적외선 센서에 대해 알아보겠습니다. 적외선 PIR (Passive Infrared Sensor) 센서는 외부에서 발생하는 적외선을 감지하는 센서입니다. 여기서 Passive가 붙은 이유는 센서가 수동적으로 주변의 적외선을 detecting하여 주변을 감지하기 때문입니다. 이와 반대로 센서에서 적외선을 방출하여 주변을 감지하는 적외선 센서도 있습니다.

 

지난 포스팅에서 초음파 센서 HC-SR04를 이용하여 사람의 동작을 감지할 수 있는 것을 살펴보았는데요. 초음파 센서에 비해 적외선 PIR 센서가 view angle이 더 넓습니다. 즉, 주변을 감지할 수 있는 범위가 더 넓은데, 이는 초음파 센서는 센서에서 초음파가 발생하여 물체에 반사되어 다시 센서가 detecting하기까지 경로가 있기 때문에 적외선 센서에 비해 좁은 영역을 감지할 수밖에 없습니다.

 

Arduino 아두이노 초음파(거리) 센서(ultrasounds sensor) 사용방법

앞서 포스팅에서 온습도 센서(Temperature and Humidity sensor)만 가지고 아두이노의 기본적인 동작법이나 파일 저장법, 그래프 그리기, 엑셀(Excel)과 연동하는 방법들을 알아보았습니다. 그리고 인터넷(

it-g-house.tistory.com


 

1. 적외선 PIR (Passive InfraRed) 센서 HC-SR501

 

아두이노에서 자주 사용되고 온라인에서 쉽게 구할 수 있는 HC-SR501 적외선 PIR 센서 모듈입니다. 가격도 저렴한 편인데 사용하기도 편하고 생각보다 많은 설정이 가능해서 널리 사용되는 듯 합니다. 오늘 예시는 이 HC-SR501 모듈로 진행하겠습니다.

 

 

아두이노 적외선 PIR 센서 (HC-SR501)

 

동작전압 (Operating voltage) 5~12VDC
출력전압 (Output voltage) 0 V (Low) / 3.3V (High)
감지각도 (View angle) 110~120도
설정 기능 (Setting option) 감도(거리), 지연시간, 신호방식

설정 기능은 아래 사진에서 볼 수 있듯이 돌릴 수 있는 나사 두개와 접선을 해주는 점퍼대로 여러 가지 조절이 가능합니다.

 

 

감도(거리, Distance) 조절 : 시계방향으로 돌리면 감도가 낮아져 적외선을 sensing할 수 있는 거리가 줄어듭니다.

 

지연시간 (Delay Time) 조절 : 적외선 감지후 감지된 신호(High)를 얼마간 유지할지 조절이 가능합니다. 시계방향으로 돌릴수록 신호를 유지하고 있는 시간이 짧아집니다.  

 

신호방식 조절 : 좌측의 점퍼대를 옮겨 연결하면 감지신호를 한번만 보내주는 모드이고, 다른 모드는 감지신호를 계속해서 보내 주는 모드입니다.  

 

▶ 적외선 센서 사러가기  smartstore.naver.com/storeplant/products/5347527847

 

 

2. 아두이노 (Arduino) 적외선 PIR (Passive InfraRed) 센서 배선

 

 

아두이노 적외선 PIR 센서 (HC-SR501) 배선

 


 

 

3. 아두이노 (Arduino) 프로그램 코딩

 

int inputPIN = 3;    
int PIRstatus = 0;    
int Readinput = 0;  
  
void setup() {  
   pinMode(inputPIN, INPUT);   
   Serial.begin(9600);    
}  
  
void loop(){  
  Readinput = digitalRead(inputPIN);    
  if(Readinput == 1 && PIRstatus == 0){
      Serial.println("Action!");    
      PIRstatus = 1;    
     }  
  if(Readinput == 0 && PIRstatus == 1){  
        Serial.println("End!");    
        PIRstatus = 0;  
       }  
    delay(1000);  
   }  
   

pinMode와 if 명령어를 사용하여 프로그램을 코딩합니다. 센서가 적외선을 감지(사람을 인지)하면 연결된 digital 3번 pin으로 High 신호를 보내고 아두이노가 신호를 읽어 시리얼 모니터에 "Action"이라고 메시지를 보냅니다. 사람이 지나가고 적외선 감지가 없으면 센서에 설정해놓은 감지시간이 지나고 아두이노에 Low 신호를 보내 "End" 메시지를 볼 수 있습니다.

 

pinMode와 if 명령어가 처음이신 분은 아래 링크 참조 부탁드립니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙

it-g-house.tistory.com

 


  이번 포스팅에서는 아두이노(Arduino)에서 많이 사용하는 적외선 PIR 센서에 대해 알아보고 사용방법에 대해 살펴보았습니다. 다음 포스팅에서는 적외선을 응용하여 자동센서등이나 자동문 등을 만들 수 있는 방법에 대해 공부해 보겠습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금하신 부분이나 조언주실 내용은 댓글로 언제든지 남겨주세요 ^^

 


 

▽ 적외선 FIR 센서를 이용한 홈 IoT 무드등 만들기 응용편!! 

 

아두이노(Arduino) 응용, 적외선 FIR센서를 이용한 무드등 만들기

아두이노(Arduino)를 이용한 홈 IoT (생활응용)에 적용하는 시간으로 적외선 FIR센서를 이용하여 무드등을 만들어보겠습니다. 최근 집에 머무르는 시간이 길어지면서 인테리어에 많은 관심이 생겼

it-g-house.tistory.com

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)를 활용하여 홈 IoT (사물인터넷) 프로젝트를 진행하다 보면 서버(Server) 구성의 필요성과 중요성을 느낄 때가 많습니다. 이전 포스팅까지는 아파치(Apache), PHP, MySQL DB(데이터베이스)를 이용하여 간단하게 서버를 구성하는 방법을 알아보았습니다. 또한 APMSetup 같은 프로그램을 이용하여 더 간편하게 가벼운 서버를 구성하기도 하였습니다. 

 

그러나 아두이노를 사용해서 점점 더 복잡한 홈IoT 및 스마트팜 (Smart Farm) 시스템을 구성하고 프로젝트를 기획하다 보면은 서버의 비중이 커지는 것을 느끼고 서버를 잘 구성해야겠다는 생각이 듭니다 (제 이야기입니다..;;). 그래서 개인 컴퓨터가 아닌 Cloud 플랫폼에서 리눅스를 기반으로 서버를 구성하는 방법을 공부해 보도록 하겠습니다. 

 

APMSetup을 이용하여 아파치, PHP, MySQL을 사용한 서버 구성을 알아보실 분은 아래 링크 참조 부탁드립니다.

 

Arduino 아두이노 홈 IoT(사물인터넷)을 위한 서버(Sever) 쉽게 만들기: APMSetup 프로그램

아두이노(Arduino)를 사용해서 홈 IoT(사물인터넷)을 구축하는 프로젝트를 위해서는 인터넷을 통한 데이터 전송이 기본적으로 가능해야 합니다. 인터넷을 사용하여 웹을 통해 데이터를 송수신하

it-g-house.tistory.com


1. 우분투(Ubuntu)

 

먼저 리눅스(Linux)가 운영체제(OS, Operating System)라는건 많이 들어보셨을 겁니다. 그중에 우분투(Ubuntu)는 "영국 기업 캐노니컬이 개발, 배포하는 컴퓨터 운영 체제이다. 데비안(Debian) 리눅스를 기반으로 개발되며, 데비안에 비해 사용 편의성에 초점을 맞춘 리눅스 배포판이다."라고 위키백과에서 설명하고 있습니다. 

 

간단하게 사용 편의성에 초점을 맞춘 데비안 리눅스를 기반으로 한 운영체제다 정도로 이해할 수 있습니다. 일반적으로 새 버젼이 6개월마다 공개되는데, 장기지원판이라고 LTS: Long Term Support은 2년에 한 번씩 출시되어 장기간 지원을 하고 있습니다.

 

우분투 LTS는 현재 20.04가 최신 버젼이고 2020년 4월에 업데이트되어 20.04라고 합니다. 저는 우분투 16.04 LTS를 사용하고 예시도 16.04를 기본으로 보여드리겠습니다.

 

아래는 우분투 16.04 운영체제 기본 터미널 화면입니다.

 

 

운영체제마다 명령어가 조금씩 다른데 이부분은 사용하다 보면 자주 사용하는 명령어가 보통 중복되기 때문에 금방 익숙해질 수 있습니다. (저는 아직 헤매는 중인데요 ㅠㅠ)

 

먼저 리눅스 배포판 LSB (Linux Standard Base) 버젼을 확인하기 위해 :~$ lsb_release -a 명령어를 실행합니다. 그럼 아래와 같이 사용하고 있는 운영체제의 정보를 알 수 있습니다. 저는 앞에서 언급했듯이 우분투 16.04 LTS를 사용하고 있습니다.

 


 

2. MySQL 설치

 

리눅스(우분투)에서 mysql을 설치하기 위해 

:~$ sudo apt-get install mysqp-server

명령어를 실행합니다.

 

그럼 아래와 같이 install이 실행되고, 중간에 mysql-server-core-5.7이라고 볼 수 있습니다. mysql 버전이 5.7인 것을 알 수 있습니다. 그리고 continue? 물음에 yes를 하면 본격적인 설치 진행이 됩니다. 대략 3~5분? 정도 진행하는 것 같습니다. 

 

설치가 완료되면 아래와 같이 "root" user의 비밀번호를 입력하라고 합니다. 사용할 비밀번호를 설정하는 부분이니 적절한 비밀번호를 입력해 주면 됩니다. 비밀번호를 입력하면 한 번 더 확인하고 설치가 마무리됩니다.

 

설치가 완료되면 이전 포스팅에서 터미널로 mysql을 실행하는 방법과 같은 명령어로 

:~$ mysql -u root -p

실행할 수 있습니다. mysql을 실행하면 앞서 설정했던 비밀번호를 입력하라는 메세지가 나오고 비밀번호를 입력하면 아래 화면과 같이 실행화면 mysql> 옆에 커서가 깜박이고 있는 것을 확인할 수 있습니다. 

 

이전 포스팅에서 window10의 명령 프롬프트에서 mysql을 실행하는 방법과 실행 후 화면이 같은 것을 확인할 수 있습니다. 그럼 데이터베이스(DB, Database)를 생성해 보겠습니다. 

 


 

3. 데이터베이스(Database) 생성하기

 

우선 현재 DB를 확인하기 위해 명령어 'show databases;'를 입력하면 

 

기존 생성되어 있는 Database들을 볼 수 있고, 기존 DB들은 어디에 사용되고 있는지 잘 모르니.. 그냥 건드리지 말고~ Test용 데이터베이스를 하나 만들어 보겠습니다.

 

Database 생성 명령어

> create database "DB이름";

을 아래와 같이 실행하면 됩니다. 여기서 "DB이름"을 저는 test로 명명하였습니다.

 

명령어를 실행하고 성공적으로 실행되었으면 Query OK란 메시지를 볼 수 있습니다.

 

그럼 실제로 'test' 데이터베이스가 생성되었는지 다시 show databases; 를 입력하면 아래와 같이 'test'가 새로 생성된 것을 확인할 수 있습니다.

 

 


 

4. Table 만들기

 

이어서 Table도 생성할 수 있습니다. 명령어는

>create table "table이름"

인데 여기에 데이터의 형태, 컬럼 제목, primary key 등을 사용자의 용도에 맞게 설정하는 항목이 추가로 들어가기 때문에 자세한 내용은 아래 링크 참조 부탁드립니다.

 

MySQL 시작하기: 데이터베이스(Database), 테이블(Table) 만들기

지난 포스팅에서 아두이노(Arduino) 프로젝트를 위한 서버(Sever) 구성 도구로 A.M.P (Apache, MySQL, PHP) 프로그램에 대해 알아보았습니다. 각 프로그램 역할과 설치방법에 대해 자세한 내용은 아래 링크

it-g-house.tistory.com

 


 

참고로 아래 자주 사용하는 MySQL 명령어를 표로 첨부해 두겠습니다.

 

  • MySQL 명령어
기능 명령어 사용예
시작하기  mysql -u 'ID' -p 'DB이름' mysql>mysql -u root -p (DB 최상위단으로 접속시)
DB 검색  show databases; mysql>show databases;
DB 만들기  create database 'DB이름'; mysql>create database Test;
DB 사용  use 'DB이름'; mysql>use Test;
Table 만들기  create table 'table이름'

 mysql>create table tempnhumi(

->temp float not null,

->humi float not null,

->primary key(temp)

->);

Table 검색  show tables; mysql>show tables;
Table 조회  select*from 'table이름'; mysql>select*from tempnhumi;
MySQL 종료 exit mysql>exit

 

 

 

 

 

반응형
반응형

 

 

 

스마트팜(Smart Farm) 구축 중 하나인 자동관수 시스템에 자주 사용되는 솔레노이드 밸브(Solenoid Valve)에 대해 알아보겠습니다.

 

솔레노이드 밸브는 전자밸브 중 하나인데 전기신호를 받아 밸브를 on/off 할 수 있는 밸브를 전자밸브라고 합니다. 다양한 종류의 전자밸브가 있으며 그중에 솔레노이드 밸브는 솔레노이드의 특성을 이용한 밸브장치라고 생각하시면 되며, 솔레노이드 밸브 종류 또한 다양한 종류가 있습니다.

 

오늘 소개해 드릴 솔레노이드 밸브는 자동관수에 일반적으로 가장 많이 사용하는 형태로 아래와 같이 생긴 솔레노이드 밸브입니다.

  

 

위 제품은  관수밸브에서 꽤나 알려진 "버마드(Bermad)"라는 회사의 솔레노이드 밸브로 24VAC에 작동합니다. 솔레노이드 밸브의 구동전압이 다양한 제품들이 시중에서 판매되고 있지만 주로 12VDC 또는 24VAC를 많이 찾아볼 수 있습니다. 따라서 아두이노(Arduino)를 이용하여 솔레노이드 밸브를 작동하려면 12VDC/24VAC 또는 spec.에 맞는 외부전원을 사용해야 합니다. 외부전원을 사용하는 방법은 자동선풍기를 만들었던 방법과 동일하니 아래 링크 참조하시고, 뒤에서 다시 또 설명하도록 하겠습니다.

 

아두이노(Arduino)를 이용한 센서(Sensor) 작동 자동 선풍기 만들기

아두이노(Arduino)를 이용한 홈 IoT (생활응용)에 적용하는 시간으로 무더운 여름 시즌에 맞춰 자동 선풍기를 만들어보겠습니다. 2020년 여름은 예년보다 특히 더 덥다고 하니 똑똑한 자동 선풍기로

it-g-house.tistory.com


1. 솔레노이드 밸브(Solenoid Valve) 원리

 

앞서 설명한데로 솔레노이드 밸브는 솔레노이드 특성을 사용합니다. 다들 아시겠지만 솔레노이드는 긴 원통에 코일을 감아놓은 것입니다. 여기에 전류가 흐르면 자기장이 발생하는 데 그 원리를 이용하여 밸브를 열고 닫고 합니다.

 

동작 방식을 설명하기 앞서 솔레노이드 밸브 구성은 아래와 같이 빨간 점선 부분의 솔레노이드 부분과 파란색 점선 부분의 밸브로 두 부분으로 나눌 수 있습니다.

아래는 위키피디아에 있는 그림인데 동작 방식을 잘 설명해주고 있습니다. 빨간색 부분의 솔레노이드에 해당하는 부분이 E 부분이며 밸브가 나머지라고 생각하시면 됩니다. 위에 그림이 밸브가 닫혀 있을 때, 아래 그림이 밸브가 열렸을 때(솔레노이드에 전기신호를 주었을 때 = 전류가 흐를 때)입니다.

 

A- Input side (물의 주입구)
B- 영어로 Diaphragm라고 되어 있는데 실제로 고무 판막입니다.
C- Pressure chamber
D- Pressure relief passage
E- Electro-Mechanical Solenoid (솔레노이드)
F- Output side (물의 출구)

 

밸브가 닫힌 상태에서 A로 물이 들어오면 B의 고무 판막 중앙에 뚫려있는 작은 구멍을 통해 C에 물이 가득 찹니다. 그래서 F의 출구 쪽 압력과 C의 압력 차이로 인해 밸브가 열리지 않는 상태가 됩니다. 밸브를 열기 위해 E 솔레노이드에 전기신호가 들어가면 E의 검은색으로 막고 있는 부분이 열리고 C의 물이 D쪽 통로로 빠져나가면서 B의 고무 판막이 들리게 되어 밸브가 열리고 A에서 F로 물이 통할 수 있는 길이 열립니다.

 


 

 

 

2. 12VDC 솔레노이드 밸브(Solenoid Valve)

 

위에서 설명을 위해 보여드렸던 "버마드" 제품은 비싸기도 하고 구동전력이 24VAC라서 외부전원으로 어댑터(변압기)도 구하기 쉽지 않습니다. 그래서 가격도 저렴하면서 12VDC에 구동하는 제품을 추천드립니다.

 

12VDC Solenoid Valve

 

3. 솔레노이드 밸브(Solenoid Valve) 아두이노(Arduino) 배선

 

어댑터 및 변압기의 전선작업을 하실 때는 위험하니 꼭 주의하셔서 진행하시기 바랍니다.

 

아두이노(Arduino)를 이용한 솔레노이드 밸브(Solenoid Valve) 사용하는 방법

 

4. Test 프로그램 코딩

 

배선 후 간단하게 테스트할 수 있는 프로그램 코드 아래 첨부하겠습니다. 3초 동안 on 하고 5초 동안 off 되는 동작을 반복하기 때문에 연결해서 정상 동작하는지 확인 가능합니다.

int Relay = 3;
 
void setup(){
  pinMode(Relay,OUTPUT);         // 릴레이를 출력으로 설정
  }
 
void loop(){
    digitalWrite(Relay,HIGH);     // 릴레이 ON
    delay(3000);                  // 3초동안 ON
    
    digitalWrite(Relay,LOW);      // 릴레이 OFF
    delay(5000);                  // 5초동안 OFF
}

 


 

 

 


오늘은 솔레노이드 밸브(Solenoid Valve)에 대해 알아보고, 아두이노(Arduino)를 이용하여 어떻게 사용하는지 보았습니다. 전자밸브는 꼭 관수뿐만 아니라 가스관이나 유체 등의 밸브에도 많이 사용될 수 있기 때문에 알아두시면 프로젝트를 진행할 때 많은 도움이 되실 겁니다.

 

이를 응용하여 스마트팜에 토양수분센서를 이용하여 자동으로 관수하는 시스템을 만들어 보겠습니다. 

 

오늘도 긴 글 읽어 주셔서 감사합니다.

 

 

 

 

반응형
반응형

 

 

 

안녕하세요 IT-G-House입니다. 오랜만에 인사드리네요~ 

그동안 새로운 환경에 적응하고 준비하느라 포스팅도 못하고 프로젝트 진행도 지지부진했습니다.. 혹시 글을 기다리셨다면.. 죄송합니다 ㅠㅠ

 

이번 포스팅은 아래와 같이 댓글로 '1234'님과 '최승예'님의 질문에 공통으로 답을 드릴 수 있을 것 같아 답변이 될만한 글을 준비하였습니다.

 

 


 

아두이노(Arduino)와 esp-01 와이파이 모듈(wifi module)을 이용하여 센서의 측정값을 DB (데이터베이스)에 저장하는 것은 앞선 포스팅을 통해 진행해 보셨을 겁니다. 앞선 단계가 필요하시면 아래 링크 참고 부탁드립니다.

 

아두이노 홈IoT 서버 활용 3: ESP8266(ESP-01) 이용하여 MySQL에 데이터 저장하는 프로그램 코딩

드디어 아두이노(Arduino) 홈IoT 서버 활용 세 번째 포스팅으로 아두이노에서 온습도 센서(Temperature and Humidity sensor)로 측정된 데이터를 Wifi(ESP-01: ESP8266) 모듈을 사용해서 MySQL (DB서버)에 저장하..

it-g-house.tistory.com

 

프로그램이 원활하게 작동하였으면 APMSetup의 MySQL을 통해 데이터도 저장되는 것을 확인할 수 있었고.. 오케이~ 그럼 저장된 데이터를 가공을 하든 출력을 하든 사용해야겠죠? 데이터를 사용하기 위해서 위에서 질문 주셨듯이 데이터를 가져오는 방법 또는 저장하는 방법, 엑셀로 여는 방법을 알아보겠습니다.

 

 

 

 

 


 

 

1. MySQL 콘솔 (Select 문)

 

먼저 MySQL 콘솔을 통해 DB의 table에 저장된 데이터를 불러오거나 파일로 저장하는 방법에 대해 알아보겠습니다. 앞서 진행하였듯이 저는 DB명은 'testdb'이고, table명은 'tempnhumi'입니다. 다들 각자 지정한 이름대로 진행 부탁드리며 MySQL에 대해 추가적인 내용은 아래 링크 참조 부탁드립니다.

 

MySQL 시작하기: 데이터베이스(Database), 테이블(Table) 만들기

지난 포스팅에서 아두이노(Arduino) 프로젝트를 위한 서버(Sever) 구성 도구로 A.M.P (Apache, MySQL, PHP) 프로그램에 대해 알아보았습니다. 각 프로그램 역할과 설치방법에 대해 자세한 내용은 아래 링크

it-g-house.tistory.com

MySQL 콘솔을 실행시킨뒤 아래와 같이 DB를 열고 table을 확인합니다.

 

 

그리고 'tempnhumi' table에 저장되어 있는 데이터를 select문을 통해 확인합니다.

데이터가 그렇게 많지는 않지만 중간에 생략하고 총 61 rows의 데이터가 저장되어 있습니다.

그럼 '*.txt' 파일로 저장해보겠습니다. 아래와 같이 'select*from' 다음에 'into oufile' 명령어를 통해 원하는 파일 경로에 원하는 파일명으로 저장할 수 있습니다. 저는 파일 경로는 D: 드라이브에 있는 'APM_Setup' 폴더에 'testdata.txt' 파일 이름으로 저장을 실행해보겠습니다.

 

MySQL 데이터 내보내기 (data export)

명령이 정상적으로 진행되었으면 OK 메세지가 나오고 아래와 같이 원하는 파일 경로 안에 txt 파일이 생성된 것을 확인할 수 있습니다.

 

생각보다 간단합니다. 파일을 열어보면 MySQL 콘솔에서 확인한 데이터를 볼 수 있고, 그대로 엑셀로 파일을 실행시켜도 데이터를 볼 수 있습니다.

 

MySQL 데이터 txt 파일로 저장
MySQL 데이터 txt, 엑셀 파일로 저장

 

  • MySQL 명령어
기능 명령어 사용예
시작하기  mysql -u 'ID' -p 'DB이름' mysql>mysql -u root -p (DB 최상위단으로 접속시)
DB 검색  show databases; mysql>show databases;
DB 만들기  create database 'DB이름'; mysql>create database Test;
DB 사용  use 'DB이름'; mysql>use Test;
Table 만들기  create table 'table이름'

 mysql>create table tempnhumi(

->temp float not null,

->humi float not null,

->primary key(temp)

->);

Table 검색  show tables; mysql>show tables;
Table 조회  select*from 'table이름'; mysql>select*from tempnhumi;
MySQL 종료 exit mysql>exit

 

 


 

 

 

 

 

2. MySQL 관리 (phpMyAdmin)

 

앞선 포스팅에서 APMSetup으로 좀 더 쉽게 홈 IoT(사물인터넷)을 위한 서버를 구축할 수 있었습니다. APMSetup 설치 및 동작에 대한 내용은 아래 링크 참조 부탁드립니다.

 

Arduino 아두이노 홈 IoT(사물인터넷)을 위한 서버(Sever) 쉽게 만들기: APMSetup 프로그램

아두이노(Arduino)를 사용해서 홈 IoT(사물인터넷)을 구축하는 프로젝트를 위해서는 인터넷을 통한 데이터 전송이 기본적으로 가능해야 합니다. 인터넷을 사용하여 웹을 통해 데이터를 송수신하��

it-g-house.tistory.com

'MySQL 관리' 실행을 통해 phpMyAdmin에 접속하면 아래와 같이 UI를 통해 MySQL의 데이터베이스와 그에 속한 테이블을 카테고리 형태로 확인할 수 있습니다. 여기서 상단 메뉴바에서 '내보내기'를 클릭하면 MySQL 콘솔에서 실행하였듯이 원하는 파일 형태로 데이터를 가져올 수 있습니다.

 

phpMyAdmin 데이터베이스 및 테이블 

상단의 '내보내기'를 클릭하면 아래와 같이 CSV 또는 엑셀, txt, PDF로 까지 데이터를 파일로 저장할 수 있습니다. 원하는 파일 형태를 선택하고 아래에 있는 파일로 저장을 클릭 후 실행을 하면 테이블 이름의 파일이 생성됩니다.

 

phpMyAdmin 데이터 내보내기
phpMyAdmin 데이터 파일로 저장

제가 설정한 테이블명인 tempnhumi이름의 txt 파일이 생성되는 것을 확인할 수 있습니다. 엑셀로 선택하면 '*.xls' 파일, CSV로 선택하면 '*.csv' 형태로 파일이 생성됩니다.

 


 

여기까지 아두이노(Arduino)를 이용하여 측정한 센서 data를 eps-01 와이파이 모듈(wifi module)을 통해 서버 DB에 저장한 데이터를 MySQL을 이용하여 다시 불러오는 방법에 대해 알아보았습니다.

 

'1234'님과 '최승예'님 질문에 답이 되었는지 모르겠네요^^

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금한 부분 또는 보충해주실 내용 있으면 언제든지 댓글로 남겨주세요~

 

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)의 센서들을 알아보는 시간으로 앞선 포스팅에서 아두이노를 이용해 온실(식물) 재배 환경을 측정하는 시스템을 만들 때 사용했던 광센서, 조도센서(Light sensor)에 대해 알아보겠습니다.

 

광센서는 보통 일조량을 측정하거나 빛을 감지할 때 사용하곤 해서 일상생활에서는 쉽게 접하기는 사실 어려울 수도 있을 거 같습니다. 그러나 가시광선 영역 외 사람 눈으로 보기 어려운 자외선 및 적외선 파장대를 사용하는 기기의 빛을 감지하거나 빛을 이용한 통신을 할 때도 광센서를 사용하는 등 알게 모르게 생활 속 다양한 곳에서 다양한 종류의 광센서가 사용되고 있습니다. 

 

지난 포스팅에서 광센서는 재배온실의 환경을 측정하거나 식물에게 필요한 광량을 정밀하게 측정하기 위해 사용하는 것으로 소개드렸습니다. 이처럼 이번 포스팅에서는 태양의 빛의 세기인 조도(Lux)를 측정하는 아두이노용 광센서를 소개해드리고 사용방법에 대해 알아보겠습니다.

 

아두이노(Arduino)를 활용한 온실(식물) 재배 환경 측정

아두이노(Arduino)의 기본적인 몇 가지만 습득하면 정말 다양한 분야에서 활용 가능합니다. Micro-controller에 맞게 주로 외부기기나 센서를 제어하는데 탁월한 능력을 가지고 있기 때문에 홈 IoT나 ��

it-g-house.tistory.com

 


 

1. bh1750 조도센서

 

아두이노용 bh1750 조도센서

 

아두이노에서 사용할 광센서를 검색하면 일반적으로 bh1750 조도센서를 많이 찾아볼 수 있습니다. 그중 위의 사진처럼 CY-30 또는 GY-302 모듈이 가장 많이 검색되는데 모두 Cds 타입의 조도 센서입니다.

 

Cds는 황화 카드뮴(Cadmium Sulfide) 약자로 빛에 반응하는 화합물로 빛을 Cds에 비추었을 때 내부의 전기전도도가 높아지는 광도전 효과(果, photoconductive effect)가 나타납니다. 빛이 많이 들어오면 저항이 작아지고 적게 들어오면 저항이 커지는 성질을 이용하여 빛의 유무를 측정할 수 있는 광도전소자에 많이 이용됩니다. CdS 광도전소자는 가시광선 대역에서 특히 높은 감도를 나타내기 때문에 가시광선 영역대의 빛의 세기(조도, Lux)를 측정하는 광센서로 사용됩니다. 

 

황화카드뮴 조도 센서

 

보통 Cds 조도센서라고 하면 위 사진과 같은 제품을 많이 보셨을 거라 생각되고 이런 단품으로 생각이 됩니다. 그러나 아두이노에서 사용하려면 모듈 제품이 필요하고 실질적으로 실외나 사용 환경에 따라서 모듈의 회로까지 보호할 수 있는 형태면 더욱 좋습니다. 그래서 저는 bh1750fvi 모듈을 사용하고 오늘 포스팅에도 이 모듈을 가지고 진행하려고 합니다.

 

 

아두이노(Arduino) bh1750fvi 조도센서
bh1750fvi 조도센서
아두이노(Arduino) bh1750fvi 조도센서

사진에서 볼 수 있듯이 외부환경으로부터 회로를 보호하고 태양의 직사광선을 확산시켜주는 덮개가 있어 실외에서 사용하기에도 적합합니다. 혹시 아두이노용으로 사용할 수 있는 더 괜찮은 조도센서가 있다면 추천 부탁드립니다 ^^

 

 

 


 

2. 아두이노(Arduino)와 bh1750 조도센서 배선

 

2-1. I2C 통신

 

bh1750 조도센서는 I2C 통신을 합니다. I2C (Inter-Integrated Circuit)은 실제로는 I²C (아이 스퀘어 씨)가 올바른 표기이지만 다들 I2C(아이 투 씨)라고 많이들 표기합니다.

 

I²C 는 풀업 저항이 연결된 직렬 데이터(SDA)와 직렬 클럭(SCL)이라는 두 개의 양 방향 오픈 컬렉터 라인을 사용합니다. 즉, 데이터(SDA)와 데이터의 전송 타이밍(SCL)을 위한 두 개의 선으로 통신을 하는 방식입니다. 

 

I²C는 빠른 속도를 요구하지 않는 간단한 저비용 주변 장치들에 적합하며, 특히 아두이노 같은 Micro-controller에서  단지 2개의 입출력 핀 소프트웨어만을 이용하여 여러 장치들을 제어할 수 있다는 장점이 있습니다. 또한 일반적으로 더 적은 전력을 소모하기 때문에 휴대전화나 이동형 장치들에서 사용하기에 편리합니다 (위키백과).

 

 

아두이노(Arduino) I2C 통신

 

인터넷 상에서 'I2C 통신'이라고 검색을 하면 위와 같은 그림을 많이 볼 수 있습니다. 통신을 위해서 하나의 Master와 하나 이상의 Slave가 구성되는데 Master는 MCU, 아두이노가 되며, Slave는 device, 외부기기 및 센서가 됩니다.

 

Slave는 여러개 동시에 연결을 하여 통신할 수 있는데 이때 Slave 간 구별을 위해 각 Slave마다 개별 주소(address)가 필요합니다. 실제 아두이노 프로그램이나 라이브러리에 포함된 내용을 보게 되면 I2C통신을 하는 센서나 외부기기는 address가 부여되어 있습니다.

 

더 자세한 내용은 I2C통신으로 검색하여 찾아보시면 정말 다양한 정보가 있으니 참고 부탁드리며, 여기에서는 오늘 사용하려는 bh1750 광센서가 I2C 통신을 한다. 그래서 두 개의 선 (SDA, SCL)이 필요한데, SCL (직렬 클럭)이 데이터 전송 타이밍을 맞춰주는 방식으로 통신을 한다. 또한 각 Slave에는 address가 부여하여 구분을 하기 때문에 아두이노의 하나의 SDA, SCL 포트에 여러 개의 센서 및 외부기기를 병렬로 연결하여 사용할 수 있다! 정도만 기억하시면 됩니다.

 

2-1. 아두이노와 조도센서 배선

 

bh1750 센서에는 VCC/SCL/DAT/GND/ADD 로 총 5개의 연결 단자가 있습니다. 각각 아두이노의 적합한 pin에 연결하시면 됩니다. VCC는 5V, GND는 GND, ADD는 연결하지 않거나 GND에 연결하고, 앞서 소개해드린 SCL과 DAT (SDA)는 각각 아날로그 핀 (Analog pin) 5번과 4번에 연결하시면 됩니다. 

 

아두이노(Arduino)와 조도센서(Light sensor) 배선

 

 

 


 

2. 프로그램 코딩

 

먼저 라이브러리를 다운받습니다. 다운로드한 라이브러리는 스케치에서 추가해주시고, 혹시 라이브러리를 처음 사용하시는 분은 아래 링크 참조하셔서 스케치에서 라이브러리를 추가하는 방법을 알아두시면 유용합니다.

 

BH1750-master.zip
0.27MB

 

아두이노(Arduino) 홈 IoT 입문 - 온습도 센서(DHT11) 사용하기

아두이노(Arduino)를 사용한 홈 IoT (사물인터넷)의 가장 기본은 각 종 센서를 동작시키고 센싱 값을 읽는 것이라고 할 수 있습니다. 구상하는 대부분의 프로젝트는 어떤 조건이 만족하면 원하는 명

it-g-house.tistory.com

#include <BH1750.h>

BH1750 lightMeter;

void setup(){

  Serial.begin(9600);
  lightMeter.begin();
  }

void loop() {

  float lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
  }

코드는 라이브러리를 사용하기 때문에 생각보다 간단합니다. 라이브러리에 속해있는 명령어 lightMeter.begin(); 명령어가 setup에서 실행되고, 변수 lux에 lightMeter.reaLightLevel(); 명령어로 측정된 조도 값을 저장한 뒤 Serial.print 명령어로 출력하는 순서입니다. 

 

프로그램 코딩 후 컴파일/업로드를 진행하면 시리얼 모니터로 조도센서에 의해 측정된 조도 값이 1초 간격으로 나타나는 것을 확인할 수 있습니다.


여기까지 아두이노(Arduino) 센서 중 조도센서(Light sensor) bh1750 모듈의 사용 방법을 알아보았습니다. 이와 함께 I2C통신 방식에 대해서도 간단하게 설명드렸습니다. 추후 기회가 생기면 통신방식에 대해서 정리해보는 포스팅을 하도록 하겠습니다.

 

앞서 소개해드렸듯이 조도센서는 일상생활에서 알게모르게 많이 사용되기도 하고 특히 식물 재배 환경에서는 햇빛의 광량을 측정할 수 있기 때문에 아주 유용합니다. 식물에게 일일적산광량 (DLI, Day Light Integral) 매우 중요한 개념이고, 개화에 있어서 광량 및 주기 또한 큰 영향을 미치기 때문에 꼭 측정하는 항목이기도 합니다.

 

광이 식물에 영향을 미치는 부분은 아두이노 블로그에서는 다루지는 않도록 하겠습니다. ㅎㅎ 그럼 오늘도 긴 글 읽어주셔서 감사합니다. 궁금하신 부분이나 다양한 의견 댓글로 남겨주시면 감사하겠습니다.

 

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)를 다루다 보면 다양한 모듈을 사용할 기회가 많은데 그 중에 쉴드(shield) 제품을 사용할 경우가 있습니다. 아두이노 쉴드는 아두이노 보드 본체와 탑처럼 쌓을 수 있게 아두이노의 pin과 결합이 가능한 모듈을 말합니다. 각 쉴드마다 특정 기능을 탑재하고 있어서 마치 아두이노 본체를 하드웨어적으로 업그레이드하는 Flex 한 느낌이 드는 모듈입니다. 

 

아두이노 쉴드 종류는 현재 시장에 나와있는 종류만 300가지가 넘고, Wifi, 이더넷, 블루투스, SD카드, USB, 등 정말 다양한 기능을 탑재한 쉴드제품이 있습니다. 쉴드 하나하나 자세히 다루고 싶긴 하지만 직접 사용해봐야 설명도 가능해서 우선 몇 가지 소개하고 있는 블로그를 아래 링크 걸어두게요 ^^ 참고하세요~

 

[아두이노 기초 강좌] 아두이노 쉴드란? 개념과 종류에 대해

[아두이노 기초 강좌. 아두이노 쉴드의 개념 및 종류] 이번 강좌에서는 아두이노 쉴드(Arduino Shield)에...

blog.naver.com

 

아두이노(Arduino) 쉴드(shield) 제품

아두이노 쉴드를 직접 사용해보시면 아실 듯 하지만 다양한 장점이 있습니다. 우선 단일 모듈은 배선을 해야 해서 전선을 복잡하게 사용해야 하는 경우가 있지만 쉴드는 pin 결합을 통해 배선이 하나 없어도 사용 가능합니다. 또한 아래와 같이 다양한 기능을 탑재한 쉴드를 결합해서 하나의 제품처럼 콤팩트 하게 사용할 수 있는 장점이 있습니다. 좀 멋지죠? ㅎㅎ 하지만 역시나 단점이 많다는 것!! 단점은 각 쉴드에 따라 경중이 있어서 쉽게 말하기 어렵지만.. 치명적인 결함도 있는 경우도 다수 있으니 항상 주의해서 구입해야 합니다.

아두이노 쉴드 사용예

쉴드 제품에 대해서 설명은 이렇게 가볍게 넘어가고 오늘 주제인 가장 관심이 많은 Wifi ESP8266 쉴드 제품 사용 방법에 대해 알아보도록 하겠습니다.

 

 


1. ESP8266 Wifi 쉴드(shield) 모듈

 

ESP8266 Wifi 쉴드 제품은 ESP8266 Wifi 모듈과 같이 ESP8266 칩셋을 사용하기 때문에 Wifi 모듈과 동일한 역할을 합니다. 아두이노에는 일반적으로 기본보드에는 와이파이 칩이 없기 때문에 와이파이 기능이 되려면 Wifi 모듈을 사용하거나 Wifi 쉴드를 사용하면 됩니다. 제품 모양은 아래 사진같이 생겼는데 좌측 중앙에 있는 칩이 Wifi 칩셋이고 그 주위로 Chip의 각 GIPO (General Purpose Input/Output)에 연결할 수 있게 pin이 배치되어 있고 보드 뒷면에는 아두이노의 pin과 결합할 수 있게 pin 다리가 있습니다. 그리고 특이하게 프로그램을 업로드할 때 사용하는 스위치가 있는데 뒤에서 사용방법을 얘기할 때 자세하게 설명드리겠습니다. 

아두이노(Arduino) Wifi 쉴드(shield)

 


 

2. ESP8266 Wifi 쉴드(shield) 모듈 라이브러리(Library) 추가

 

잠깐! ESP8266 Wifi 쉴드를 아두이노 본체에 먼저 결합하시지 마시고요 ㅎㅎ 그전에 라이브러리를 설치하고 스케치를 통해 프로그램을 아두이노를 통해서 쉴드에 업로드해야 합니다. 아마 여기저기 사용방법을 찾아보셨을 건데.. 일부 사용방법에서 펌웨어를 업로드해야 해서 추가로 모듈을 사용해야 한다고 포스팅되어 있는데도 많을 겁니다. 하지만! 매번 하는 이야기이지만 쉽게 복잡한 거 싫어하는 저는 아두이노만으로 충분히 동작하였습니다. 그럼 진행해 볼까요?

 

우선 라이브러리를 다운로드하기 전에 스케치 메뉴에서 File(파일) -> preferences(환경설정)에서 Additional Boards Manager URLs(추가적인 모드 매니저 URLs)에 http://arduino.esp8266.com/stable/package_esp8266com_index.json를 추가해줍니다.

 

아두이노(Arduino) 스케치 환경설정
아두이노(Arduino) 스케치 환경설정에 URLs 추가

그리고 라이브러리 포함하기(Include Library) 메뉴의 라이브러리 관리(Manage Libraries)에서 ESP8266 Community의 esp8266 라이브러리를 설치합니다.

 

아두이노(Arduino) 스케치에서 라이브러리(Library) 추가
esp8266 라이브러리(Library) 설치

esp8266 라이브러리가 정상적으로 설치되고 나면 스케치의 툴(Tool) 메뉴의 보드(Board)에서 NodeMCU 1.0 (ESP-12E Module)을 선택합니다. 

 

아두이노(Arduino) 스케치에서 보드(Board) 선택
아두이노(Arduino) NodeMCU 1.0 (ESP-12E Module) 보드 선택

NodeMCU 1.0 (ESP-12E Module) 보드를 선택하면 툴(Tiool) 메뉴에 보드명이 변경되고 그 아래로 Upload Speed, CPU Frequency 등의 정보가 표시되고 변경할 수 있는 메뉴들이 생성됩니다. 저는 따로 변경 없이 초기 설정되어 있는 그대로 사용하고 있지만 필요하신 분은 필요에 따라 설정을 변경하여 사용하시면 됩니다.  

 

 


 

3. ESP8266 Wifi 쉴드(shield) 모듈 프로그램 업로드

 

ESP8266 Wifi 쉴드와 스케치와 연결이 완료되었으면 테스트 프로그램을 업로드해보겠습니다. 테스트 프로그램은 따로 코딩하지 않고 라이브러리를 설치하면 자동으로 생성되는 예제 프로그램을 사용합니다. 스케치 파일(File) 메뉴에서 예제(Examples) -> ESP8266WebServe에서 'HelloServer' 프로그램을 불러옵니다.

 

그럼 꽤 긴 프로그램이 열리는데 프로그램 내용은 와이파이에 접속하고 연결된 와이파이 망내에서 할당받은 IP주소에 "hellow from esp8266!" 문자를 출력하는 내용입니다. 프로그램을 업로드하고 나서 웹상으로 "hellow from esp8266!"가 출력되었는지 확인이 가능합니다. 프로그램을 모르시더라도 한 줄 한 줄 짚어보면 이해하실 수 있을 겁니다. 여기서 수정할 내용은 프로그램 상단에 나와있는 STASSID와 STAPSK를 접속하려는 Wifi의 SSID(아이디)와 비밀번호로 변경해주시면 됩니다.

 

Wifi 아이디, 비밀번호 입력

프로그램을 업로드하기 전에 몇 가지 단계가 있어 까다롭지만 차근차근 진행하면 원활하게 업로드가 되니 반드시 하나도 빠짐없이 순서를 지켜주세요 ^^ 진행 예시로는 아두이노 우노(UNO) 제품으로 진행되지만 나노나 메가나 비슷하기 때문에 구분 없이 보셔도 됩니다.

 

3.1 아두이노 우노 보드 초기화 

보통 아두이노 보드에 기존 사용하던 프로그램이 업로드되어 있는 경우가 많습니다. 그래서 보드를 초기화하는 작업으로 스케치에서 'BareMinimum' 프로그램을 업로드하면 됩니다. 

 

스케치의 파일(File) 메뉴에서 예제(Examples) -> Basic에서 'BareMinimum' 프로그램을 찾을 수 있습니다.

'BareMinimum' 프로그램은 특별한 게 아니고 처음 스케치를 설치하고 실행하였을 때 보셨던 초기 화면입니다.

 

아두이노(Arduino) 스케치 'BareMinimum'

3.2 EPS8266 쉴드 보드 설정

앞서 잠깐 언급했던 ESP8266 쉴드 보드에 달려있는 스위치를 설정해야 합니다. 보드 설정에 따라 FLASH 모드와 통신 모드로 구분합니다.

 

스위치 DIP 업: FLASH모드 (펌웨어 업로드 및 스케치 업로드 시 사용)

스위치 DIP 다운: 통신 모드 (TX, RX 통신 및 아두이노 시리얼 통신 시 사용)

 

FLASH 모드                       통신모드

 

3.3 아두이노 보드와 ESP8266 와이파이 쉴드 보드 연결

ESP8266 와이파이 쉴드를 아두이노 보드 위에 탑재하기 전에 프로그램 업로드할 때는 다음과 같이 연결해야 합니다. 전원 공급을 위해 5V와 GND를 연결하고 아두이노의 Tx-1, Rx-0과 ESP8266 쉴드의 TXD와 RXD를 연결합니다. 여기서 주의하실 부분은 보통 아두이노의 Tx(전송)는 모듈의 Rx(수신)와 아두이노의 Rx(수신)는 모듈의 Tx(전송)하고 연결하는 게 일반적인데 반대로 Tx는 Tx와 Rx는 Rx와 연결해야 정상적으로 동작합니다. 

 

아두이노(Arduino) ESP8266 와이파이 쉴드(Wifi shield)와 연결 배선

 

3.4 스케치를 통해 프로그램 업로드

배선까지 정상적으로 완료되었으면 아래와 같이 램프에 불이 들어옵니다. 그럼 FLASH 모드 (DIP 스위치를 업)로 설정하고 스케치에서 업로드를 실행합니다. 

 

ESP8266 Wifi shield

그럼 아래와 같이 업로드가 진행되는데 아마 "Connecting......." 메시지에서 진행이 더 이상 안될 겁니다. 계속해서 업로드 실패를 보실 겁니다... 다 끝난 줄 알았는데... 완전 짜증.... 

 

재시도 끝에 해결방법을 찾았는데 방법은 DIP 스위치 오른쪽에 있는 ESP RST 버튼을 타이밍에 맞춰서 눌러줘야 하는 겁니다. 버튼을 누르는 타이밍은 "Connecting........." 메시지를 보고 바로 누르면 됩니다. (좀 복잡한가요..;; 이래서 예전에 한 번 언급했지만 저는 쉴드제품은 절대 구입을 안 합니다... ㅋㅋ)

 

아두이노(Arduino) 스케치 ESP8266 와이파이 쉴드(Wifi shield) 프로그램 업로드

프로그램이 정상적으로 업로드되면 로딩 퍼센트가 100%까지 로딩 메시지를 볼 수 있습니다.

 


 

3. ESP8266 Wifi 쉴드(shield) 모듈 작동 확인

 

프로그램 업로드가 완료되면 정상적인 동작 확인을 위해 시리얼 모니터(Serial Monitor)를 실행합니다. 이때 주의하실 점은 ESP8266Wifi 실드는 통신 모드 (DIP 스위치 다운)으로 설정한 후에 진행해야 합니다. 시리얼 모니터를 실행하고 통신속도를 115200 baud로 설정하면 아래와 같이 "Connected to 접속한 wifi아이디"와 함께 할당받은 IP address를 볼 수 있습니다.

 

아두이노(Arduino) 시리얼 모니터를 통해 ESP8266 wifi 쉴드 접속 IP 확인

저는 IP 192.168.0.101로 할당받았으며, 확인된 IP주소로 웹을 통해 접속하면 짠~ "hello from esp8266!" 메시지를 확인할 수 있습니다 ㅎㅎ

ESP8266 와이파이 쉴드(Wifi shield) 웹으로 접속 후 동작 확인

 

4. ESP8266 Wifi 쉴드(shield) 모듈 아두이노 쉴드에 탑재하기

 

ESP8266 와이파이 쉴드를 아두이노 보드에 탑재하기 전에 또 작업해야 할 일이 있습니다. 아마 쉴드 제작자의 실수로 인한 문제인 듯한데 아두이노의 디지털(Digital) 0번-Rx, 1번-Tx와 만나는 쉴드의 0, 1번 핀이 반대로 제작되어서 그대로 아두이노에 탑재하면 ESP8266 쉴드와 통신이 안 되는 문제가 발생합니다. 그렇기 때문에 아래 사진과 같이 두 핀을 구부려서 접촉되지 않게 한 후에 Tx와 Rx는 전선으로 연결해야 하는 번거로운 점이 있습니다. (여러분.. 쉴드제품 구매하기 전에는 반드시 이런 점들을 확인하셔야 합니다 ㅠㅠ)

  

ESP8266 와이파이 쉴드(Wifi shield) pin 설정

 

 


여기까지 아두이노(Arduino)의 EPS8266 와이파이 쉴드(Wifi shield)를 사용하는 방법에 대해 알아보았습니다. 생각보다 까다롭긴 해도 아두이노 보드 위에 탑재된 모습을 보면 또 멋져 보이기도 하죠 ㅎㅎ

 

아두이노를 사용하시면서 쉴드(Shield)의 Flex 한 모습에 반해 많이들 구매하실 거라 생각하며 저 또한 여러 제품을 구매해서 사용하고 있지만 일반적으로 많이 보급되지 않은 제품은 문제점도 많고 스스로 해결하기 힘들면 아까운 돈을 사용하게 되므로 구매 전에는 반드시 확인하시고 구매하시길 권고하는 바입니다. ^^

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금하신 내용 있으면 언제든지 댓글로 남겨주세요 감사합니다~

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)로 프로젝트를 진행하면서 다수의 저전력 센서나 모듈을 사용하다 보면 입력(input) 또는 출력(output) 단자(Pin)가 생각보다 부족하다는 것을 느낄 때가 많습니다. 아두이노 또는 컨트롤러(controller)를 여러 개 사용해서 해결할 수도 있지만 상황에 따라 비효율적일 수 있고 같은 센서를 여러 개 사용할 경우 딱 Pin 수만 더 많았으면... 하는 생각을 하게 됩니다. 이런 경우 사용하는 모듈이 멀티플렉서(Multiplexer, MUX)입니다.

 

'멀티플렉서(Multiplexer) 또는 MUX는 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치이다.'라고 위키백과에 정의되어 있는데 이런 기능을 이용하여 controller의 단자를 확장해주는 역할을 할 수 있습니다. 

 

오늘은 아두이노에서 쉽게 사용할 수 있는 멀티플렉서를 소개하고 사용방법에 대해 알아보겠습니다.


1. 멀티플렉서(Multiplexer) CD74HC4067 모듈

 

Arduino Multiplexer CD74HC4067

 아두이노에서 많이 사용하는 멀티플렉서 모듈로 CD74HC4067입니다. C0~C15까지 총 16개까지 확장 가능한 모듈로 시중에서 쉽게 구할 수 있고 사용하기에도 어렵지 않은 것 같습니다.

 

Pin 코드를 설명하면 C0~C15는 입력 또는 출력할 센서 또는 모듈을 연결하는 확장 Pin이며, SIG은 받은 신호를 아두이노에 보내는 연결 Pin입니다. 그리고 S0~S3로 아두이노에서 신호를 보내 CD74HC4067 모듈을 컨트롤합니다.

 

간단한 동작 원리는 앞서 위키백과에 나온 멀티플렉서의 정의대로 여러 아날로그 또는 디지털 입력 신호(C0~C15) 중 하나를 선택하여 선택된 입력을 하나의 라인(SIG->아두이노)에 전달하는데.. 즉 C0~C15에 연결된 센서로 입력되는 데이터들을 하나씩 SIG를 통해 아두이노로 보내는 방식입니다. 이런 전달 방식이기 때문에 동시에 센서 데이터가 입력되는 것이 아니고 아주 짧지만 수 m초(설정 가능) 정도 간격으로 C0부터 C15까지 돌아가면서 데이터를 읽어 들입니다.

 

처음 보시면 이해가 안 가실 수도 있는데 사실 이해 안 하셔도 전혀 문제없습니다 ㅎㅎ 아마 뒤에서 코드를 보시면 이해하기 더 쉬울 거라 생각됩니다. ^^

 

 

 


 

2. 멀티플렉서 CD74HC4067 배선

 

앞서 CD74HC4067 Pin 코드 설명에서 보았듯이 C0~C15는 사용할 센서를 연결하고, S0~S1을 아두이노에서 신호를 보낼 디지털 Pin 8, 9, 10, 11과 차례로 연결합니다(프로그램에서 조정 가능). 저는 아날로그 센서를 사용하여 시험할 예정이라 SIG pin은 아날로그 Pin 0과 연결하는데, 아마 사용하시는 센서에 따라 디지털 신호를 받으시려면 디지털 Pin과 연결하면 됩니다. 마지막으로 VCC와 GND는 각각 아두이노의 5V, GND에 연결합니다. 

 

아두이노(Arduino) 멀티플렉서(multiplexer, MUX) CD74HC4067 모듈 연결

 


 

▼ 같은 제품 구매하시려면 아래 링크!! ▼

 

CD74HC4067 16채널 멀티플렉서 아날로그/디지털 MUX <아두이노 멀티플렉서> : 스토어플랜트

[스토어플랜트] 안녕하세요 스토어플랜트입니다.

smartstore.naver.com

 

 

3. 멀티플렉서 CD74HC4067 프로그램 코딩

 

스케치로 아래와 같이 프로그램을 코딩하여 아두이노에 업로드합니다.

//Mux control pins
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;

//Mux in “SIG” pin
int SIG_pin = 0;

void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);

Serial.begin(9600);
}

void loop(){

//Loop through and read all 16 values
//Reports back Value at channel 6 is: 346
for(int i = 0; i < 16; i ++){ 
  Serial.print("Value at channel "); 
  Serial.print(i); Serial.print(": "); 
  Serial.println(readMux(i)); 
  delay(1000); 
  } 
  }
  
  int readMux(int channel)  { 
  int controlPin[] = {s0, s1, s2, s3}; 
  int muxChannel[16][4]={ {0,0,0,0},  
  {1,0,0,0}, //channel 1 
  {0,1,0,0}, //channel 2 
  {1,1,0,0}, //channel 3 
  {0,0,1,0}, //channel 4 
  {1,0,1,0}, //channel 5 
  {0,1,1,0}, //channel 6 
  {1,1,1,0}, //channel 7 
  {0,0,0,1}, //channel 8 
  {1,0,0,1}, //channel 9 
  {0,1,0,1}, //channel 10 
  {1,1,0,1}, //channel 11 
  {0,0,1,1}, //channel 12 
  {1,0,1,1}, //channel 13 
  {0,1,1,1}, //channel 14 
  {1,1,1,1} //channel 15 
  }; 
  //loop through the 4 sig 
  for(int i = 0; i < 4; i ++){ 
    digitalWrite(controlPin[i], muxChannel[channel][i]); 
    } 
    //read the value at the SIG pin 
    int val = analogRead(SIG_pin); //return the value 
    return val; 
    } 

 

 

 

프로그램을 간단하게 설명하면 CD74HC4067를 컨트롤하는 S0~S3과 연결된 Pin 8, 9, 10, 11을 pinMode 명령어로 Output 상태로 만듭니다. 그리고 digitalWrite 명령어로 초기 값을 Low로 설정하는데 이때 Low =0, High = 1을 의미합니다.

 

아두이노에서 S0, S1, S2, S3에 신호를 Low(0)과 High(1)로 주면서 Channel 번호를 2진법에 의해 설정됩니다. 예를 들어 Channel 0 = {0, 0, 0, 0} : 2진법으로 0이 됩니다.

Channel 1 = {1, 0, 0, 0} : 2^0에 해당하는 자리에 High(1)로 신호를 주어 1을 표시합니다.

Channel 2 = {0, 1, 0, 0} : 2^1에 해당하는 자리에 High(1)로 신호를 주어 2를 표시합니다.

Channel 3 = {1, 1, 0, 0} : 2^0과 2^1에 해당하는 자리에 High(1)씩 신호를 주어 총 합 3이 되어 3을 표시합니다.

....

Channel 15 = {1, 1, 1, 1} : 1+2+4+8 = 15 표시

 

이런 식으로 각 채널을 표시하고, 이 채널을 For 반복 구문을 통해 하나씩 읽는 로직입니다. 생각보다 가.. 간단하죠?;;;

 

 pinMode 명령어나, digitalWrite 명령어가 자주 나오는데 아두이노에서는 많이 사용하는 명령어라 혹시 처음 접하시면 아래 링크 참조하시면 도움될 듯합니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙니다. 그렇기 때문..

it-g-house.tistory.com

 


 

4. 데이터 확인

 

아두이노와 멀티플렉서 및 사용한 센서들을 연결한 후 스케치를 통해 프로그램을 업로드합니다. 멀티플렉서에 연결된 센서들은 따로 전원이 들어가야 하는 점 확인하세요^^

프로그램 업로드 후 시리얼모니터(Serial Monitor)를 실행하면 아래와 같이 channel 0부터 channel 15까지 연결된 센서의 데이터를 출력합니다. 프로그램에서 delay(1000)로 1초 간격으로 channel 값이 순차적으로 표시되는데 delay를 조절하면 더 짧은 간격으로도 표시 가능합니다.

 

아두이노(Arduino) 멀티플렉서(Multiplexer, MUX) CD74HC4067 모듈 사용하기: 데이터 출력

 

 

 


여기까지 아두이노(Arduino)의 입출력 단자(Input&output pin)를 확장할 수 있는 멀티플렉서(Multiplexer, MUX) CD74HC4067 모듈에 대해 알아보고 사용방법을 알아보았습니다.

 

멀티플렉서를 사용하여 센서의 입력 데이터뿐만 아니라 릴레이(Relay) 같은 스위치나 외부기기를 여러 개 사용할 때도 활용 가능합니다. 기회가 되면 릴레이 16개를 확장해서 활용하는 예시를 포스팅하도록 하겠습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금하신 내용 있으면 언제든지 댓글로 남겨주세요^^

 

 

 

 

반응형
반응형

 

 

아두이노(Arduino)를 이용한 IoT (사물인터넷) 프로젝트에서 데이터 로거(Data logger)를 만드는 일은 흥미로운 작업입니다. 데이터 로거란 단순하게 보면 데이터 기록기, 저장기? 정도로 생각하시면 되는데 최근 데이터 로거의 기능이 많아져서 간단한 전산, 컨트롤러(controller) 및 그래프(graph) 출력 기능까지 되는 제품도 많이 나오고 있습니다. 아두이노를 활용하여 인터넷을 사용하지 않고 컴퓨터에만 연결하여 충분히 데이터 로거를 만들 수 있습니다.

 

데이터 로거

오늘은 아두이노로 간단한 데이터 로거를 만들어보겠습니다. 빠르신 분은 눈치채셨겠지만 이전에 소개했던 내용들을 조금만 응용하는 과정이 되겠지만 ㅎㅎ 끝까지 봐주시면 힘이 되겠습니다 ^^


1. 시간 표시하기

 

대부분의 계측기가 언제 어떤 상태였는지를 센서로 측정하여 데이터로 기록하는 게 목적(시간에 따른 데이터화)이기 때문에 데이터 로거의 기본은 시간이 표시되어야 합니다. 아두이노 자체적으로 시간을 표시해 주진 않기 때문에 시간을 표시하려면 몇 가지 작업이 필요합니다. 복잡한 거 싫어하고 오픈소스를 사용하는 걸 좋아하는 저는 오늘도 라이브러리를 이용하여 시간을 표시하겠습니다. ^^ 우선 아래 라이브러리를 다운로드하여 스케치(sketch)에 추가해 줍니다.

swRTC.zip
0.03MB

#include <swRTC.h>
swRTC rtc;

void setup() {
  rtc.stopRTC();            //정지
  rtc.setDate(17, 3, 2020); //일, 월, 년
  rtc.setTime(0, 0, 0);  //시, 분, 초
  rtc.startRTC();           //시작
  Serial.begin(9600);
}

void loop() {
  Serial.print(rtc.getHours(), DEC);
  Serial.print(":");
  Serial.print(rtc.getMinutes(), DEC);
  Serial.print(":");
  Serial.print(rtc.getSeconds(), DEC);
  Serial.print("\t"); 

  Serial.print(rtc.getYear(), DEC);
  Serial.print("/");
  Serial.print(rtc.getMonth(), DEC);
  Serial.print("/");
  Serial.println(rtc.getDay(), DEC);
  delay(1000);
}

코드블럭과 같이 프로그램을 코딩하고 스케치를 통해서 아두이노에 업로드합니다. 그리고 일, 월, 년, 시, 분, 초에 현재 시간 또는 원하는 시간을 세팅해줍니다. 저는 글을 포스팅하고 있는 현재 2020년 3월 17일 0시 0분 0초라고 설정하였습니다. 업로드 후 시리얼 모니터(Serial Monitor)를 실행하면 아래와 같이 시간이 표시됩니다.

 

아두이노(Arduino) 현재시간 표시하기

 

지금 보여드린 방법이 가장 간단하지만 아두이노에 자체적인 전원이 없으므로 전원이 꺼졌을 때는 시간이 가지 않습니다. 처음 현재 시간으로 설정하더라도 전원이 잠깐이라도 끊기는 순간 처음 설정한 시간으로 다시 리셋됩니다. 그래서 현재 시간이 반드시 필요하신 분들은 시계 역할을 하는 모듈을 연결하거나 인터넷을 연결하여 전원이 들어올 때 현재시간을 받는 방법을 채택해야 합니다.

 

 

 


 

2. 시간과 데이터 표시하기 

 

센서에서 측정하는 데이터를 시간과 동시에 표시하면 되는 과정이기 때문에 간단합니다. 이런 예시에 항상 사용하는 온습도 센서를 사용하여 프로그램을 코딩하겠습니다. 아두이노 및 온습도 센서 사용이 처음이신 분은 아래 링크 참조 부탁드립니다. 

 

Arduino 아두이노 온도 습도 센서(Temperature and Humidity sensor) 종류 및 사용법

온습도 센서(Temperature and Humidity sensor)는 환경 측정에서 중요하면서도 기본적인 센서로 많이 사용됩니다. 중요하지만 비교적 흔하게 구할 수 있는 센서라 시중에 다양한 종류의 제품이 있고 기능적으로는..

it-g-house.tistory.com

온습도 센서 프로그램 코드와 앞서 알아보았던 시간표시 프로그램과 함께 코드를 합쳐서 아래와 같이 프로그램을 재구성합니다.

#include <swRTC.h>
#include <dht.h>

swRTC rtc;
dht DHT; 
#define DHT22_PIN 2 
float hum; //Stores humidity value 
float temp; //Stores temperature value

void setup() {
  Serial.begin(9600); 
  rtc.stopRTC(); //정지 
  rtc.setDate(17, 3, 2020); //일, 월, 년 
  rtc.setTime(0, 0, 0); //시, 분, 초 
  rtc.startRTC(); //시작 

  }

void loop() { 
  DHT.read22(DHT22_PIN); 
  hum = DHT.humidity; 
  temp = DHT.temperature;

  Serial.print(rtc.getHours(), DEC); 
  Serial.print(":"); 
  Serial.print(rtc.getMinutes(), DEC); 
  Serial.print(":"); 
  Serial.print(rtc.getSeconds(), DEC); 
  Serial.print("\t"); 
  Serial.print(rtc.getYear(), DEC); 
  Serial.print("/"); 
  Serial.print(rtc.getMonth(), DEC); 
  Serial.print("/"); 
  Serial.print(rtc.getDay(), DEC); 
  Serial.print("\t"); 
  Serial.print("Humidity: "); 
  Serial.print(hum); 
  Serial.print(" %, Temp: "); 
  Serial.print(temp); 
  Serial.println(" Celsius"); 
  
  delay(1000);
  }

그 후 프로그램을 아두이노에 업로드하면 아래와 같이 시리얼 모니터에서 볼 수 있습니다. 데이터 스캔 간격을 delay(1000)으로 설정해서 1초 간격으로 표시되지만 delay명령어를 통해 조절 가능합니다. (일반적으로 평상시 실내 온습도는 1초 또는 1분 정도의 시간 동안 차이가 크지 않죠 ^^ 사용하시는 환경에 맞게 스캔 간격을 조절하시면 됩니다.)  

 

아두이노(Arduino) 시간에 따른 온습도 표시

 

 

 


 

3. 엑셀을 통해 시각화 하기 

 

단순 데이터만 보려면 시리얼 모니터로 충분하지만 엑셀을 이용하여 실시간으로 측정되는 데이터를 시각화(그래프)해서 좀 더 편하게 데이터를 모니터링하려 합니다. 앞서 시간과 날짜를 나타낼 수 있게 라이브러리를 도입한  방법보다 엑셀의 기능과 병합하여 좀 더 간단한 방법으로 만들 수 있습니다. 우선 아래와 같이 프로그램을 코딩한 뒤 아두이노에 업로드합니다.

#include <dht.h>

dht DHT; 
#define DHT22_PIN 2 
float hum; //Stores humidity value 
float temp; //Stores temperature value
float today = 43907; //2020-03-17
float timer; //00:00:00
float second = 0.0000115740741; //1/(24*60*60)


void setup() {
  Serial.begin(9600);
  Serial.println("CLEARDATA"); 
  Serial.println("LABEL,Date,Time,Temp,Humi");
  }

void loop() { 
  DHT.read22(DHT22_PIN); 
  hum = DHT.humidity; 
  temp = DHT.temperature;
  today = floor(today + timer);
  timer = timer + second;
  
  Serial.print("DATA,"); 
  Serial.print(today); 
  Serial.print(",");
  Serial.print(timer,10); 
  Serial.print(",");  
  Serial.print(temp); 
  Serial.print(","); 
  Serial.println(hum); 
  
  delay(1000);
  }

아두이노와 엑셀을 연동하기 위해 앞선 포스팅에서 소개한 프로그램으로 'PLX-DAQ'을 사용합니다. 아래 파일을 다운로드하여서 설치하시고, 사용방법은 아래 링크 참조 부탁드립니다.

PLX-DAQ-v2.11.zip
0.49MB

 

 

Arduino 아두이노 시리얼 통신 데이터를 엑셀에 저장/연동하기

지난 포스팅까지 아두이노(Arduino)를 사용하여 온습도 센서(Temperature and Humidity sensor)를 동작하고 측정된 데이터를 출력하고 저장하는 방법까지 알아보았습니다. 앞서 알아본 저장방법은 *.txt 파일로 저..

it-g-house.tistory.com

앞서 라이브러리를 사용한 방법은 2020/03/17 00:00:00 Temperature, Humidity 이런 포맷으로 출력하기 위한 거면 엑셀에서는 셀 서식 기능에 숫자를 '날짜', '시간'으로 표식이 되기 때문에 숫자만으로 프로그램이 구성됩니다. 아마 엑셀을 조금 사용해보셨으면 셀 서식 -> 표시 형식에서 설정 방법을 인지하고 계실 겁니다.

그래서 위 코드처럼 오늘 날짜(2020-03-17)에 해당하는 43907로 today를 값을 설정하고 하루가 지날 때마다 1씩 더해져서 날짜를 표시할 수 있습니다. 같은 방법으로 초기 시간 00:00:00에서 1초에 해당하는 값 즉, 1/(24시간*60분*60초) = 0.0000115740741... 을 1초 delay 마다 더하는 방법입니다. 컨셉을 이해하셨으면 상황에 맞게 시간이나 간격을 조절하셔서 사용하실 수 있을 거라 생각됩니다. 아두이노에 프로그램을 업로드 후 'PLX-DAQ' 프로그램을 사용하여 엑셀에 연동하면 아래와 같이 데이터가 들어옵니다.

 

아두이노(Arduino)로 Datalogger 만들기

아직 '표시 형식'을 변경하기 전이라 숫자로 표시되지만 셀 설정에서 표시 형식을 변경하면 원하는 포맷으로 날짜와 시간을 표시할 수 있습니다. 그리고 원하는 그래프로 시각화할 때 데이터의 셀 영역을 column 전체로 설정해놓으면 실시간으로 데이터가 들어올 때마다 그래프가 그려집니다.

 

아두이노(Arduino)로 Datalogger 만들기 엑셀에서 표시형식 변경
아두이노(Arduino)로 Datalogger 만들기 엑셀로 실시간 그래프 설정


오늘은 아두이노(Arduino)로 간단하게 데이터로거(Datalogger)를 만들어 보았습니다. 좀 단순하게 만드는 방법이다 보니 현 시간을 바로 반영할 수 없다는 점... 같은 게 허점이 될 수 있지만 가볍게 사용하기에는 파워풀한 방법입니다.

 

좀 더 정확한 시간 반영을 위해서는 인터넷을 사용하여 웹상에서 현재시간 정보를 받아 사용해야 합니다. 좀 복잡하죠 ^^ 인터넷이 안 되는 환경이나 현재 시간이 꼭 중요하지 않다면 쉽게 사용할 수 있을 듯합니다. 

 

기회가 되면 esp-01 (ESP8266) 모듈을 사용해서 구글 현재시간을 받아 정확한 시간을 표시하는 방법에 대해서 포스팅해보겠습니다. 긴 글 읽어주셔서 감사합니다.

 

 

 

 

반응형
반응형

 

 

 

2021.01.03 수정 업데이트

 

토양수분센서(soil moisture sensor)도 아두이노(Arduino)에서 많이 다루는 센서 중 하나입니다. 앞서 소개한 온습도 센서(Temperature and humidity sensor)와 초음파 센서(Ultrasounds sensor)처럼 외부환경을 데이터화하여 외부기기를 동작하기 좋습니다. 예를 들어 식물이나 농작물이 자라는 화분이나 토양의 수분함량을 데이터화해서 물을 자동으로 주거나 펌프를 작동하는 등에 적용할 수 있습니다.

 

최근 많은 사람들이 가정에서 취미나 인테리어로 식물을 기르는 일에 관심이 많아지고 있고, 플랜테리어(planterior) 혹은 그린테리어(greenterior)라고 식물(plant)과 인테리어(interior)의 합성어로 신조어가 생길 정도로 점점 트렌드로 자리 잡고 있죠 ^^ 이런 트렌드에 아두이노 IoT(사물인터넷)를 적용해보면 토양수분센서를 사용하여 화분의 토양에 물이 어느 정도 있는지 확인해서 식물관리에 조금 더 도움이 될 수 있을 듯하네요 ㅎㅎ

 

오늘은 토양수분센서에 대해 알아보고 아두이노에서 사용방법을 알아보겠습니다.

 

Arduino 아두이노 온도 습도 센서(Temperature and Humidity sensor) 종류 및 사용법

온습도 센서(Temperature and Humidity sensor)는 환경 측정에서 중요하면서도 기본적인 센서로 많이 사용됩니다. 중요하지만 비교적 흔하게 구할 수 있는 센서라 시중에 다양한 종류의 제품이 있고 기능적으로는..

it-g-house.tistory.com

 

Arduino 아두이노 초음파(거리) 센서(ultrasounds sensor) 사용방법

앞서 포스팅에서 온습도 센서(Temperature and Humidity sensor)만 가지고 아두이노의 기본적인 동작법이나 파일 저장법, 그래프 그리기, 엑셀(Excel)과 연동하는 방법들을 알아보았습니다. 그리고 인터넷(Interne..

it-g-house.tistory.com


1. 토양수분센서 (soil moisture sensor)

 

토양수분센서 종류는 다양하게 있는데 싸게는 몇 천원부터 비싸게는 몇 십만 원까지 합니다. 아두이노에서 가볍게 사용할 수 있는 저렴한 제품들을 온라인상에서 쉽게 구할 수 있지만 정밀한 측정에는 어려움이 있습니다. 실험용이나 좀 더 정밀한 측정에 사용되는 센서 또는 토양의 온도나 전기전도도(EC, Electrical Conductance)도 같이 측정할 수 있는 TEROS 시리즈의 센서도 있지만 가격이 상당합니다.

 

아두이노 토양수분센서

 

아두이노 토양수분센서
토양수분센서 TEROS

대표적인 토양수분센서의 원리는 토양의 수분량에 따라 변하는 유전율(dielectric permittivity)을 이용하여 전기신호(voltage)로 출력합니다. 측정 방법에는 FDR (Frequency Domain Reflectometry), TDR (Time Domain Reflectometry) 등이 있는데 최근에 많이 사용되는 방법이 FDR 방법입니다. 자세한 내용은 제가 어설프게 설명하는거 보다 검색해보시면 쉽게 이해하실 수 있을 겁니다 ^^

 

2. 토양수분센서 배선

 

오늘 예시에서 사용할 토양수분센서는 모델명 SEN0114로 온라인에서 쉽게 구입할 수 있습니다. 여러 모델 중에서 SEN0114를 선택한 이유는 다양하게 점검해 본 결과 저렴한 가격에 비해 그나마 사용하기 유용하기 때문입니다. (뒤에서 추가 설명하겠습니다.)

 

아두이노(Arduino) 토양수분센서(soil moisture sensor) SEN0114 배선

 

 

그림과 같이 토양수분센서의 VCC (빨강) 선은 아두이노의 3.3 또는 5V, GND (검정) 선은 GND pin에 맞게 연결하고, Output (파랑) 선은 아날로그(Analog) pin 0번에 (프로그램에서 수정 가능) 연결합니다. 예시로 사용하는 토양수분센서는 아날로그로 출력 값을 송출하기 때문에 아날로그 pin과 연결하지만 센서에 따라 디지털 신호도 있으므로 사용하시는 센서의 사양을 잘 확인하고 사용하면 되겠습니다.

 

3. 토양수분센서 프로그램 코딩

 

void setup(){ 
  Serial.begin(57600); 
  }
 
void loop(){ 
 Serial.print("Moisture Sensor Value: "); 
 Serial.println(analogRead(A0)); 
 delay(1000); 
 }

아날로그로 출력되는 토양수분센서라 스케치 프로그램가 아주 간단합니다. 아날로그 pin A0로 들어오는 신호만 읽어주면 끝입니다. 

 

4. 토양수분센서 값과 Calibration

 

모든 센서는 정확한 측정을 위하여 calibration을 해야합니다. 보정한다는 뜻 정도로 생각할 수 있는데 저울 같은 경우 0점을 잡는 것과 같은 것입니다. 이처럼 calibration은 0점 보정 외에 원하는 값으로 변환하는 작업도 포함합니다. 예를 들어 토양수분센서로 토양의 수분 함량 (%) 값을 알고 싶은데 출력 값은 voltage 값인 경우 변환하는 수식(calibration equation)을 사용하여 수분 함량 (%) 값으로 표시할 수 있습니다.

 

앞서 오늘 소개드린 SEN0114 센서가 그나마 사용할만 했던 것도 이런 calibration 과정에서 판별됩니다. 아래 온라인에서 저렴하게 구입할 수 있는 센서 3가지를 비교 평가한 자료입니다. 

 

아두이노(Arduino) 토양수분센서(soil moisture sensor)의 calibration 비교 실험

x축이 출력 값 voltage (mV)이고, y축이 그에 상응하는 용적수분함량(VWC, Volumetric Water Content) (%)입니다. 오른쪽 두 센서보다 왼쪽의 SEN0114 그래프가 추세선이 제일 깔끔하고 (R squ 값 참조) 실제 측정 값을 모두 포함하고 있기 때문에 센서 선택의 근거가 될 수 있습니다. 용적수분함량은 (물의 양/토양의 부피) * 100 (%)으로 간단하게 이해하셔도 됩니다.

 

5. 아두이노 시리얼 모니터(Serial Monitor)에 토양수분센서 측정값 출력

 

센서를 아두이노와 연결하고 스케치를 통해 프로그램을 업로드한 후 시리얼 모니터를 출력하면 아래와 같이 "Moisture Sensor Value: " 뒤에 mV 단위로 voltage 값이 나올 겁니다.

 

아두이노(Arduino)에서 토양수분센서(soil moisture sensor)의 출력 값 

센서가 아무것도 센싱하지 않을 때는 0으로 값을 읽다가 물에 넣으면 값이 상승합니다. SEN0114 센서 사양에 따르면 

 

Value range: 0 ~ 300: dry soil

                 300 ~ 700: humid soil

                 700 ~ 950: in water

이라고 제시되어 있습니다. 음... 위에 calibration 자료와 비슷한가요? ^^

 

참고로 토양의 성질이나 공극으로 인해 물을 함유할 수 있는 정도가 달라지기 때문에 토양별로 calibration equation이 조금씩 달라진다고 알고 계시면 유용합니다.

 

 


여기까지 아두이노(Arduino)에서 사용하는 토양수분센서(soil moisture sensor)에 대해 알아보고 사용방법을 설명하였습니다. 다음 포스팅에는 토양수분센서를 사용하여 토양의 물이 일정 범위 아래로 떨어지면 (식물에 공급할 물이 부족하면) 물을 자동으로 주는 작은 프로젝트를 진행해 보도록 하겠습니다.

 

오늘도 긴글 읽어주셔서 감사합니다. 궁금한 점은 댓글로 언제든지 남겨주세요~ 감사합니다 ^^

 

▼ 토양수분센서 구매하시려면 아래 링크!! ▼

 

아두이노 토양수분센서/Arduino Soil moisture sensor/지습센서/아날로그 센서 : 스토어플랜트

[스토어플랜트] 안녕하세요 스토어플랜트입니다.

smartstore.naver.com

 

 

반응형
반응형

 

 

 

아두이노(Arduino)는 컨트롤러(controller)인 만큼 외부기기나 센서의 전원을 on/off 하는 경우가 많이 있습니다. 보통 이런 기능은 스위치(switch)가 하죠 ^^ 전자기기에서 전기신호를 받아서 스위치 역할을 하는 부품을 릴레이(Relay: 전자계전기)라고 합니다. 지난 포스팅에서 초음파 센서를 사용하여 사람이 접근하면 외부기기에 전원을 공급하는 방법에서도 릴레이 모듈을 사용할 수 있습니다. 오늘은 아두이노에서 주로 사용되는 릴레이 모듈을 알아보고 사용하는 방법을 알아보겠습니다. 

 

Arduino 아두이노 초음파(거리) 센서(ultrasounds sensor) 활용: 사람 인식하는 전자기기 작동 시스템

아두이노(Arduino)의 센서들을 알아보는 시간으로 지난 포스팅에서 초음파 센서 사용법과 이를 이용하여 거리를 측정하는 방법을 알아보았습니다. 오늘은 이를 활용하여 사람이 다가가면 전자기기가 자동으로 작동..

it-g-house.tistory.com


 

1. 릴레이(Relay: 전자계전기) 

 

우선 릴레이는 스위치입니다. 아두이노에서 제공하는 전력만으로 구동할 수 없는 외부기기를 컨트롤하고 싶을 때 외부 전원을 릴레이와 연결하여 (설정)조건이 만족할 때 아두이노에서 신호를 보내 컨트롤하기 위해 주로 사용합니다.

 

저희가 알고 있는 일반적인 스위치는 버튼(button)형이나 텀블러(tumbler)형 같이 손으로 수동으로 on/off 해야 하지만 릴레이는 전기신호로 자동으로 on/off 할 수 있습니다. 보통 릴레이는 '전자석(철심에 코일을 감은 것)'의 원리로 움직이는데 전자석은 전류가 흐르면 자기장이 형성되는 자석입니다. 그래서 릴레이 모듈에 전기신호가 들어오면, 즉 전류가 흐르면 자기가 형성되어 그림과 같이 자석이 열려있는 스위치를 끌어당겨 on 시켜줍니다.  

 

전자석을 이용한 릴레이(Relay: 전자계전기) 간단한 원리

릴레이 종류는 동작 방식이나 허용 전력 용량에 따라 여러 종류가 있습니다. 더 자세한 내용이 궁금하면 아래 '메카솔루션' 링크 참조 부탁드립니다.

 

릴레이란? (릴레이 구조, 릴레이 원리, 릴레이 종류, 릴레이 작동원리, 릴레이 스위치, 아두이노 릴레이, 무접점 릴레이, 릴레이 접점)

    [ 전자부품 릴레이(Relay) 에 대해 알아보기 ] 출처 [메카솔루션]     [ 릴레이란? 릴레이의 작동 원리 ] 릴레이는 쉽게 말해 ON OFF가 있는 일종의 스위치 입니다.   하지만 우리가 일반적으로 알고있는 불을 켜고 끌때 누르는 스위치와는 동작원리가 다릅니다. 우리가 일반적으로 접하는 스위치는 수동으로 ON OFF 해주지만 릴레이는 자동…

makeshare.org

 


 

2. 릴레이 모듈

 

1채널 릴레이(Relay) 모듈
4채널 릴레이(Relay) 모듈

 

위 사진은 1채널 릴레이 모듈이며, 채널 수에 따라 아래 4 채널 모듈과 같이 릴레이 수가 늘어납니다. 모듈에서 파란색 네모 박스가 실제적인 릴레이인데 상단에 JQC3F-5VDC-C (5VDC: 5V 직류 구동)라고 모델명이 있고 아래에 10A 250VAC (교류전압), 10A 30VDC (직류전압) 표시는 최대 입력전압(input voltage)을 나타내고, 하단에 10A 125VAC, 10A, 28VDC는 기본 입력 전압을 나타냅니다. 이에 맞게 허용 전력을 사용하면 됩니다.

 

제가 구입한건 중국산이라 한자 (常开, 公共端 ,闭)로 적혀있는데 보통 NC (Normally Close), COM, NO (Normally Open) 이렇게 표시되어 있습니다.

 

NC (Normally Close, ): 평상시에 닫혀있다는 뜻으로, 릴레이에 전류가 흐르면 Open 되므로 평상시에 전원을 on 상태로 유지하다가 신호를 주어 off 할 때 사용합니다.

NO (Normally Open, 常开): 반대로 평상시에 열려있다는 뜻으로, 릴레이에 전류가 흐르면 Close 되므로 평상시에 전원을 off 상태로 유지하다가 신호를 주어 on 할 때 사용합니다.

COM (Common port, 公共)는 공통 단자로 전력 또는 외부기기의 한쪽 선을 항상 연결해야 하는 단자입니다.

 

VCC, GND, IN는 릴레이(전자석)을 구동하기 위한 전력 단자 (VCC, GND)와 신호를 주기 위한 IN (input) 단자입니다.

 

 

 

 


 

3. 릴레이 배선

 

아두이노(Arduino) 릴레이(Relay) 모듈 배선 방법

그림과 같이 아두이노의 5V 단자와 릴레이 모듈의 VCC와 연결하고, GND는 GND pin에 연결합니다. 그리고 아두이노 프로그램에서 설정한 디지털 PIN 번호(저는 3번과 연결하겠습니다.)와 IN 단자와 연결합니다. 다음으로 전원을 컨트롤하고 싶은 전자기기와 외부 전력을 연결하고 한쪽 단자 중간에 릴레이(스위치)를 장착한다고 생각하시면 됩니다. 

* 주의: 만약 전선작업을 직접 하시면 전원 반드시 뽑아서 안전 주의하세요!!!

 

4. 아두이노 프로그램

int Relay = 3;
 
void setup(){
  pinMode(Relay,OUTPUT);         // 릴레이를 출력으로 설정
  }
 
void loop(){
    if(조건)
    {
    digitalWrite(Relay,HIGH);     // 조건 만족하면 1채널 릴레이 ON
    delay(500);
    }
    else                               
    {
    digitalWrite(Relay,LOW);      // 아니면 1채널 릴레이 OFF
    delay(500);
    }
}

 

 

릴레이를 동작하기 위한 아두이노 스케치 프로그램 코드입니다. 저는 아두이노의 디지털 pin 3번에 릴레이 IN 단자와 연결하였기 때문에 int Relay = 3; 으로 설정하고 pinMode를 OUTPUT으로 설정하였습니다. void loop()에서 if 조건문을 사용해서 조건에 맞으면 릴레이에 HIGH 신호를 줘서 릴레이 스위치를 on 하고, 조건이 맞지 않으면 off 되는 간단한 프로그램 코드입니다. 다양한 센서를 사용해서 if()에 원하는 설정 조건을 직접 작성하시면 됩니다. 

 

아두이노 명령어가 익숙하지 않으신 분은 pinMode 및 if문에 대한 명령어는 아래 링크 참조하시면 됩니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙니다. 그렇기 때문..

it-g-house.tistory.com


 여기까지 아두이노(Arduino)에서 자주 사용하는 릴레이(Relay: 전자계전기)에 대해 알아보았습니다. 릴레이는 앞으로 추진하는 IoT 프로젝트에 반드시 필요한 모듈 중 하나라 사용방법을 알아두면 좋습니다. 다음 포스팅에는 릴레이에 외부기기와 전원을 연결하여 동작하는 작은 프로젝트를 하나 진행해 보겠습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금한 부분은 댓글로 언제든지 남겨주세요 ^^

 

 

 

반응형
반응형

드디어 아두이노(Arduino) 홈IoT 서버 활용 세 번째 포스팅으로 아두이노에서 온습도 센서(Temperature and Humidity sensor)로 측정된 데이터를 Wifi(ESP-01: ESP8266) 모듈을 사용해서 MySQL (DB서버)에 저장하는 내용이 되겠습니다. 다들 아시겠만 서버를 만든 궁극적인 목적은 아두이노를 이용하여 홈IoT를 구축하는 것이고 그 과정 중 가장 핵심이 될 것 같습니다.

 

A.P.M (Apache, PMP, MySQL)으로 만든 서버를 홈IoT를 위해 사용하려면 센서에서 측정된 데이터가 DB서버에 수집이 되어야 하고 이는 무선 통신으로 이루어져야 IoT 구축의 의미가 있습니다. 그래서 우선 가장 기본적인 온습도 센서를 활용하여 Wifi를 통해 데이터를 송신하여 MySQL의 데이터테이블(Datatable)에 저장되는 방법에 대해 알아보겠습니다.

 

우선 온습도 센서 사용법과 Wifi를 사용하기 위해 ESP-01(ESP8266) 모듈 사용법을 알고 있어야 하고, APM 서버가 구축이 사전에 진행되어야 합니다. 혹시 준비가 필요하시면 내용이 정리된 포스팅을 링크 걸어두니 참조 하셔서 3가지 모두 준비된 상태에서 계속 진행 부탁드립니다.

 

아두이노(Arduino) 홈 IoT 입문 - 온습도 센서(DHT11) 사용하기

아두이노(Arduino)를 사용한 홈 IoT (사물인터넷)의 가장 기본은 각 종 센서를 동작시키고 센싱 값을 읽는 것이라고 할 수 있습니다. 구상하는 대부분의 프로젝트는 어떤 조건이 만족하면 원하는 명령들을 수행하..

it-g-house.tistory.com

 

아두이노(Arduino) 인터넷 하기 - Wifi (ESP-01: ESP8266)연결하는 방법

아두이노(Arduino)로 인터넷을 연결하는 방법은 랜선(LAN)을 연결하는 방법인 이더넷 모듈(Ethernet module)을 사용하는 방법, Wifi를 연결하는 방법, 3G/LTE를 연결하는 방법이 있습니다. 지난 포스팅까지 주로..

it-g-house.tistory.com

 

Arduino 아두이노 홈 IoT(사물인터넷)을 위한 서버(Sever) 쉽게 만들기: APMSetup 프로그램

아두이노(Arduino)를 사용해서 홈 IoT(사물인터넷)을 구축하는 프로젝트를 위해서는 인터넷을 통한 데이터 전송이 기본적으로 가능해야 합니다. 인터넷을 사용하여 웹을 통해 데이터를 송수신하려면 웹서버(Web se..

it-g-house.tistory.com


준비가 다 되셨으면 진행해보겠습니다. 다음 순서로 진행하겠습니다.

1. ESP-01 모듈 및 온습도 센서 연결

2. 프로그램 코딩

3. 데이터 전송 확인

 

1. ESP-01 모듈 및 온습도 센서 연결

 

ESP-01(ESP8266) 모듈은 기존대로 연결하고 온습도 센서(DHT11) 모듈의 Data output pin을 아두이노 pin 4번과 연결합니다. 그리고 DHT11은 구동 전압이 3~5V로 3.3V로 구동 가능하기 때문에 VCC pin과 GND pin은 아두이노의 3.3V Pin 및 GND pin에 각각 연결합니다. 미리 양해 부탁드렸지만 각각 모듈의 자세한 내용과 사용방법은 앞서 링크드린 포스팅에서 참조 부탁드립니다. 

 

아두이노(Arduino)와 Wifi (ESP-01: ESP8266)모듈 및 온습도 센서(DHT11) 모듈 연결하기

 


 

 

2. 프로그램 코딩

 

스케치를 통해 프로그램을 코딩합니다. 프로그램 로직(logic) 순서는 void setup전에 Wifi 접속 명령어 'connetWifi()'데이터를 전송하는 명령어 'httpclient()', 온습도 센서(DHT11)를 설정합니다. 그리고 void setup에서 AT command를 통해 Wifi에 접속하고 void loop에서 온습도를 측정한 후 AT command를 통해 사전에 만들어둔 process.php 프로그램을 통해 MySQL에 온습도 데이터를 저장하는 순서로 이루어집니다.

 

프로그램 코딩 내용은 바로 앞 포스팅인 "아두이노 홈IoT 서버 활용2"에서 사용했던 명령어들과 방법을 기반으로 하고 있습니다. 코딩이 어려우신 분들은 반드시 앞의 포스팅을 참조 부탁드립니다.

 

#include <dht.h>
#include <SoftwareSerial.h>

dht DHT;

#define DHT11_PIN 4

float humi;  //Stores humidity value
float temp; //Stores temperature value

SoftwareSerial mySerial(2,3); //RX,TX

String ssid = "WIFI 아이디";
String PASSWORD = "비밀번호";
String host = "내 컴퓨터 아이피";

void connectWifi(){

  String join ="AT+CWJAP=\""+ssid+"\",\""+PASSWORD+"\"";
      
  Serial.println("Connect Wifi...");
  mySerial.println(join);
  delay(10000);
  if(mySerial.find("OK"))
  {
    Serial.print("WIFI connect\n");
  }else
  {
   Serial.println("connect timeout\n");
  }
  delay(1000);
  }
  
void httpclient(String char_input){
  delay(100);
  Serial.println("connect TCP...");
  mySerial.println("AT+CIPSTART=\"TCP\",\""+host+"\",8787");
  delay(500);
  if(Serial.find("ERROR")) return;
  
  Serial.println("Send data...");
  String url=char_input;
  String cmd="GET /process.php?temp="+url+" HTTP/1.0\r\n\r\n";
  mySerial.print("AT+CIPSEND=");
  mySerial.println(cmd.length());
  Serial.print("AT+CIPSEND=");
  Serial.println(cmd.length());
  if(mySerial.find(">"))
  {
    Serial.print(">");
  }else
  {
    mySerial.println("AT+CIPCLOSE");
    Serial.println("connect timeout");
    delay(1000);
    return;
  }
  delay(500);
       
  mySerial.println(cmd);
  Serial.println(cmd);
  delay(100);
  if(Serial.find("ERROR")) return;
  mySerial.println("AT+CIPCLOSE");
  delay(100);
  }  


void setup() {

  Serial.begin(9600);
  mySerial.begin(9600);

  connectWifi();
  delay(500);
}

void loop() {
  DHT.read11(DHT11_PIN);
  
  humi = DHT.humidity;
  temp = DHT.temperature; 
  String str_output = String(temp)+"&humi="+String(humi);
  delay(1000);
  httpclient(str_output);
  delay(1000);
   
   //Serial.find("+IPD");
   while (mySerial.available())
   {
    char response = mySerial.read();
    Serial.write(response);
    if(response=='\r') Serial.print('\n');
    }
   Serial.println("\n==================================\n");
   delay(2000);
}

 


 

 

3. 데이터 전송 확인

 

우선 시리얼모니터(Serial Monitor)를 실행하여 프로그램이 정상적으로 동작하는지 확인합니다. 프로그램 코딩 시 출력 명령을 내린 문자가 아래와 같이 나오는지 확인할 수 있습니다. 프로그램 코딩에서도 알 수 있었듯이 AT Command로 먼저 Wifi를 접속 후 AT_CIPSEND 명령어를 통해 이전 포스팅에서 실행했던 거와 동일하게 process.php 프로그램을 통해 temp=30.5, humi=41.1로 전송하는 것을 확인할 수 있습니다. 그리고 반복으로 다음 측정 데이터인 temp=31.2, humi=40.1을 또 전송합니다. 이렇게 측정하고 송신하기를 계속 반복하여 동작합니다.

 

 

그럼 MySQL에 접속하여 데이터가 저장되었는지 확인해 보겠습니다. 앞서 APMSetup으로 웹서버와 DB서버 구성할 때 만들었던 데이터베이스 tempnhumi 안의 테이블에 측정된 데이터가 지속적으로 저장되는 것을 확인할 수 있습니다. 저는 여러 번 시험하느라 앞에 많은 데이터가 있는데요 ㅎㅎ 시리얼 모니터에서 확인한 온습도 데이터 temp=30.5, humi=41.1와 다음 측정 데이터 temp=31.2, humi=40.1가 네모 박스로 표시한 곳에 순서대로 저장된 것을 확인할 수 있습니다. 와~~ 우!! 놀랍죠? (제가 너무 놀라워서 ㅎㅎ) 그 뒤로도 계속 데이터가 들어오고 있습니다.

 


여기까지 아두이노(Arduino) 홈IoT 서버 활용으로 온습도 센서(Temperature and Humidity sensor)로 측정한 데이터를 DB서버 MySQL에 전송하여 저장하는 방법을 알아보았습니다.

 

이제 모든 것이 준비되었습니다 ㅎㅎ 이때까지 알아본 것들을 활용하여 집안의 온도나 습도에 따라 선풍기나 가습기를 동작되게 하거나 집의 밝기에 따라 전등을 켜거나 이런 식으로 집안의 각종 환경 상태에 따라 가전기기들을 동작할 수 있는 홈IoT를 구축할 수 있습니다. 이 모든 것은 사용하는 센서들이 달라지거나 프로그램들이 조금 더 스마트하게 복잡할 뿐 기본은 앞서 알아본 내용들을 기반으로 합니다.

 

다음 포스팅부터는 조금 더 단계를 넘어가서 활용하는 내용을 다뤄보겠습니다. 오늘도 긴 글 읽어 주셔서 감사합니다 ^^ 

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)의 센서들을 알아보는 시간으로 지난 포스팅에서 초음파 센서 사용법과 이를 이용하여 거리를 측정하는 방법을 알아보았습니다. 오늘은 이를 활용하여 사람이 다가가면 전자기기가 자동으로 작동하는 시스템을 만들어 보겠습니다. 원리는 간단한데 앞서 알아본 초음파 센서를 이용하여 설정 거리보다 가까이 사람이 있으면 전자기기에 전력을 공급하는 방식입니다. 초음파 센서로 거리를 측정하는 프로그램은 아래 링크 참조 부탁드리며, 그 이후부터 진행하도록 하겠습니다.

 

Arduino 아두이노 초음파(거리) 센서(ultrasounds sensor) 사용방법

앞서 포스팅에서 온습도 센서(Temperature and Humidity sensor)만 가지고 아두이노의 기본적인 동작법이나 파일 저장법, 그래프 그리기, 엑셀(Excel)과 연동하는 방법들을 알아보았습니다. 그리고 인터넷(Interne..

it-g-house.tistory.com


준비물은 아래와 같습니다.

 - 아두이노 UNO R3 보드

 - 초음파 센서(HC-SR04)

 - DC-DC 승압형 5V 600mA USB 모듈

 - 5V USB 구동 전자기기

 

새롭게 소개드릴 제품은 DC-DC 승압형 5V 600mA USB 모듈입니다. 저도 처음 사용해보는 건데요.. 아두이노의 출력 전압을 이용하여 5V USB 충전이나 기타 USB 구동 전자기기들을 사용할 수 있게 연결해주는 모듈입니다. 아마 온라인상에서 쉽게 구할 수 있을 거예요 ㅎㅎ

DC-DC 습압형 5V 600mA USB 모듈

 

 

아두이노의 디지털 pin을 통한 출력 전압은 5V이니까 이번 프로젝트뿐만 아니라도 5V USB 구동 전자기기들을 이용할 때 유용하게 사용할 수 있을 듯합니다. ㅎㅎ 그리고 이번 프로젝트를 위해 USB 5V 전력으로 구동되는 전자기기를 사용해야 하는데 특별히 소유하신 전자기기가 없으면 휴대폰 USB 충전기로도 충분히 테스트해 볼 수 있습니다. 

 


 

1. 아두이노와 초음파 센서, USB 모듈 연결하기

 

먼저 아두이노와 초음파 센서를 연결하고 전자기기의 USB 전원이 연결될 DC-DC 승압형 5V 600mA USB 모듈을 아두이노와 연결합니다. USB 모듈의 '+' 단자와 아두이노의 디지털핀(Digital Pin) 13번과 연결하고(프로그램에서 수정가능하니 꼭 13번이 아니어도 됩니다), '-' 단자는 그 옆의 GND에 연결합니다. 연결된 USB 모듈에 앞서 준비한 5V USB 구동 전자기기를 이용해서 사람이 다가가면 자동으로 켜지는 시스템을 만들 수 있습니다.

 

아두이노(Arduino), 초음파 센서(HC-SR04) 센서를 활용한 자동 선풍기 만들기 배선

 

 

 

 

2. 프로그램 코딩 

 

스케치에서 pinMode, digitalWrite, if 명령어를 사용해 앞서 링크드린 초음파 센서로 거리를 측정하는 프로그램과 조합하여 프로그램 코딩을 합니다. pinMode와 digitalWrite, if 명령어에 대해서는 아두이노 프로그램 코딩 초급 부분에서 정리하였으니 참고 부탁드립니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙니다. 그렇기 때문..

it-g-house.tistory.com

int echo = 8;
int trig = 12;
int power = 13;

void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(power, OUTPUT);
}

void loop() {
  float cycletime;
  float distance;
  
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);
  
  cycletime = pulseIn(echo, HIGH); 
  
  distance = ((340 * cycletime) / 10000) / 2;  

  Serial.print("Distance:");
  Serial.print(distance);
  Serial.println("cm");
  
  if(distance < 50){ 
    digitalWrite (power, HIGH); 
    } 
    else{ 
    digitalWrite (power, LOW); 
    }
  delay(500);
}

 

초음파 센서의 'echo'와 'trig' pin 설정을 각각 8, 12번으로 설정하고, 5V Output power pin을 13번으로 설정하였습니다. 그리고 초음파 센서로 거리를 측정한 후 거리가 50cm 이하가 되면 13번 pin에 연결되어 있는 USB 모듈을 통해 5V가 출력됩니다. 그러면 전자기기가 켜지겠죠? 아닐 경우는 출력 power가 없으니 자동으로 전원이 꺼지도록 'if 명령문'을 사용하였습니다.

 

3. 자동 동작 시스템 확인

 

저는 USB 5V 구동 소형 LED 전등으로 동작 테스트를 해보았습니다. 시리얼 모니터(Serial Monitor)에서 거리를 확인하면 아래와 같이 출력되고, 초음파 센서에 가까이 다가가면(사람과 센서 사이 거리가 50cm 이하 일 때) LED 전등이 자동으로 동작합니다. 와우~ ㅎㅎ

 

아두이노 초음파 센서를 이용한 자동으로 작동하는 전자기기 시스템 만들기

 

초음파 센서의 위치에 따라 거리는 적절히 조절하여 편하게 적용하시면 됩니다. ^^ 앞서 언급하였지만 USB 휴대폰 충전기로도 충분히 테스트 진행 가능합니다. 주의하실 부분은 아두이노의 디지털 Pin의 Output 최대 출력 전류가 40mA이기 때문에 소비전력이 높은 전자기기들은 따로 외부 전력이 필요합니다.


여기까지 아두이노(Arduino)의 초음파 센서(HC-SR04)를 활용해서 사람을 인식하여 자동으로 전자기기를 작동하는 시스템을 구성해 보았습니다. 너무 간단하게 구성해서 허접해 보일 수도 있지만 대부분 이런 방법의 응용으로 수가 많아지고 조금 더 디테일하게 복잡해질 뿐입니다. 쉽게 생각하셔도 괜찮습니다 ^^

 

오늘도 긴 글 읽어주셔서 감사합니다.

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)를 이용한 홈 IoT를 구축하는 프로젝트의 진행과정으로 웹서버(Web sever)와 데이터베이스(Database, DB)를 구성하였습니다. 이어서 지난 포스팅에서는 웹브라우저를 통해서 DB서버(MySQL)의 데이터베이스에 (온습도) 데이터도 저장해보았습니다. 오늘은 웹브라우저를 통하지 않고 ESP-01(ESP8266) Wifi 모듈을 사용해서 온라인으로 DB서버에 데이터를 보내는 방법을 알아보겠습니다. 지난 포스팅과 이어지기 때문에 "Arduino 아두이노 홈IoT 서버 활용: 온습도 데이터 DB서버(MySQL)에 저장하기" (아래 링크)를 참조하셔서 process.php 파일을 생성 후 진행하셔야 합니다.

 

Arduino 아두이노 홈IoT 서버 활용: 온습도 데이터 DB서버(MySQL)에 저장하기

아두이노(Arduino)를 이용한 홈 IoT(사물인터넷) 구축을 위해 웹서버(Web sever) 및 데이터베이스(Database, DB) 서버를 구성하는 방법을 지난 포스팅을 통해 알아보았습니다. 웹서버를 구성하는 도구로 AMP (Apac..

it-g-house.tistory.com


진행 전에 아래 항목을 확인 부탁드립니다.

 

- APMSetup 프로그램 설치를 통한 AMP(Apache, MySQL, PHP) 서버 구성

- APMSetup 설치 하위 폴더 htdocs 폴더에 process.php 파일 확인 (PHP 프로그램: 아래 코드블록 참조)

- MySQL 데이터베이스 이름: testdb, 테이블 이름: tempnhumi, 각 칼럼(column) 이름: temp, humi

- esp-01 AT command 정상 동작 확인 및 Wifi 접속 (아래 링크 내용 참조)

 

아두이노(Arduino) 인터넷 하기 - Wifi (ESP-01)연결하는 방법

아두이노(Arduino)로 인터넷을 연결하는 방법은 랜선(LAN)을 연결하는 방법인 이더넷 모듈(Ethernet module)을 사용하는 방법, Wifi를 연결하는 방법, 3G/LTE를 연결하는 방법이 있습니다. 지난 포스팅까지 주로..

it-g-house.tistory.com

<?php
header("Content-Type: text/html;charset=UTF-8");
 
$host = 'localhost';
$user = 'root';
$pw = 'apmsetup';
$dbName = 'testdb';
$mysqli = new mysqli($host, $user, $pw, $dbName);
 
    if($mysqli){
	echo "MySQL successfully connected!<br/>";

	$temp = $_GET['temp'];
	$humi = $_GET['humi'];
	
	echo "<br/>Temperature = $temp";
	echo ", ";
	echo "Humidity = $humi<br/>";
	
	$query = "INSERT INTO tempnhumi (temp, humi) VALUES ('$temp','$humi')";
	mysqli_query($mysqli,$query);

	echo "</br>success!!";
    }

    else{
	echo "MySQL could not be connected";
    }

mysqli_close($mysqli);
?>

 

 

 

모든 진행은 앞의 확인사항이 모두 정상적으로 구성 되었다는 가정하에 아래 순서와 같이 진행하도록 하겠습니다.  

 

1. 포트포워딩 설정: 외부 통신(Wifi)을 통한 웹서버(Apache: 내 컴퓨터)로 접속이기 때문에 접근할 수 있는 포트 설정

2. 아두이노의 시리얼 모니터(Serial Monitor)를 통한 웹서버 접속

3. AT command를 통한 data 송신

4. MySQL 접속 후 데이터 확인

 

1. 포트포워딩 설정

 

아두이노의 ESP-01 모듈을 사용하여 Wifi를 통해 웹서버에 접속하기 때문에 외부 통신으로 내 컴퓨터의 웹서버에 접근하는 상황입니다. 이런 경우 접근할 수 있는 포트를 설정해야 하는데 이것을 '포트포워딩'이라고 합니다. 조금 더 상세히 설명드리고 싶으나.. 어설픈 설명보다 포트포워딩에 관해 정리를 잘하신 분의 포스팅을 아래 링크하니 참조 부탁드립니다.

 

공유기 포트포워딩 설정하기

지난번 포스팅을 통해 OctoPrint 세팅 과정을 공유드렸습니다.​지난번 포스팅에서는 OctoPrint 가 설...

blog.naver.com

그럼 포트포워딩의 이해가 어느 정도 됐으면 설정을 진행해 보겠습니다. 저희 집 공유기는 "tp-link"입니다. 웹브라우저 주소창에 '192.168.0.1'을 입력하면 공유기 설정이 가능하고 왼편 메뉴에서 '포워딩'을 클릭하면 아래와 같이 가상 서버를 설정할 수 있습니다. 여기서 서비스 포트에 사용하고 싶은 포트번호를 설정하면 됩니다. (4~5자리로 설정하시면 됩니다.) 저는 8787로 지정하였고, IP주소는 서버가 구성되어 있는 컴퓨터의 공유기 내부 IP주소를 입력하시면 됩니다.

 

아두이노(Arduino) ESP-01 모듈을 사용한 웹서버 접속: 포트포워딩 설정

 

다른 공유기를 사용하셔도 대부분 설정방법이 비슷하기 때문에 쉽게 설정하실 수 있습니다. 좀 더 자세한 이해를 위해서는 위에 링크를 참조 부탁드립니다. 정상적으로 포트포워딩이 설정되었으면 웹브라우저 주소창에서 "내 아이피:설정 포트"를 접속하면 이전에 APMSetup 설치 후 http://localhost로 확인한 화면과 동일한 화면이 출력됩니다. 이제 외부에서 내 아이피로 접속이 허용되는 상황입니다. (내 아이피 확인은 네이버에서 '내 아이피 주소 확인'이라고 검색하면 바로 나옵니다. ^^)

 

포트포워딩 후 웹서버 접속 확인

 

2. 아두이노 시리얼모니터(Serial Monitor)를 통한 웹서버 접속

 

다음은 시리얼 모니터를 통해 열려있는 포트로 웹서버에 접속을 진행하겠습니다. 우선 시리얼 모니터를 통해 와이파이까지 접속합니다. 그리고 AT+CIPSTART="TCP, "내 아이피 주소", 설정 포트(8787) 명령어로 웹서버에 접속합니다. 실행화면은 아래 그림 참조 부탁드립니다.

 

아두이노(Arduino) ESP8266(ESP-01) 모듈로 시리얼 모니터를 통한 웹서버 접속

 

"CONNECT OK"라고 응답이 나오면 정상적으로 접속에 성공하였습니다.

 

3. AT command를 통한 data 송신

 

이제 process.php 프로그램을 통해 GET 방식으로 temp와 humi 값을 전송해 보겠습니다. 웹서버로 메시지를 보내기 위해 AT+CIPSEND 명령어를 사용합니다. 명령어 실행 후 GET /process.php?temp=20.7&humi=55.6 HTTP/1.0이라고 메시지를 보낼 겁니다. (temp=20.7, humi=55.6이라고 임의로 정하였습니다.) AT+CIPSEND 명령어는 보내고자 하는 text 수에 맞게 숫자를 설정해야 합니다. 그래서 명령어를 AT+CIPSEND=49라고 실행해야 합니다. 그럼 "OK" 응답이 나오면서 '>' 이렇게 메시지를 입력할 수 있습니다. 그럼 GET /process.php?temp=20.7&humi=55.6 HTTP/1.0 입력하고 엔터(Enter)를 한번 더 눌러줍니다.

 

아두이노(Arduino) ESP8266(ESP-01) 모듈로 시리얼 모니터를 통한 DB서버(MySQL)에 데이터 전송

 

메시지가 전송되면 "SEND OK" 응답은 무조건 나옵니다. 이 응답 말고 그 아래 '+IPD, 243:HTTP/1.1 200OK'란 응답이 와야 데이터가 정상적으로 전송된 겁니다. 그리고 맨 아래 줄의 응답 메시지를 보면 웹브라우저로 데이터를 DB서버로 보낼 때 (process.php 프로그램에서 설정된) 나왔던 응답 메시지와 동일하게 나온 것을 확인할 수 있습니다. ㅎㅎ

 

4. MySQL 접속 후 데이터 확인

 

그럼 MySQL에 접속하여 데이터가 저장되었는지 확인해 보겠습니다. 앞서 APMSetup으로 웹서버와 DB서버 구성할 때 만들었던 데이터베이스 tempnhumi 안의 테이블에 temp=20.7, humi=55.6이라고 저장된 것을 확인할 수 있습니다. 저는 여러 번 시험하느라 앞에 많은 데이터가 있는데요 ㅎㅎ 마지막에 데이터가 들어온 것을 확인하였습니다.

 

아두이노 ESP-01(ESP8266)을 사용해서 DB서버(MySQL)에 전송한 데이터 확인

 

 

 


여기까지 아두이노(Arduino)로 ESP-01(ESP8266) Wifi 모듈을 사용해서 온라인으로 DB서버(MySQL)에 데이터를 보내는 방법을 알아보았습니다.

 

이제 모든 준비가 되었습니다. 여기까지 모두 정상적으로 진행하셨으면 온습도 센서(Temperature and Humidity sensor)에서 측정된 데이터를 ESP-01(ESP8266) Wifi 모듈을 통해서 온라인으로 DB서버(MySQL)에 저장하는 방법을 다 배웠습니다. 

 

이 모든 것을 아두이노에서 실행이 되도록 스케치로 프로그램 코딩만 잘하면 됩니다. ㅎㅎ 다음 포스팅에는 코딩방법에 대해 알아보도록 하겠습니다.

 

긴 글 읽어주셔서 감사합니다. 궁금하신 부분이나 추가로 필요한 내용 있으면 언제든지 댓글로 남겨주세요 ^^ 

 

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)를 이용한 홈 IoT(사물인터넷) 구축을 위해 웹서버(Web sever) 및 데이터베이스(Database, DB) 서버를 구성하는 방법을 지난 포스팅을 통해 알아보았습니다. 웹서버를 구성하는 도구로 AMP (Apache, MYSQL, PHP)를 알아보았고 이를 각각 사용하는 방법 또는 한번에 통합으로 설치하는 APMSetup 프로그램도 확인하였습니다. 이제 서버구성을 어느 정도 완료하였으니 아두이노의 센서에서 측정된 데이터가 DB서버에 저장되는지 확인이 필요합니다.

 

그래서 오늘은 웹브라우저를 통해서 데이터를 DB서버인 MySQL에 송신하여 저장하는 방법을 알아보고 정상적으로 MySQL에서 수신하여 저장되는지 확인해 보겠습니다. 진행에 앞서 서버 구성이 되지 않으신 분은 아래 서버 구성 방법에 대한 링크 참조 부탁드립니다. ^^

 

Arduino 아두이노 홈 IoT(사물인터넷)을 위한 서버(Sever) 쉽게 만들기: APMSetup 프로그램

아두이노(Arduino)를 사용해서 홈 IoT(사물인터넷)을 구축하는 프로젝트를 위해서는 인터넷을 통한 데이터 전송이 기본적으로 가능해야 합니다. 인터넷을 사용하여 웹을 통해 데이터를 송수신하려면 웹서버(Web se..

it-g-house.tistory.com


이번 포스팅은 아두이노의 센서에서 측정된 데이터를 DB서버인 MySQL로 데이터를 저장하기 위한 사전단계로 웹브라우저를 이용하여 입력된 데이터가 MySQL로 정상적으로 송수신되는지 확인하는 작업입니다. 따라서 아두이노는 잠깐 옆으로 밀어놓고 PHP 프로그램 코딩을 먼저 진행해 보겠습니다.

 

작업순서는 우선 PHP로 웹브라우저에 온도(Temperature)와 습도(Humidity)를 입력할 수 있는 창을 만드는 프로그램 코딩을 먼저하고, 임의의 숫자 데이터를 입력하면 아파치(Apache)로 구성된 웹서버를 통해 MySQL로 만들어진 DB서버의 테이블(Table)로 보내서 저장하는 프로그램을 역시 PHP로 만들 겁니다. 두 개의 PHP 파일을 만드는 거죠 ㅎㅎ

 

1. 데이터 입력 웹브라우저 프로그램

 

먼저 데이터를 입력할 수 있는 웹브라우저를 먼저 만들어보겠습니다. 메모장 또는 코딩 프로그램을 열어서 아래 코드블럭과 같이 코딩하고 파일명을 임의로 정하시고 *.php 확장자로 저장합니다. 메모장으로 작성하실 때는 지난번에도 설명드렸듯이 저장할 때 파일 형식을 모든 파일로, 인코딩은 UTF-8로 설정하고 저장하셔야 확장자가 php로 됩니다. 

 

아두이노 APM 웹서버 활용: 데이터 입력 웹브라우저 만들기

 

저는 파일명을 'input.php'로 저장하였습니다. 저장경로는 D:\APM_Setup\htdocs로 저는 APMSetup 프로그램을 통해 D 드라이버에 설치하였고 그 하위 폴더인 htdocs 폴더에 input.php 파일이 있어야 정상적으로 작동합니다.

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
    </head>   
    <body>
        <form action="process.php" method="get">
            <p>Temperature : <input type="text" name="temp"></p>
            <p>Humidity : <input type="text" name="humi"></p>
            <p><input type="submit" /></p>            
        </form>
    </body>
</html>

 

프로그램을 간단히 설명하면 전체 구성은 html(웹브라우저 프로그래밍 언어)로 작성되었고, 중간에 <body></body> 사이의 내용이 주된 내용입니다. 한 줄씩 아주 단순하게 보면

  • //<form action="process.php" method="get"> : 데이터 입력하고 제출되면 "process.php" 프로그램이 실행되고,  "get" 방식을 사용한다는 뜻입니다. 
  • //Temperature : <input type="text" name="temp">: Temperature를 "text" 형태로 입력할 수 있는 창을 만들고 입력된 데이터는 "temp"변수에 저장한다는 뜻입니다.
  • //Humidity : <input type="text" name="humi">: Humidity를 "text" 형태로 입력할 수 있는 창을 만들고 입력된 데이터는 "humi" 변수에 저장한다는 뜻입니다.
  • //<input type="submit"/> 입력된 데이터를 제출하는 버튼을 만듭니다.

저장 완료 후에 웹브라우저(저는 크롬을 사용)에서 http://localhost/input.php라고 입력하면 아래와 같이 Temperature와 Humidify를 입력할 수 있는 창이 만들어진 것을 확인할 수 있습니다.

 

아두이노 APM 웹서버 활용: 데이터 입력 웹브라우저 확인

 

 

 

2. 입력된 데이터를 MySQL에 저장하는 프로그램

 

앞서 만든 데이터 입력 웹브라우저에 Temperature와 Humidity를 입력하고 제출 버튼을 누르면 그 데이터를 MySQL로 저장하는 프로그램을 아래 코드 블록과 같이 코딩합니다. 역시 메모장이나 코딩 프로그램으로 작성하고 확장자를 php 파일로 저장하여 APMSetup 설치 폴더의 하위 폴더 htdocs 폴더에 저장합니다.

 

저장 파일명은 반드시 process.php로 하셔야 하는데 앞서 input.php 코딩 시 process.php를 다른 이름으로 임으로 정하셨으면 그 바꿔주신 파일명과 동일해야 합니다.

 

<?php
header("Content-Type: text/html;charset=UTF-8");
 
$host = 'localhost';
$user = 'root';
$pw = 'apmsetup';
$dbName = 'testdb';
$mysqli = new mysqli($host, $user, $pw, $dbName);
 
    if($mysqli){
	echo "MySQL successfully connected!<br/>";

	$temp = $_GET['temp'];
	$humi = $_GET['humi'];
	
	echo "<br/>Temperature = $temp";
	echo ", ";
	echo "Humidity = $humi<br/>";
	
	$query = "INSERT INTO tempnhumi (temp, humi) VALUES ('$temp','$humi')";
	mysqli_query($mysqli,$query);

	echo "</br>success!!";
    }

    else{
	echo "MySQL could not be connected";
    }

mysqli_close($mysqli);
?>

 

코딩하실 때 반드시 확인하실 점은 코드 첫 문단이 MySQL접속과 관련됩니다. 여기서 MySQL의 user명과 비밀번호, 데이터베이스 이름을 각자 설정한 대로 수정하셔서 사용하셔야 합니다. 

 

MySQL 접속 아이디, 비밀번호, 데이터베이스 이름 입력

그리고 $query 설정에서 데이터를 저장할 테이블 이름도 본인이 만든 테이블명과 각 칼럼(Column) 이름을 맞춰야 합니다. 아래 코드에서 저는 테이블 명이 'tempnhumi'이고 각 칼럼의 이름이 'temp', 'humi'라고 만들었기 때문에 아래와 같이 작성하였습니다. 코드 설명은 직관적으로 tempnhumi 테이블의 temp, humi 칼럼에 변수(VALUES) 값 $temp, $humi를 각각 저장해라("INSERT INTO")라는 내용이 됩니다.

 

PHP코드: MySQL의 데이터베이스 테이블에 데이터 저장하기

 

 

 

파일을 저장 후 다시 웹브라우저에서  http://localhost/input.php을 주소창으로 실행 후 Temperature와 Humidity에 실수 범위의 숫자를 입력하고 (저는 임의 온도는 25.1, 습도는 55.3으로 입력하였습니다.) 제출을 누르면 "MySQL successfully connected!"라고 MySQL 접속을 성공적으로 하고, Temperature와 Humidity 값을 제가 입력한 값인 25.1, 55.3으로 각각 확인할 수 있습니다. 그리고 최종적으로 "success!!"라고 출력되면 정상적으로 진행이 완료된 것입니다.

 

웹브라우저를 통한 DB서버(MySQL)에 데이터 보내기 
웹브라우저를 통한 DB서버(MySQL)에 데이터 저장히기

 

주소창을 보면 'localhost/process.php?temp=25.1&humi=55.3'이라고 input.php 프로그램에서 코딩하였듯이 데이터가 제출되면 자동으로 process.php가 실행되어 온습도 값이 MySQL에 저장되는 과정을 나타냅니다. 

 

그럼 데이터가 정말 저장되었는지 확인해 보겠습니다. MySQL 관리를 실행하여 phpMyAdmin을 통해 데이터 베이스의 테이블에서 확인 가능합니다.

 

지난번 'Arduino 아두이노 홈 IoT(사물인터넷)을 위한 서버(Sever) 쉽게 만들기: APMSetup 프로그램 (https://it-g-house.tistory.com/entry/AMPSetup)' 포스팅에서 만든 데이터베이스 'testdb'의 테이블 'tempnhumi'에서 온도는 25.1, 습도는 55.3으로 데이터가 저장되어 있는 것을 확인할 수 있습니다.

 

웹브라우저를 통한 DB서버(MySQL)에 데이터 저장히기: 테이블 확인

 

와~우!! 신기하죠? ㅎㅎ 전 너무너무 신기해서 몇 번씩 계속 저장해봐서 저렇게 데이터가 많이 쌓였습니다. ^^ PHP 코드에 관해서는 추후에 자세히 정리해 보도록 하겠습니다.


여기까지 웹브라우저를 통해 온습도(Temperature and Humidity) 데이터를 MySQL의 데이터베이스(Database, DB) 서버에 저장하는 방법을 알아보았습니다. 앞서 얘기했듯이 오늘 포스팅은 아두이노(Arduino)의 DHT11 온습도 센서로 측정된 데이터를 MySQL에 저장하기 위한 사전 작업으로 다음 포스팅에서는 측정된 데이터를 MySQL에 연동하는 방법을 알아보도록 하겠습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다. 

 

 

 

 

반응형
반응형

 

 

 

앞서 포스팅에서 온습도 센서(Temperature and Humidity sensor)만 가지고 아두이노의 기본적인 동작법이나 파일 저장법, 그래프 그리기, 엑셀(Excel)과 연동하는 방법들을 알아보았습니다. 그리고 인터넷(Internet) 사용법과 웹서버(Web server) 만드느라 많은 시간을 보냈는데요 ^^ 오늘은 재미있는 센서를 하나 소개드리려고 합니다. 

 

바로 초음파(ultrasound(s), ultrasonic wave) 센서입니다. 인터넷에 찾아보면 거리 센서라고 많이 검색되는데 초음파를 쏴서 돌아오는 시간을 계산해서 거리를 측정할 수 있는 예제가 많이 알려져서 그런 것 같습니다 ^^ 이번 포스팅에서는 초음파 센서 사용방법과 프로그램 코딩에 대해 알아보겠습니다.


  • HC-SR04 초음파 센서

온라인에서 '초음파 센서'를 검색하면 아두이노용으로 많이 사용하는 모델은 'HC-SR04' 모듈입니다. 생긴건 마치 스피커처럼 생겼는데요 ㅎㅎ 아두이노 작품들 중에 로봇류는 대부분 이 HC-SR04 센서로 눈처럼 꾸며서 사용하는걸 많이 보았습니다. 

 

아두이노 HC-SR04 초음파 센서

"초음파(超音波, 영어: ultrasound(s), ultrasonic wave)는 인간이 들을 수 있는 가청 최대 한계 범위를 넘어서는 주파수를 갖는 주기적인 '음압'(音壓, sound pressure)을 의미한다." (출처: 위키피디아) 즉, 사람이 들을 수 없는 고주파수 영역대의 음파를 말합니다. 건강하고 젊은 사람이 대략 20KHz의 영역을 들을 수 있고 사람이 들을 수 있는 이상의 영역이 초음파 영역이라고 생각하시면 됩니다.

 

아두이노에서 사용할 HC-SR04 초음파 센서는 대락 40KHz 영역대의 초음파를 방출합니다. 송신기와 수신기인 두개의 초음파 트랜스 듀서(Ultrasonic transducer)가 있고, 수신기(Chirp: 주파수 변조 방식을 사용하는 펄스 압축의 하나)에서 방출된 초음파가 물체에 반사되어 수신기(Echo)에 돌아온 시간을 통해서 거리를 계산하는 방법을 사용합니다.

 

초음파 센서(ultrasounds sensor) 작동원리

동작 전압 5V DC
동작 전류 15mA
발생 초음파 약 40kHz
effectual angle <15도
측정 범위 2 ~ 400 cm
오차 0.3 cm
초음파 속도 340 m/s

 


 

  • HC-SR04 초음파 센서 연결방법

HC-SR04 초음파 센서는 5V 구동입니다. 모듈의 VCC 핀을 아두이노의 5V에 연결하고 GND는 GND에 연결합니다. 위에서 설명한 송신부인 Chirp는 모듈에서 Trig 핀이며 아두이노 12번 Pin에 연결하고, 수신부 Echo 핀을 8번 Pin에 연결합니다. Trig와 Echo 핀이 연결된 아두이노의 디지털 핀(DIGITAL Pin)은 프로그램상으로 변경 가능하니 원하시는 데로 임의로 연결하셔도 됩니다. 

 

아두이노(Arduino) HC-SR04 초음파 센서 사용방법: 연결 배선

 

 

  • HC-SR04 초음파 센서 프로그램 코딩 방법

HC-SR04 초음파 센서는 따로 '라이브러리(Library)'가 없어도 됩니다. 앞서 아두이노 프로그램 코딩 초급편에서 다루었던 'pinMode''digitalWrite' 명령어를 주로 사용하고 추가로 'pulseIn' 명령어를 사용하여 거리를 측정하는 프로그램을 코딩하도록 하겠습니다. 'pinMode'와 'digitalWrite' 명령어에 대한 내용과 간단한 예제는 아래 링크 참조 부탁드립니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙니다. 그렇기 때문..

it-g-house.tistory.com

 

명령어 기능 사용법
pinMode I/O 핀의 입출력 설정 pinMode(pin#, mode);
digitalWrite 디지털 핀에 High, Low 값 출력  digitalWrite(pin#, HIGH); or digitalWrite(pin#, LOW);
pulseIn 아두이노 핀으로 입력되는 펄스의 시간을 측정하는 함수 pulseIn(pin#, High); or pulseIn(pin#, Low);
int echo = 8;
int trig = 12;

void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  float cycletime;
  float distance;
  
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);
  
  cycletime = pulseIn(echo, HIGH); 
  
  distance = ((340 * cycletime) / 10000) / 2;  

  Serial.print("Distance:");
  Serial.print(distance);
  Serial.println("cm");
  delay(500);
}

 

 

HC-SR04 모듈을 아두이노에 연결한대로 trig = 12, echo = 8로 지정해주고 pinMode를 통해 trig는 Output(송신), echo는 Input(수신)으로 설정하였습니다. 그리고 cycletime(시간), distance(거리)를 실수(float)로 변수 지정을 하고, digitalWrite를 통해 trig에서 초음파가 송신하도록 'High' 명령을 주고 10 msec delay 후 'Low'로 신호를 끕니다. 그럼 송신된 초음파가 물체에 반사되어 echo에 수신 (신호가 High로 전환)될 때까지의 시간을 pulseIn 명령어를 통해 distance 변수에 저장합니다. 마지막으로 초음파가 물체를 맞고 돌아온 시간과 초음파의 속도 340 m/s를 이용하여 cm 단위로 거리를 계산합니다. 왕복거리라 마지막에 나누기 2가 들어갑니다. ^^

 

프로그램 코딩 완료 후 스케치(Sketch)를 통해 아두이노에 업로드 후 시리얼 모니터(Serial Monitor)를 실행하면 아래와 같이 거리를 계속 센싱하여 출력해서 보여줍니다. 통신속도(Baudrate) 맞추는 건 이제 기본으로 하시죠? ㅎㅎ

 

아두이노(Arduino) HC-SR04 초음파 센서 사용방법: 거리 측정 값 시리얼 모니터 출력


여기까지 아두이노(Arduino)로 HC-SR04 초음파 센서(ultrasounds sensor) 사용방법 과 거리를 측정하는 간단한 프로그램을 코딩해보았습니다. 정말 재미있는 센서인 거 같습니다. ^^ 조만간 초음파 센서를 이용하여 거리를 측정하는 것뿐만 아니라 적외선 센서처럼 물건이나 사람을 감지할 수도 있으니 사람을 감지하여 외부기기를 동작하거나 멈추는 간단한 프로젝트를 진행해 보도록 하겠습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다. 질문이나 추가적으로 필요하신 내용 있으면 언제든지 댓글로 남겨주세요~ ^^

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)를 사용해서 홈 IoT(사물인터넷)을 구축하는 프로젝트를 위해서는 인터넷을 통한 데이터 전송이 기본적으로 가능해야 합니다. 인터넷을 사용하여 웹을 통해 데이터를 송수신하려면 웹서버(Web sever)가 필요하고, 지난 포스팅에서는 웹서버를 구축하는 방법으로 가장 많이 알려진 A.M.P(Apache, MySQL, PHP) 프로그램 설치 방법과 연동하는 방법에 대해서 알아보았습니다. 

 

아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성 1: Apache 아파치 설치방법

그동안 아두이노와 센서의 기본적인 동작법 및 프로그램 코딩은 어느 정도 익숙해졌을 겁니다. 이제 본격적인 프로젝트를 진행하기 전에 인터넷을 통해 데이터 및 신호를 주고받을 수 있어야 아두이노를 원하는 로..

it-g-house.tistory.com

여기서 Apache로 웹서버를 만들어 데이터를 수신하고, 받은 데이터를 데이터베이스 서버(DataBase server), DB서버에 쌓아놓고 필요할 때 출력하거나 가공할 수 있는 데이터베이스 프로그램이 MySQL, 그리고 프로그램 언어 PHP (Professional HyperText Preprocessor) 소프트웨어를 통해 Apache와 MySQL과 연동하여 코딩을 할 수 있습니다.

 

'아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성 1: Apache 아파치 설치방법'을 시작으로 MySQL, PHP 프로그램 각각을 설치하니 너무 복잡하고 어렵고, 문제가 발생하면 문제 해결에도 많은 난항을 경험하셨을 겁니다... (컴퓨터 던져 버릴 뻔한 적이 많죠...ㅠㅠ 마우스는 이미..) 그래서!! 역시 쉽게 편하게를 추구하는 저는!! 또 찾았습니다 ㅎㅎ 패키지 프로그램이 있다는 사실을요!!! 와~~ 씨!! 진작에 좀 알려주지!! 정말 죄송합니다... 그래서 앞서 사용했던 Apach와 MySQL, PHP를 한방에! 설치와 연동까지! 해주는 프로그램 'APMSetup'!! 사용방법에 대해서 알아보겠습니다.

 

아두이노(Arduino)로 인터넷(Internet)을 이용한 데이터를 송수신하기 위한 서버(Sever)구성

 


 

  • APMSetup 프로그램 설치

APMSetup 프로그램은 http://kldp.net/apmsetup/release/에서 다운로드할 수 있습니다. 'APMSETUP7' 설치 파일 다운로드하여 설치를 진행합니다.

 

웹페이지 http://kldp.net/apmsetup/release/ 다운로드 화면

 

기본적인 프로그램 설치와 같이 동의할 거 동의하고 '다음'을 누르면 구성요소 선택이 나옵니다. 그럼 설정되어 있는 그대로 '다음'으로 진행하면 됩니다. 설치에 필요한 디스크 공간은 116.8MB로 꽤 커서 저는 D드라이브에 설치를 진행하였습니다.

 

APMSetup 설치 화면
APMSetup 설치 폴더 지정
APMSetup 설치 진행
APMSetup 설치 액서스 허용

설치를 진행하다 보면 Apache 프로그램 액세스 허용 여부가 나오는데 액세스 허용으로 계속 진행합니다. 설치가 완료되면 APMSETUP Monitor 바로가기 아이콘이 생깁니다.

 

APMSETUP Monitor 실행 아이콘

프로그램을 실행하면 공지 창이 뜨고 업데이트를 진행하라고 창이 또 뜰겁니다... 업데이트는 어차피 진행이 안되고 공지 내용도 아무 내용이 없어서 그냥 무시하면 되는데 실행할 때마다 창이 뜨는 걸 방지하기 위해 '서버 환경설정'에서 '자동 업데이트 사용''APMSETUP NOTICE 표시'의 체크를 지우면 더 이상 창이 뜨지 않을 겁니다.

 

APMSetup Monitor 메뉴
APMSetup Monitor 환경설정

모니터 보기를 하면 아래와 같이 'Apache2: 정상 동작중, MySQL 5: 정상 동작중'이라고 표시되어 있는 창을 볼 수 있습니다. 

 

그럼 이전 포스팅에서 Apache 단독 설치 때 확인하였듯이 'http://localhost' 또는 '127.0.0.1' 주소로 정상 작동 중인지 확인해 보겠습니다. 웹브라우저에서 'http://localhost' 입력해주면 "APMSETUP이 정상적으로 설치 되었습니다." 라고 확인할 수 있습니다. PHP info 도 바로 확인 가능합니다!! PHP와 Apache 연동을 위해 이런저런 설정을 바꿔주던걸 하지 않아도 됩니다 ㅠㅠ 역시 단독으로 설치해서 서로 연동하는 거보다 훨~씬 편하네요 ^^

 

APMSETUP 설치 후 PHP info 확인

 

 

  • MySQL 데이터베이스(Database), 테이블(Table) 만들기

APMSETUP 설치가 완료되었으니 MySQL을 통해 데이터베이스와 테이블을 만들어 보겠습니다. 지난 포스팅에서는 명령 프롬프트(MySQL 콘솔)를 통해 명령어를 직접 입력하면서 데이터베이스와 테이블을 만들었습니다. 관련 내용은 아래 링크 참조 부탁드립니다. 

 

MySQL 시작하기: 데이터베이스(Database), 테이블(Table) 만들기

지난 포스팅에서 아두이노(Arduino) 프로젝트를 위한 서버(Sever) 구성 도구로 A.M.P (Apache, MySQL, PHP) 프로그램에 대해 알아보았습니다. 각 프로그램 역할과 설치방법에 대해 자세한 내용은 아래 링크 참조..

it-g-house.tistory.com

프로그램을 정상적으로 운영하려면 명령 프롬프트의 사용을 권장하는 편이지만 APMSETUP에서는 'MySQL관리'인 'phpMyadmin 프로그램'을 통해 보다 직관적으로 쉽게 데이터베이스와 테이블 및 MySQL 전반적인 부분까지 운영할 수 있도록 도와줍니다. APMSETUP Monitor 메뉴에서 MySQL 관리를 실행해주세요~  

 

APMSetup 메뉴: MySQL 관리 실행

MySQL 관리를 실행하면 아래와 같이 로그인 화면이 나옵니다. 사용자명은 'root', 암호는 'apmsetup'으로 초기 설정되어 있습니다. 로그인을 진행합니다.

 

APMSETUP phpMyAdmin 로그인 화면

 

로그인을 진행하는데 간혹 아래와 같이 오류가 발생할 수도 있습니다. 그러면 앞에서 확인하였던 http://localhost 웹페이지를 통해서 접속을 다시 해보시면 정상적으로 로그인이 가능합니다. 혹시 그래도 안되면.. 오류 해결 방법으로 검색해보세요.. 많은 고수들의 다른 방법들도 찾을 수 있을 거예요 ^^ 

 

APMSETUP phpMyAdmin 오류
APMSETUP http://localhost를 통한 phpMyAdmin 접속

phpMyAdmin에 접속하면 아래와 같이 UI를 통해 MySQL의 데이터베이스와 그에 속한 테이블을 카테고리 형태로 확인할 수 있습니다. 하나하나 클릭하면서 내용을 확인해보시면 직관적으로 금방 내용을 확인하실 수 있습니다.

 

phpMyAdmin 초기 화면
phpMyAdmin 데이터베이스 확인
phpMyAdmin MySQL 데이터베이스의 user 테이블 확인

그럼 이제 새로운 데이터베이스를 만들어 보겠습니다. 로그인 후 첫 화면 중앙을 보면 '새 데이터베이스 만들기'를 확인할 수 있습니다. 새로 만들 데이터베이스 이름을 정하고 '만들기'를 클릭합니다. 저는 "testDB"로 새로 만들어 보겠습니다. 이어서 바로 새로운 테이블 만드는 창을 확인할 수 있습니다. 그럼 새로 만들 테이블의 이름을 정하고 fields 수는 칼럼(column) 수라고 생각하시면 됩니다. 저는 우선 계속해서 다루고 있는 DHT11을 이용한 온습도 데이터를 DB서버로 보낼 생각이기 때문에 테이블 이름은 "tempnhumi"로 fields 수를 2개로 진행하였습니다.

 

APMSETUP phpMyAdmin 새 데이터베이스 만들기
APMSETUP phpMyAdmin 새 테이블 만들기

fields (columns) 수까지 정하고 '실행'을 클릭하면 아래와 같이 각각 칼럼(column)에 대한 정보를 입력하는 창을 확인할 수 있습니다. 필드는 각 칼럼의 이름이고 종류는 데이터의 종류로 정수(int)나 실수(Float) 및 text 등을 정할 수 있습니다. 길이/값은 데이터의 bit수로 숫자나 영문의 경우 한자리가 1 bit라고 생각하시면 됩니다. 저의 경우 온도나 습도의 최고 값은 100.0일 테니 소수점 포함 5자리로 정하였습니다. 그리고 인덱스에서 PRIMARY key가 될 데이터를 지정하고 '저장'을 클릭하면 됩니다.

 

APMSETUP phpMyAdmin 테이블 컬럼(column) 설정하기

 

이렇게 하면 다 만들어졌습니다 ㅎㅎ 완~전 편하죠? 의심스럽나요? ㅎㅎ 저 역시 의심이 많아서 MySQL 콘솔을 통해서 확인해 보았습니다. MySQL콘솔은 이전 포스팅에서 설명한 명령 프롬프트로 실행하는 것과 똑같습니다. 콘솔을 실행하면 비밀번호를 입력하면 되는데 변경하지 않으셨으면 초기 비밀번호인 'apmsetup'을 입력하면 됩니다. 

 

APMSETUP MySQL 콘솔 실행 화면

로그인 후 데이터베이스 확인과 테이블 확인, 테이블 내부 사항까지 다 확인해 봤는데 놀랍도록 정확하게 만들어져 있습니다. 와~ 우!! (그동안 고생한 거 생각하면... ㅠㅠ) 아래 명령어는 앞서 링크드린 'MySQL 시작하기: 데이터베이스(Database), 테이블(Table) 만들기'를 확인 부탁드립니다.

 

 

APMSETUP MySQL 콘솔을 통한 데이터베이스 확인

 


여기까지 웹서버(Web server) 구성 통합 프로그램 APMSetup 설치 및 사용방법에 대해 알아보았습니다. 4번에 걸쳐서 포스팅한 내용이 한방에 진행되어 어찌 좀 허무하긴 한데요... 그래도 이렇게 편한 프로그램이 있으니 얼마나 고맙나요~ 고수님들 감사합니다 ^^

 

웹서버를 구성해주는 통합 프로그램은 APMSetup뿐만 아니라 Wamp64, Xampp, Autoset 등 많이 사용하는 프로그램이 몇 개 더 있습니다. 사실 APMSetup은 업데이트된 지 좀 오래되어 MySQPL이나 PHP 버전이 낮지만 통합 프로그램에 따라 DB서버 프로그램이 MySQL 또는 MariaDB 기반으로 좀 다를 수 있기 때문에 MySQL 기반으로 하는 APMSetup으로 먼저 진행하였습니다. 그리고 한글이 지원된다는 거가 강점!! Wamp64, Xampp, Autoset 등은 추후 하나씩 알아보도록 하겠습니다.

 

오늘도 긴 글 읽어 주셔서 감사합니다. 궁금하신 거나 추가로 필요한 내용 있으면 언제든지 댓글로 남겨주시면 열심히 연구하여 답변드리도록 하겠습니다 ^^

 

 

 

반응형
반응형

 

 

아두이노(Arduino)로 인터넷을 연결하는 방법은 랜선(LAN)을 연결하는 방법인 이더넷 모듈(Ethernet module)을 사용하는 방법, Wifi를 연결하는 방법, 3G/LTE를 연결하는 방법이 있습니다. 지난 포스팅까지 주로 이더넷 모듈을 사용한 방법을 알아보았는데 사실 랜선(LAN) 선을 연결하는 것도 여간 귀찮은 게 아니죠 ㅎㅎ 그리고 저의 궁극적인 목표는 완전 무선인 형태로 프로젝트 완제품을 만드는 것이기 때문에 Wifi를 사용하는 방법을 알아보려고 합니다. 오늘은 Wifi 사용에 필요한 ESP-01 (ESP8266)모듈과 연결하는 방법에 대해서 알아보겠습니다. 앞서 말한 다른 인터넷 연결 방법 및 ENC28J60 이더넷 모듈 사용법에 관해서는 아래 링크 참조 부탁드립니다.

 

Arduino 아두이노 인터넷(Internet) 연결하는 방법

지난 포스팅에서 아두이노를 이용하여 온습도 센서를 동작해 보면서 아두이노의 기본적인 사용법과 코딩하는 방법을 알아보았습니다. 본격적인 홈 IoT(사물인터넷) 프로젝트를 진행하려면 아두이노를 인터넷에 연..

it-g-house.tistory.com

 

Arduino 아두이노 인터넷 연결하기 - 이더넷(ethernet) 사용 방법

아두이노(Arduino)를 사용하여 홈 IoT(사물인터넷)를 구현하는 프로젝트를 진행하기 위해서는 우선 인터넷이 되어야 합니다. 지난 포스팅에도 설명하였지만 일반적인 아두이노 모델인 UNO R3, Nano, MEGA 같은 보..

it-g-house.tistory.com


1. ESP8266 와이파이 모듈(Wifi module)

 

아두이노의 일반보드에는 기본적으로 내장된 와이파이 칩이 없기 때문에 와이파이 모듈을 사용합니다. 주로 ESP8266 와이파이를 많이 사용하는데 ESP8266 칩셋을 사용하기 때문에 ESP8266 와이파이 모듈이라고 합니다. 온라인상에서 검색하면 ESP-01 제품을 가장 많이 찾을 수 있으나 ESP 시리즈는 ESP-14까지 출시되어 있습니다. 기획하시는 프로젝트에 맞는 제품버전을 구입하여 다양한 사양과 기능을 활용하실 수 있습니다. 가격이 저렴하고 가장 보편적으로 사용할 수 있는 모델은 ESP-01이며 제가 기획한 프로젝트도 데이터 정도만 간단히 주고받으면 되기 때문에 ESP-01 모듈로도 충분히 잘 사용하고 있습니다.

아두이노 인터넷하기: ESP8266 Wifi module

ESP-01   802.11b/g/n Wi-Fi 모듈
구동 전압 (Operating voltage)    3.0V ~ 3.6V
Power (Typical Values)   Average: ~ 71mA, Peak: 300mA (Continuous Transmission)
Power (절전 모드)   Min. 20uA
Interface   UART/GPIO 지원
동작 명령어   UART AT command
UART 전송 속도   Max. 4Mbps
SPI Flash   8Mbit Default 
Frequency Range   2412 ~ 2484MHz
프로세서 속도 (Processor speed)   Max. 160MHz
Operating Temperature   -20℃ ~ 85℃
Storage Environment   -40℃~ 90℃, < 90%RH

 


 

2. ESP-01 와이파이 모듈(Wifi module) 배선

 

 

ESP-01 모듈 PIN 배열

ESP-01 모듈은 단순하게 생긴 것과 다르게 사용 방법이 좀 복잡합니다. 일단 배선이 복잡한데.. 위의 표에서 볼 수 있듯이 전류 소모량이 많고, TX와 RX 신호가 5V출력이기 때문에 아두이노 보드 pin에 바로 연결하면 정상적으로 작동이 안 되고 모듈이 고장 날 수도 있습니다. 또 하나의 문제는 아두이노와 보레이트(Baudrate) 9600 bps 속도로 시리얼 통신(Serial communication)을 주고 받아야 하는데 ESP-01 모듈은 115200 bps로 초기 설정되어 있습니다. 에?? 그럼 어떻게 하냐고요? ㅠ 그래서 펌웨어(Firmware)를 업데이트해서 모듈의 속도를 변경해야 하는 과정이 필요하다고 인터넷에 찾아보면 나오는데.. 과정이 좀 복잡합니다. 그리고 이러한 여러 가지 문제를 해결하는 보완책으로 저항을 사용해야 하거나 아래와 같이 복잡한 배선을 구성해야 합니다.

 

ESP-01(ESP8266) Wifi module 펌웨어 업데이트(firmware update)를 위한 배선

 

출처: https://www.elec-cafe.com/esp8266-esp-01-firmware-update/

 


 

 

아.. 복잡하죠... ㅠㅠ 뭐 할 때마다 이렇게 복잡해서야... 그래서~!! 복잡한 거 싫어하는 저는 방법을 찾았습니다!! 바로 ESP-01 어댑터라는 모듈을 사용하는 겁니다. 복잡한거 싫어하고 빵판으로 배선하는 것을 싫어하는 저를 위한 아주 유용한 아이템입니다. ESP-01 모듈을 어댑터에 연결하기만 하면 동작전압을 5V로 사용해야 하는 점 말고는 어댑터의 4 Pin(VCC, GND, RX, TX) 만으로 훨씬 편하게 배선을 할 수 있습니다. 어댑터를 사용하면 펌웨이 업데이트도 안해도 됩니다!! 완전~꿀!ㅎㅎㅎ

 

아두이노(Arduino) 인터넷 연결하기: ESP-01(ESP8266) 와이파이 모듈(Wifi module)과 어댑터

 

 

ESP-01 와이파이 모듈을 방향에 맞게 어댑터에 꼽고 어댑터 VCC 핀은 아두이노의 5V, GND는 GND와 연결합니다. 그리고 TX와 RX pin은 각각 아두이노의 2번 Pin과 3번 Pin에 연결합니다.

 

어? 왜 아두이노의 RX-pin0, TX-pin1에 맞춰서 연결하지 않나요? 맞습니다. 아두이노가 스케치를 통해 신호를 받을 때나 PC로 코딩된 프로그램을 업로드받을 때 시리얼 통신을 사용한다고 아실 겁니다. TX와 RX는 각각 Transmit(전송), Receive(수신)이란 뜻으로 시리얼 통신을 할 때 데이터를 전송하고 수신하는 통로가 됩니다. 그래서 이미 아두이노에 USB가 연결되어 있는 동안은 아두이노의 TX와 RX는 PC와 연결되어 있어서 아두이노와 ESP-01 와이파이 모듈 사이의 시리얼 통신을 위해 새로운 RX, TX를 디지털 Pin2번과 3번에 각각 지정을 해야 합니다.

 

실제로 아두이노의 RX-pin0, TX-pin1에 연결하고 프로그램을 업로드하면 정상적으로 업로드되지 않습니다. 그리고 주의하실 점은 전송(TX)---> 수신(RX) 짝으로 연결해야 합니다. ESP-01 모듈에서 전송(TX)한 데이터를 아두이노에서 수신(RX)하는 거고 또 반대로도 이뤄지기 때문입니다. 

 

아두이노(Arduino) 인터넷 연결하기: ESP-01(ESP8266) 와이파이 모듈(Wifi module) 어댑터 배선

 


 

3. ESP-01 와이파이 모듈(Wifi module) 프로그램 코딩

 

아두이노와 ESP-01 와이파이 모듈을 위 그림과 같이 연결한 후 몇 가지 설정을 위해 간단한 프로그램 업로드가 필요합니다. 우선 아래 코드블럭과 같이 스케치(Sketch)로 코딩 후 아두이노에 업로드합니다.

 

앞서 언급하였듯이 ESP-01 모듈은 통신속도(Baudrate: 보레이트)가 115200 bps로 초기 설정되어 있기 때문에 'mySerial.begin(115200);' 명령어에 115200이 우선 들어갑니다. 그러나 아두이노와 ESP-01 모듈이 통신을 하려면 둘의 통신속도를 맞춰야 하기 때문에 9600으로 변경하는 작업을 진행해야 합니다. (뒤에 설명)

 

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3); //RX, TX

void setup() {
   Serial.begin(9600);
   mySerial.begin(115200);
}

void loop() {
if(mySerial.available())
{
  Serial.write(mySerial.read());
}
if(Serial.available())
{
  mySerial.write(Serial.read());
}
}

 

아두이노와 ESP-01간에 통신은 UART(범용 비동기화 송수신기: Universal asynchronous receiver/transmitter)를 사용하는데.. UART는 "병렬 데이터의 형태를 직렬 방식으로 전환하여 데이터를 전송하는 컴퓨터 하드웨어의 일종이다."라고 위키피디아에 나와있습니다. 그냥 시리얼 통신 일종이라 생각하면 마음이 편합니다. ㅎㅎ 여기서 사용되는 명령어가 AT command입니다.

 

그래서 업로드가 완료된 후 시리얼 모니터(Serial Monitor)를 통해 PC에서 아두이노를 거쳐 ESP-01 모듈에 'AT command'로 명령을 하여 필요한 설정 및 와이파이를 구동할 수 있습니다.

 

 

먼저 정상적으로 작동하는지 확인하기 위해 시리얼 모니터 상단의 입력란에 AT라고 입력합니다. 그럼 아래와 같이 OK라고 반응을 보입니다. 잠깐!! AT를 입력하기 전에 보레이트는 9600에 맞춰주시고(프로그램상에서 아두이노는 9600), 옆에 칸을 'Both NL & CR'로 설정을 변경해줘야 합니다. NL은 'Newline' 약자이고, CR은 'Carriage return' 약자입니다. 이렇게 두어야 return 값이 아래 줄에 출력됩니다. 

 

아두이노(Arduino) ESP8266(ESP-01) 와이파이 모듈 사용하기: AT command 확인

 

OK 보셨나요? ㅎㅎ 이제 거의 다 했어요~ 그럼 ESP-01 모듈의 통신속도를 변경하기 위해 AT+UART_DEF=9600,8,1,0,0라고 입력합니다.

 

아두이노(Arduino) ESP8266(ESP-01) 와이파이 모듈 통신속도(baudrate) 변경하기

 

OK~!! 이제 ESP-01 모듈의 통신속도가 변경되었기 때문에 지금은 입력해도 아무 반응이 없을 겁니다. 그래서 스케치에서 아까 115200이었던 통신속도를 9600으로 변경 후 다시 아두이노로 업로드합니다.

 

아두이노 프로그램 ESP-01 모듈 속도 변경

그리고 다시 시리얼 모니터에 AT를 입력하면 역시나 OK로 잘 응답을 해줍니다. ^^ 그럼 이제 와이파이에 접속해 볼까요? AT+CWLAP 명령어는 주변 Wifi 목록을 검색해주는 명령어입니다. 아마 입력하면 바로 진행될 수도 있지만 안되시는 분들은 AT+CWMODE? 명령어로 현재 모드가 몇 번인지 확인하고 AT+CWMODE=1이라고 입력하셔서 모드를 변경합니다.

 

아두이노(Arduino) ESP8266(ESP-01) 와이파이 모듈 모드(MODE) 변경하기

ESP8266 와이파이 모듈은 네트워크 연결에 대해 3가지 모드를 제공합니다.

 

1. Station mode: ESP8266 모듈이 client로 wifi 기능만 함

2. AP mode: ESP8266 모듈이 Access Point가 됨

3. AP + Station mode: AP와 client 둘 다 됨

 

그래서 일반적으로 사용하실 때 모드는 1번으로 설정하면 됩니다. 그럼 다시 AT+CWLAP로 주변 Wifi 목록을 검색해 볼까요? 짠~!! 주변에 접속할 수 있는 와이파이를 찾을 수 있습니다. 

 

아두이노(Arduino) ESP8266(ESP-01) 주변 와이파이 찾기

 

와이파이 접속 명령어는 AT+CWJAP="SSID","비밀번호" 라고 입력하시면 됩니다. 그럼 정상적으로 접속이 되면 "WIFI CONNECTED, WIFI GOT IP"라고 응답이 출력됩니다. 그리고 할당된 IP를 확인하려면 AT+CIFSR 명령어를 입력하면 아래와 같이 IP 주소를 확인할 수 있습니다. 이제 와이파이가 됩니다~ 호~우!! ㅎㅎ

 

아두이노(Arduino) ESP8266(ESP-01) 와이파이 접속 및 IP 주소 확인하기

 

명령어 기능 설명 응답
AT AT command 작동 상태 확인 OK or 무응답
AT+RST 재시작 (Reset) OK… ready
AT+UART_DEF=속도,8,0,0 AT 통신속도 변경 OK
AT+CWMODE? Wifi 모드 확인 '+CWMODE: mode#
AT+CWMODE=mode# Wifi 모드 설정 (ex> AT+CWMODE=1) OK
AT+CWLAP 접속 가능한 Wifi 목록 검색 Wifi 목록
AT+CWJAP? 접속된 Wifi 확인  
AT+CWJAP="SSID","비밀번호" Wifi 접속 WIFI CONNECTED 
WIFI GOT IP 
OK
AT+CWQAP Wifi 접속 종료 OK 
WIFI DISCONNECT
AT+CIFSR IP 주소 확인 +CIFSR: STAIP, "할당된 IP주소"
+CIFSR: STAMAC, "MAC주소"

여기까지 아두이노(Arduino)로 인터넷(Internet) 연결하는 방법 중 ESP-01 와이파이 모듈(ESP8266 Wifi module)을 사용하는 방법을 알아보았습니다. 인터넷도 되고, DB(Database)서버도 만들었고, 이제 거의 모든 준비가 되었습니다. 다음 포스팅에는 드디어!! 웹으로 데이터를 보내서 DB서버에 저장하는 방법에 대해 알아보도록 하겠습니다. 웹서버, DB서버 만드는 방법이 궁금하신 분은 아래 링크 참조 부탁드려요 ^^

 

아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성 1: Apache 아파치 설치방법

그동안 아두이노와 센서의 기본적인 동작법 및 프로그램 코딩은 어느 정도 익숙해졌을 겁니다. 이제 본격적인 프로젝트를 진행하기 전에 인터넷을 통해 데이터 및 신호를 주고받을 수 있어야 아두이노를 원하는 로..

it-g-house.tistory.com

오늘도 긴 글 읽어 주셔서 감사합니다. 궁금한 내용이나 추가적으로 원하시는 내용 있으면 언제든지 댓글로 남겨주세요~ 감사합니다.

 

 

 

반응형
반응형

 

 

 

지난 포스팅에서 아두이노(Arduino)로 인터넷을 연결하는 방법 중 이더넷(Ethernet) 모듈을 사용해보았습니다. 'ENC28J60' 이더넷 모듈을 아두이노 UNO R3 보드와 연결하여 DHCP(Dynamic Host Configuration Protocol: 동적 호스트 구성 프로토콜)를 통해 IP 할당받았습니다. 그럼 오늘은 진짜 인터넷 되는지 궁금하니까 할당받은 IP를 통해 웹 브라우저(web browser)에 간단한 텍스트를 띄워보도록 하겠습니다. 앞서 설명한 내용은 아래 링크 걸어두게요~ 참조 부탁드립니다.

 

Arduino 아두이노 인터넷 연결하기 - 이더넷(ethernet) 사용 방법

아두이노(Arduino)를 사용하여 홈 IoT(사물인터넷)를 구현하는 프로젝트를 진행하기 위해서는 우선 인터넷이 되어야 합니다. 지난 포스팅에도 설명하였지만 일반적인 아두이노 모델인 UNO R3, Nano, MEGA 같은 보..

it-g-house.tistory.com


  • 프로그램 코딩 (ENC28J60 이더넷 모듈 사용)

아두이노로 웹브라우저에 텍스트를 출력하기 위해 프로그램 코딩이 필요합니다. 지난번에 다운로드한 이더넷 라이브러리(Library)를 계속 사용하기 때문에 혹시 없으신 분은 아래 파일을 다운로드하여 스케치(sketch)에서 추가하시면 됩니다. 

EtherCard.zip
0.12MB

이더넷 모듈 사용 방법에서 코딩했던 IP를 할당받기 위한 DHCP test 프로그램에서 몇 가지만 추가로 적어주면 되기 때문에 어렵지 않습니다.

 

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[700];

const char webpage[] PROGMEM =
"<html>"
  "<head>"
  "<title>"
    "Arduino Websever"
  "</title>"
  "</head>"
  "<body>"
    "Hello Arduino!!"
  "</body>"
"</html>"
;

void setup () {
  Serial.begin(57600);
  Serial.println(F("\n[webClient]"));

  // Change 'SS' to your Slave Select pin, if you arn't using the default pin
  if (ether.begin(sizeof Ethernet::buffer, mymac, 8) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);
}
void loop () {
  ether.packetLoop(ether.packetReceive());
  memcpy(ether.tcpOffset(), webpage, sizeof webpage);
  ether.httpServerReply(sizeof webpage);
  }

 

 

 

위에 게시된 코드블럭에서 아래와 같이 변수 'webpage'를 HTML(HyperText Markup Language)로 프로그램을 정의하였습니다. HTML은 웹페이지를 만들기 위한 언어로 웹페이지의 전반적인 구조를 만들고 웹 브라우저와 같은 HTML 처리 장치의 행동에 영향을 주는 프로그램 언어들을 제어하는 기능을 합니다. 즉, 웹브라우저에서 동작하는 프로그램 언어입니다. 여기서는 간단한 텍스트만 출력하기 위한 HTML 기본 구조만 작성하였는 점 참고 부탁드립니다. 

 

아두이노로 웹브라우저에 원하는 텍스트를 띄우기 위한 html코딩 

HTML 코딩에서 <title></title> 안의 내용이 웹페이지의 제목 부분이고 <body></body> 안의 내용이 웹브라우저로 출력하고 싶은 내용을 적으시면 됩니다. 저는 제목은 "Arduino Websever"로 임의로 정하고 "Hello Arduino!!"를 웹브라우저 크롬을 통해 출력하기 위해 위와 같이 작성하였습니다. 프로그램에서 빨간 표시 한 부분을 원하는 데로 바꾸시면 원하는 텍스트를 출력할 수 있습니다. (한글도 가능한데 그냥 하면 웹 브라우저에서 깨지기 때문에 추가적인 코드가 필요합니다. 우선 간단하게 테스트해보시고 한글 출력은 추후 업데이트하도록 하겠습니다.)

 

그럼 compile 후 아두이노에 성공적으로 업데이트하고 나서 PC와 연결된 USB는 뽑아버리고 아두이노에 외부 전원을 공급하여 확인하도록 하겠습니다. (시리얼 통신으로 가는지 진짜 인터넷을 통하는지 저는 의심이 많아서 일단 컴퓨터와 아두이노와의 연결을 끊었습니다. ㅎㅎ) 그리고 이더넷 모듈에 공유기의 랜선(LAN)을 연결한 후 아두이노에 할당받은 IP를 웹 브라우저에 입력합니다. (저는 IP가 192.168.0.102이고, 웹 브라우저는 크롬으로 진행하였습니다.)

 

ENC28J60이더넷 모듈 (Ethernet module) 사용하여 아두이노(Arduino) 인터넷 연결

그럼 아래와 같이 짠!! 하고 출력됩니다. 와우~!

 

 

아두이노(Arduino)로 웹브라우저에 텍스트 출력하기

 

추가로 프로그램을 조금 더 설명드리면 void loop() 부분의 명령어는 아두이노에 할당된 IP를 웹 브라우저에 입력하면 이더넷 모듈이 TCP 패킷을 받고, HTML로 작성된 변수 'webpage'의 내용을 웹브라우저로 띄워주는 코딩입니다. (몇 가지 명령어로 간단히 실행이 되는 것은 라이브러리를 사용해서 가능한 겁니다. 얼마나 고마운 존재인가요~ 감사합니다!! ㅎㅎ) 

 

아두이노로 웹브라우저에 원하는 텍스트를 띄우기 위한 코딩

 


여기까지 아두이노(Arduino)로 인터넷(Internet) 연결하는 방법 중 ENC28J60 이더넷 모듈(Ethernet module)을 사용해서 웹브라우저에 간단한 텍스트를 출력하는 방법을 알아보았습니다. HTML을 사용하실 수 있으신 분은 프로그램을 수정해서 얼마든지 웹페이지를 추가적으로 구성하실 수 있습니다. 

 

지금은 공유기 내부에서 IP를 사용하고 있지만 최종적으로 외부 인터넷을 사용하여 프로젝트를 어디에서나 진행 가능하게 만드는 것이 궁극적인 목표가 될 것입니다. ㅎㅎ 화이팅하겠습니다! ^^  

 

오늘도 긴 글 읽어주셔서 감사합니다. 질문이나 좋은 의견 있으면 언제든지 댓글로 남겨주시면 최선을 다해 연구해서 답변드리겠습니다.

 

 

반응형
반응형

 

 

 

MySQL 시작 메인화면: 데이터베이스(Database), 테이블(Table) 만들기

지난 포스팅에서 아두이노(Arduino) 프로젝트를 위한 서버(Sever) 구성 도구로 A.M.P (Apache, MySQL, PHP) 프로그램에 대해 알아보았습니다. 각 프로그램 역할과 설치방법에 대해 자세한 내용은 아래 링크 참조 부탁드립니다.

 

아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성 1: Apache 아파치 설치방법

그동안 아두이노와 센서의 기본적인 동작법 및 프로그램 코딩은 어느 정도 익숙해졌을 겁니다. 이제 본격적인 프로젝트를 진행하기 전에 인터넷을 통해 데이터 및 신호를 주고받을 수 있어야 아두이노를 원하는 로..

it-g-house.tistory.com

 

아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성 2: MySQL 설치방법

지난 포스팅에서 아두이노 서버 구성에 대해 알아보았고 필요한 도구(Tool)로 A.M.P (Apache, MySQL, PHP) 중 Apache(아파치)를 설치하는 방법에 대해 알아보았습니다. 이어서 MySQL 설치 방법을 알아보겠습니다...

it-g-house.tistory.com

 

아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성 3: PHP 설치 방법

아두이노 프로젝트를 위한 서버 구성으로 벌써 세 번째 포스팅이네요.. 오늘은 지난 두 포스팅을 이어 서버 구성 도구 A.M.P (Apache, MySQL, PHP)에서 마지막 PHP 설치 방법에 대해 알아보겠습니다. 아두이노(Ard..

it-g-house.tistory.com

아두이노로부터 데이터를 웹(Web)으로 받기 위한 먼 여정을 하고 있는데요 ㅠㅠ 오늘은 데이터베이스(Database, DB) 서버를 MySQL로 만들어 보겠습니다.

 


 A.M.P (Apache, MySQL, PHP)에서 MySQL은 데이터를 받는 역할을 한다고 생각하시면 됩니다. Apache로 구축한 웹서버를 통해 아두이노에서 송신하는 데이터를 받아서 DB서버에 저장하는 겁니다. MySQL은 엑셀처럼 정형화되어 있지 않기 때문에 조금 손이 많이 가야 합니다. 하지만 단순 데이터를 저장하는 수준의 프로젝트 진행할 때는 한 번만 설정해놓으면 되기 때문에 너무 어렵게 생각하실 건 없어요 ^^ 그럼 시작해 보겠습니다~

 

 앞서 MySQL의 설치 방법에 대해서는 포스팅을 했기 때문에 Skip 하겠습니다. 참고 부탁드리겠습니다. (저는 Window10에서 실행하기 때문에 운영체제가 다르거나 버전이 다름으로 인해 도움이 안 될 수 도 있는 부분 양해 부탁드립니다.)

 

  • MySQL 명령어
기능 명령어 사용예
시작하기  mysql -u 'ID' -p 'DB이름' mysql>mysql -u root -p (DB 최상위단으로 접속시)
DB 검색  show databases; mysql>show databases;
DB 만들기  create database 'DB이름'; mysql>create database Test;
DB 사용  use 'DB이름'; mysql>use Test;
Table 만들기  create table 'table이름'

 mysql>create table tempnhumi(

->temp float not null,

->humi float not null,

->primary key(temp)

->);

Table 검색  show tables; mysql>show tables;
Table 조회  select*from 'table이름'; mysql>select*from tempnhumi;
MySQL 종료 exit mysql>exit

 

table의 명령어는 DB서버를 구축할 때 기본적인 명령어로 알아두면 좋습니다. 하나하나 실행하면서 알아보도록 하겠습니다. MySQL을 설치 완료하고 나면 일단 시작을 해야 하는데 보통 우리가 알고 있는 프로그램처럼 실행파일이 있거나 하지 않기 때문에 명령 프롬프트를 사용해야 합니다.

 

  • MySQL 실행하기

명령 프롬프트를 실행해서 MySQL 시작 명령어 'mysql -u root -p'를 그냥 입력하면 아래와 같이 명령어가 실행이 안됩니다. 이런 문제는 MySQL이 설치되어 있는 폴더에 가서 명령어를 실행해야 되기 때문인데... 설치 폴더 경로가 C:\Program Files\MySQL\MySQL Server 8.0\bin 이렇게 길기 때문에 찾아가기도 힘듭니다,;; 그래서 어디에서나 명령어가 실행되도록 설정하나를 하고 편하게 진행하도록 하겠습니다. (명령 프롬프트는 윈도우검색(윈도우키+s)에서 'cmd'라고 검색하면 찾으실 수 있습니다.)

 

MySQL 시작 명령어 입력
내컴퓨터 -> 속성 -> 고급시스템 설정 -> 환경변수 -> 시스템 변수 편집

 

 

그림에서 보듯이 내컴퓨터 -> 속성 -> 고급시스템 설정 -> 환경변수 -> 시스템 변수 편집으로 들어가서 Path를 편집하여 변수값에 MySQL이 설치되어 있는 폴더 경로를 적습니다. 저는 경로를 'C:\Program Files\MySQL\MySQL Server 8.0\bin' 이렇게 입력하였고, 마지막에 bin 폴더까지 입력하여야 합니다. 그리고 확인을 누르고 명령 프롬프트를 '관리자 권한'으로 실행합니다.

 

다시 MySQL 실행 명령어 'mysql -u root -p'를 입력하면 바로 아래 password를 입력하라고 나옵니다. MySQL을 설치할 때 설정하였던 비밀번호를 입력하면 mysql>이라고 뜨면서 정상적으로 실행이 되는 걸 확인할 수 있습니다.

 

명령프롬프트로 MySQL 실행하기
명령프롬프트로 MySQL 실행 명령어 입력 후 password 입력

 

  • 데이터베이스(DataBase, DB) 만들기, 검색하기

MySQL을 실행했으니 본격적으로 데이터베이스(DB)를 만들어 보겠습니다. 우선 현재 DB를 확인하기 위해 명령어 'show databases;'를 입력하면 ('s' 빠뜨리지 마세요 ㅎㅎ)

 

명령프롬프트로 MySQL 데이터베이스(Database) 검색하기

 

이렇게 현재 있는 데이터베이스를 확인할 수 있습니다. 기존 있는 DB는 어디에 사용되고 있는지 잘 모르니.. 그냥 건드리지 말고~ 저희가 사용할 데이터베이스를 만들어 보겠습니다. DB 만드는 명령어 'create database test;'를 입력하면 (임의로 DB이름을 'test'로 정하였습니다.) 

 

명령프롬프트로 MySQL 데이터베이스(Database) 만들기

이렇게 쿼리(Query) OK,라고 나오면 완료되었습니다. 엥? ㅎㅎ 만들어졌을까요? 그럼 확인차 다시 DB검색을 해보면 ~ 짠!! test Database가 생긴 것이 확인되네요 ^^

 

명령프롬프트로 MySQL 데이터베이스(Database) 만들기

 

  • Table 만들기

다음은 데이터를 저장하기 위해 table을 만들고 table에 엑셀(Excel)처럼 컬럼(column)을 만들어 보도록 하겠습니다. 먼저 만들어 놓은 'test' DB에 table을 만들거라 DB를 사용한다는 명령어 'use test'를 입력합니다.

 

명령프롬프트 MySQL 데이터베이스 사용하기

 

 

table을 만드는 명령어는 데이터의 형태, 컬럼 제목, primary key 등을 사용자의 용도에 맞게 설정해야 되는 항목이 추가로 들어가기 때문에 조금 다를 수도 있지만 저는 앞서 계속 다뤄왔던 아두이노의 온습도 센서로 측정된 데이터를 받을 계획에 맞춰서 설정해보도록 하겠습니다. 우선 table 만드는 명령어 'create table tempnhumi('라고 입력하면 다음 줄에 ->가 나오면 아래와 같이 차례로 입력하면 됩니다.

 

mysql>create table tempnhumi(

->temp float not null,

->humi float not null,

->primary key(temp)

->);

 

명령프롬프트 MySQL table 만들기

 

성공적으로 입력하면 역시 쿼리 OK라고 메시지가 나오고 완료됩니다. 역시나 만들어졌는지 확인하기 위해 table을 검색 'show tables;'를 입력하면 ~ 짠!! 아래와 같이 만들어졌습니다. (역시나 's' 빼먹지 마세요~ ㅎㅎ)

 

명령프롬프트 MySQL table 검색하기

 

  • 데이터 조회

이제 table까지 완료하였습니다. 데이터가 들어오면 table에 차곡차곡 쌓이겠죠? ㅎㅎ 데이터 조회하는 명령어는 'select*from tempnhumi'인데 아직 데이터가 없으니 아래처럼 Empty라고 나올 겁니다.

 

명령프롬프트 MySQL 데이터 조회

 


여기까지 MySQL을 이용하여 데이터베이스(Database, DB)를 구축하고 table까지 만들어 보았습니다. 꽤나 복잡하죠 ㅠㅠ 그래도 프로젝트 시작할 때 한 번 설정해놓으면 크게 변동할 게 없으니 파이팅해보죠~!! 그럼 수고하셨습니다.

 

긴 글 읽어주셔서 감사합니다. 최대한 경험을 바탕으로 쉽게 이해하려고 한 부분을 그대로 전달드리려고 노력하고 있습니다. 혹시 질문이나 좋은 의견 있으면 언제든지 댓글로 남겨주세요 ^^

 

 

 

반응형

+ Recent posts