블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 

'Arduino'에 해당되는 글 3

  1. 2018.09.30 ESP01 (ESP8266) 사용하기
  2. 2018.09.21 아두이노 무선 통신 모듈 (1)
  3. 2018.09.18 아두이노 기울기 센서와 소음 센서
 

ESP01 (ESP8266) 사용하기

프로그래밍/아두이노 | 2018.09.30 00:00 | Posted by 조대협

아두이노 ESP01 모듈 사용하기

조대협 (http://bcho.tistory.com)

아두이노 WIFI 모듈

아두이노 WIFI 모듈은 여러가지가 있는데, 아두이노용으로 나온 와이파이 실드의 경우에는 가격이 비싸다. (아두이노에서 WIFI 연결하는 방법은 http://bcho.tistory.com/1280 자료 참고) 그래서 가장 범용적으로 사용되는 칩셋은 ESP8266 칩셋인데, ESP8266 칩셋으로 나온 보드는 여러가지가 있다. ESP01~ESP14 모듈등이 있고, 조금더 사용이 편한 모듈로는 nodemcu와 같은 모듈이 있다.




ESP8266 모듈 시리즈 https://en.wikipedia.org/wiki/ESP8266

오늘 다루는 모듈은 이중에서 가장 저렴한 ESP01 모듈이다.

아두이노에서 이모듈을 사용하기에는 몇가지 넘어야할 산이 있다.

전원

ESP 01은 3V로 동작을 하는데, 전류 소모량이 많다. 그래서 아두이노 보드의 3.3V 단자에 연결하게 되면 전력양이 낮아서 오작동하는 경우가 많고 GND와 전원으로 들어가는 선이 많아서, 아래와 같이 배선이 복잡해진다.


<출처 : https://m.blog.naver.com/roboholic84/221261124179>

통신속도와 펌웨어 업그레이드

그리고 가장 난관중 하나가, 아두이노의 시리얼 통신의 경우 9600bps를 사용하는데, 불행하게도 ESP01의 기본 통신속도는 115200bps로 설정되어 있기 때문에 펌웨어 업그레이드를 통해서 디폴트 통신 속도를 9600 bps로 변경해줘야 한다. 이 과정에 여러 배선 설계를 해야 하고 별도의 펌웨어 업그레이드 프로그램을 설치해야하기 때문에 그 과정이 까다롭다.



<그림 USB to ESP01 연결 아답터>

그래서 아두이노 보드를 거치지 않고 바로 PC USB에서 ESP01로 연결을해서 쉽게 펌웨어를 업데이트할 수 있게 해주는 USB to ESP01 아답터가 있기는 하지만 여전히 펌웨어 업데이트가 필요하다.


ESP01 아답터

그래서 검색을 하다 찾은 아답터가 ESP01 아답터 이다.


이렇게 아답터 위에 ESP01 보드를 설치하면 되는 형태이다. (구매 링크)

https://m.blog.naver.com/roboholic84/221261124179 글에 상세한 소개와 설명이 잘 나와 있는데, 따라해보니 ESP01의 펌웨어 자체가 업그레이드 되어 있어서, 명령어가 동작하지 않는 부분이 있어서 몇가지 수정을 하였다. 포스팅 내용을 참고하여 몇가지 부분을 수정하였다.

배선 작업은 아래와 같다.


대략 빵판에 연결하면 다음과 같은 모습이된다.



레큘레이터가 내장되어 있기 때문에 아두이노 5V에 VCC를 연결하면 되고, RX와 TX를 각각 3번과 2번 포트에 연결한다.

다음에 아래와 같은 코드를 작성하여 실행한다.

#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());

 }

}


위의 예제는 아두이노 콘솔에서 받은 명령을 ESP01 시리얼 포트로 전송하고 ESP01 에서 나온 결과값을 아두이노 콘솔에 출력하도록 하는 코드이다. ESP01의 디폴트 통신속도가 115200이기 때문에 mySerial.begin에서 통신 속도를 115200으로 설정하였다. (추후 바꿀것이다.)


를 실행해서 AT 명령을 실행해보자. 연결이 제대로 되었으면 아래와 그림과 같이 OK 응답이 오는 것을 볼 수 있다.



다음 ESP01 보드의 통신 속도를 변경해보자,원본 문서에는 AT+CIOBAUD=9600 명령으로 변경하도록 되어 있는데, 이 명령은 최신 펌웨어에서는 동작하지 않고 AT+IPR이라는 명령을 사용해야 하는데, 이 명령은 연결되어 있는 동안만 통신 속도를 변경하고 다시 ESP01 디바이스를 뺐다가 다시 끼면 원래 통신속도로 돌아간다.

ESP01의 통신속도를 영구적으로 바꿔줄 수 있는 명령이 있는데, AT_UART_DEF라는 명령을 사용하면 된다. (참고 : https://www.esp8266.com/viewtopic.php?f=13&t=718)

사용법 : AT+ UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>


통신속도를 9600으로 영구적으로 변경하기 위해서는 아래 명령을 수행한다.

AT+UART_DEF=9600,8,1,0,0



통신 속도를 9600으로 변경하였기 때문에 코드상에서도 ESP01로 통신하는 속도를 9600으로 변경해줘야 한다.

 mySerial.begin(115200);

부분을

 mySerial.begin(9600);

으로 변경하여 실행하자


WIFI 연결 테스트

네트워크 모드

ESP8266은 네트워크 연결에 대해 3가지 모드를 제공한다.

  • 1 : Stand alone

  • 2 : AP

  • 3 : AP + Standalone

Stand alone 모드는 클라이언트로 작동하는 모드로 AP에 붙어서 네트워크 통신을 할 수 있다.

AP 모드는 ESP8266이 서버가 되는 모드로 다른 단말이 ESP8266에 Wifi로 연결될 수 있게 한다. 그리고 AP+Stand alone 모드는 서버와 클라이언트를 동시에 지원하는 모드이다. 여기서는 1번 AP+Standalone 모드를 사용하도록 하겠다.

모드 전환은 AT+CWMODE={모드 번호}로 가능하다


WIFI 연결하기

클라이언트 모드로 연결을 하였으면 WIFI에 연결해보자.

WIFI 목록을 찾는 명령은 AT+CWLAP 이다. 명령을 실행하면 아래 그림과 같이 연결 가능한 WIFI 목록이 출력된다.


다음 AT+CWJAP=”SSID”,”비밀번호" 명령을 이용하여 연결하고자 하는 WIFI 네트워크에 연결이 가능하다. 여기서는 U+NetC070 네트워크에 연결해보도록 하겠다

AT+CWJAP="U+NetC070","WIFI비밀번호"


명령을 실행하면 아래와 같이 WIFI에 연결이 된것을 확인할 수 있다.



연결이 완료 되었으면

AT+CIFSR

명령을 이용하면 연결된 IP 주소를 읽어낼 수 있다.


이렇게 연결이 된 상태에서는 아두이노의 전원을 껐다가 켜도 다시 같은 네트워크로 자동으로 붙기 때문에, 연결을 명시적으로 끊으려면

AT+CWQAP

명령을 이용하여 명시적으로 연결을 끊어줘야 한다.

다음글에서는 ESP01 모듈을 이용하여 서버와 HTTP 통신을 하는 방법에 대해서 알아보도록 한다.



아두이노 무선 통신 모듈

프로그래밍/아두이노 | 2018.09.21 00:41 | Posted by 조대협

아두이노 무선 통신 모듈


아두이노를 어느정도 테스트해보니, 서버에 붙여서 몬가를 해봐야겠다는 생각에 와이파이 지원 모듈을 찾다보니 꽤나 복잡해서 정리를 해본다.

아두이노의 무선 통신 모듈은 원래 아두이노 와이파이 실드라는 파츠로, 아두이노 우노 위에 붙여서 사용하는 형태 였는데, 사용방법은 편리하나 가격이 비싼 편이고, 아두이노 우노 시리즈에만 호환되는 단점을 가지고 있다.


<그림 아두이노 와이파이 실드 정품 >


그러다가 WIFI가 대중화된것이 ESP8266 이라는 칩셋인데, 아주 저렴한 가격에 (인터넷에서 2000원 수준) 이를 통해서 많이 대중화가 되었다.

<그림 AI Cloud사의 ESP8266 모듈>

가격은 저렴하지만 3.3V 전류를 사용하기 때문에, 별도의 저항등의 배선 설정이 필요하고, 특히 시리얼 라인 속도도 조정해야 하고, 펌웨어를 업그레이드해야 하는등 번거로운 작업이 필요하다. (특히 나같은 맥북 사용자에게는 쥐약인..)

ESP8266 모듈의 호한 모듈로는 AI Thinker사의 제품이 많은데 ESP-OO 식의 이름을 가지고 있는데, 인터넷 상에서 파는 제품은 ESP-12 시리즈가 많다. ESP-12등은 ESP8266 모듈 호환이라고 생각하면 된다. 


그래서 대체품을 찾은것이 nodemcu 라는 제품인데

<그림 ESP8266 기반의 nodemcu>


ESP 8266 모듈을 기판에 붙여 놓고 입출력 IO핀을 제공하면서도, USB 단자가 있어서 펌웨어 업그레이드를 상대적으로 편하게 할 수 있으며, Lua 스크립트로도 코딩이 가능하다.

즉 아두이노가 없이도 단독적으로 기능 수행이 가능하다는 이야기인데, 크기가 작고 와이파이 기능이 탑재되어 있어서 IOT 기기류로 많이 활용되는 듯하다. 특히 Lua 의 경우 HTTP나 MQTT와 같은 IOT 프로토콜을 손쉽게 호출할 수 있는 라이브러리가 있어서 어떤면에서는 아두이노보다 통신 프로그램에는 유리하지 않은가 싶다. 


ESP8266이 많이 사용되기는 했지만, 다음 버전으로 ESP32 라는 프로세서가 등장하는데, WIFI뿐 아니라 블루투스 통신을 함께 지원한다.

아무래도 후속 기중인 만큼 더 많은 GPIO 포트와, 더 빠른 WIFI통신을 지원하기는 하지만, 가격이 약간 더 비싸다는 단점이 있다. (6$~12$선)


<그림 ESP 32S 칩을 내장한 nodemcu 모듈 >


그외에, 아두이노 호환보드중에는 WIFI 기능을 내장한 보드들이 꽤 많다. 대표적인 보드로는 Wemos 사의 제품이 있는데, ESP8266 을 메인 CPU로 한후에, 우노에 맞는 사이즈와 핀 배열과 기능을 제공하면서 기본적으로 ESP8266 기반의 와이파이 통신을 지원한다. 


또는 아두이노 WIFI 실드 제품을 사용하는 것도 방법이 된다.






'프로그래밍 > 아두이노' 카테고리의 다른 글

ESP01 (ESP8266) 사용하기  (0) 2018.09.30
서보 모터 제어  (0) 2018.09.28
아두이노 무선 통신 모듈  (1) 2018.09.21
아두이노 기울기 센서와 소음 센서  (0) 2018.09.18
아두이노 조도 센서  (0) 2018.09.16
Hello 아두이노  (0) 2018.09.16

아두이노 기울기 센서와 소음 센서


아두이노 기울기와 소음센서를 간단하게 테스트 해봤다.


소음 센서

소음 센서는 소리가 나면 그 값을 아닐로그값으로 바꿔서 준다. +5V와 GND에 연결하고, 데이타값은 아날로그 포트에 연결해서 받는다. 



아래는 간단한 코드

#include <Arduino.h>


void setup() {

Serial.begin(115200);

}


void loop() {

int sound = 1024-analogRead(A0);

Serial.println(sound);

delay(20);

}


--- 9월 18일 수정 ---

위의 센서는 아날로그가 아니라 디지털임.

소리가 날때, 작은 값이 나오고, 소리가 안날때 1024값이 나오는데, 이건 중간에 가변 저항을 돌려보면 반대로 만들 수 있음 (포텐셔미터라고들 부르는데)

"디지탈 센서의 출력을 아날로그로 읽었으니 0과 1024 혹은 그에 가까운 값이 나오는것이 맞고, 그 사이값 30, 600, 900 이런 값들은 디지탈 출력이 빠른 시간에 ON/OFF 되는 것이 마치 PWM 출력처럼 읽혀서 나오는 값입니다." 커뮤니티에서 임성국님이 정리해주신 내용


기울기 센서

각도등은 받을 수 없고, 디지털 센서로 기울어진 여부만 측정한다.



마찬가지로 5V와 GND 단자에 연결한 후에, 데이타 단자를 디지털 단자에 연결하고, 이 단자를 입력값으로 설정하여 기울어진 여부를 입력 받는다.


#include <Arduino.h>


void setup() {

pinMode(13,INPUT);

Serial.begin(115200);


}


void loop() {

boolean tilt = digitalRead(13);

delay(300);

Serial.print(tilt);


}





'프로그래밍 > 아두이노' 카테고리의 다른 글

ESP01 (ESP8266) 사용하기  (0) 2018.09.30
서보 모터 제어  (0) 2018.09.28
아두이노 무선 통신 모듈  (1) 2018.09.21
아두이노 기울기 센서와 소음 센서  (0) 2018.09.18
아두이노 조도 센서  (0) 2018.09.16
Hello 아두이노  (0) 2018.09.16