?>

Hard Copy World

HCW

ESP8266, ESP32

Home > Learning >

ESP8266, ESP32

ESP8266 - Arduino IDE 예제 (GPIO 제어)

페이지 정보

작성자 최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일16-02-10 18:02 조회6,449회 댓글0건

본문

 

본 문서는 아두이노 개발환경(IDE)를 이용해서 ESP8266 모듈을 다루는 예제들을 포함하고 있습니다.

 

ESP8266 Arduino IDE 는 ESP8266 모듈의 펌웨어를 제작하는 가장 간단한 방법입니다. ESP8266 Arduino IDE 개발환경을 설치하는 방법은 아래 문서를 참고하세요.

ESP8266을 위한 다양한 예제가 이미 갖추어져 있습니다. [Arduino IDE - File - Examples - ESP8266xxx] 예제들을 보면 다양한 기능들을 구현하는 방법이 나옵니다. 여기서 소개하는 예제는 NodeMCU V1 (ESP12E 기반) 보드에서 동작 테스트를 한 예제들입니다. 그리고 소개를 위해 예제 코드에 약간의 변형이 가해졌습니다.

NodeMCU 보드는 아래와 같이 핀이 배치되어 있으며, 펌웨어 업로드를 위해 필요한 FTDI 모듈을 내장하고 있어서 PC에 USB 연결만 하면 사용할 수 있습니다.

Node-MCU-Pin-Out-Diagram1

 

 

Blink (Digital Output)

 

가장 쉽고 단순한 LED 켜기 예제입니다. 소스코드는 아래 링크에서 보실 수 있습니다.

LED 는 저항과 함께 NodeMCU 보드의 GPIO14 (D5) 핀에 연결하면 됩니다.

int LED = 14;    // Use D5, GPIO14

void setup() {
  pinMode(LED, OUTPUT);     // Initialize the LED pin as an output
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED, LOW);   // Turn the LED
  delay(1000);    // Wait for a seconds
  digitalWrite(LED, HIGH);  // Turn the LED
  delay(1000);    // Wait for a seconds
}

코드를 보시면 아실 수 있듯, 핀 번호 빼고 아두이노 스케치와 완전 동일합니다. pinMode() 함수를 이용해 특정 핀을 초기화 해줬습니다. 그리고 digitalWrite 함수로 3V 출력을 on/off 해줍니다.

아두이노 개발환경이 ESP8266 모듈을 지원하도록 만든 목적이 바로 이겁니다. 전 세계적으로 가장 보편화된 개발방법을 ESP8266 에도 적용함으로써 기존에 존재하던 수 많은 라이브러리를 쓸 수 있게도 해주고, 보다 쉽게 ESP8266 펌웨어 제작을 시작하도록 도와줍니다.

아두이노와 사용법은 동일하지만 한 가지 주의할 점이 있습니다. setup() 함수이후 loop() 함수는 무한 반복됩니다. 이때 loop() 함수가 한번 끝까지 실행되고 다음 loop() 함수가 실행되기전 ESP8266 의 복잡한 WiFi 통신 기능들을 처리하기 위해 ESP8266 core가 실행됩니다. 따라서 loop() 함수에서 너무 복잡한 작업을 처리해버리면 ESP8266 core가 충분히 자기 역할을 할 수 없습니다. 가급적 loop()를 빨리 처리하고 제어권을 넘겨줘야 합니다.

가이드에서는 loop() 안의 사용자 루틴이 50ms 이내에 끝나기를 권장합니다. 만약 이 이상의 시간을 요할경우 중간에 delay() 함수로 약간의 시간 간격을 주는 것이 좋습니다. delay() 는 사용자의 루틴을 잠시 멈추고 ESP8266 core가 동작할 수 있도록 해줍니다. (yield() 함수도 같은 역할을 하는듯 합니다.)

 

 

Button (Digital Input)

 

digitalWrite() 함수를 이용해서 LED 출력을 제어해봤으니 이번에는 digitalRead() 함수를 이용해서 디지털 입력을 받아보겠습니다. 버튼을 연결해서 클릭을 인식한 뒤, LED를 on/off 시키는 예제입니다.

버튼을 GPIO4(D2) 핀에 pull-down 저항을 이용해 연결합니다.

  • ESP8266 GPIO14 ==> 버튼 다리 1
  • ESP8266 3V ==> 버튼 다리 2
  • ESP8266 GND ==> 10K 저항 ==> 버튼 다리 2

소스코드는 아래와 같습니다.

int LED = 14;    // Use D5, GPIO14
int BUTTON = 4;    // Use D2, GPIO4

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);     // Initialize the LED pin as an output
  pinMode(BUTTON, INPUT);     // Initialize the BUTTON pin as an input
}

// the loop function runs over and over again forever
void loop() {
  boolean buttonPressed = digitalRead(BUTTON);
  Serial.println(buttonPressed);
  digitalWrite(LED, buttonPressed);
  delay(100);  // Wait for a while
}

setup() 초기화 함수에서 버튼 입력을 받기 위해 GPIO 4번 핀을 INPUT 모드로 초기화 했습니다.

그리고 loop() 반복함수에서는 digitalRead() 함수로 버튼 상태를 읽습니다. 값은 HIGH(=true, 3V, 버튼 클릭) 또는 LOW(=false, 0V, GND, 버튼 릴리즈) 값으로 들어옵니다. 따라서 이 값을 그대로 digitalWrite() 함수에 전달해주면 버튼을 누를때마다 LED가 켜집니다.

 

 

Potentiometer (ANALOG INPUT)

 

이번에는 아날로그 입력을 받는 방법입니다. 소스코드는 아래 링크에 있습니다.

  • https://github.com/godstale/ESP8266_Arduino_IDE_Example/blob/master/example/AnalogInput_Potentiometer/AnalogInput_Potentiometer.ino

아날로그 입력을 테스트 하기 위해서 포텐셔미터를 사용했습니다. 포텐셔미터를 ADC0(A0) 아날로그 핀에 연결하면 됩니다.

  • 포텐셔미터 1 핀 ==> ESP8266 3V
  • 포텐셔미터 2 핀 (가운데 핀) ==> ESP8266 ADC0(A0)
  • 포텐셔미터 3 핀 ==> ESP8266 GND

그리고 소스코드를 올리면 시리얼 통신으로 포텐셔미터에서 읽은 아날로그 입력값을 출력해줍니다.

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

// the loop function runs over and over again forever
void loop() {
  int analog = analogRead(A0);
  Serial.println(analog);
  delay(100);  // Wait for a while
}

아두이노와 동일합니다. analogRead() 함수로 아날로그 핀의 전압 변화를 읽을 수 있습니다. 단, ESP8266 모듈은 아날로그 입력 핀이 하나(A0, ADC0) 뿐입니다.

소스에서는 시리얼 통신을 위해 Serial.begin() 으로 통신 초기화를 해줬습니다. 아두이노처럼 Serial.print(), println(), available(), read() 함수를 사용할 수 있습니다.

 

 

LED DIMMING (PWM - ANALOG OUTPUT)

 

이번 예제에서는 PWM을 이용해서 LED 밝기를 조절해 볼겁니다. 앞선 예제에서 포텐셔미터를 연결했으니 포텐셔미터로 LED 밝기 조절이 가능하도록 할겁니다. 소스코드는 아래에서 구할 수 있습니다.

앞서 사용한 LED, 포텐셔미터를 그대로 사용하시면 됩니다.

int LED = 14;    // Use D5, GPIO14

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);     // Initialize the LED pin as an output
}

// the loop function runs over and over again forever
void loop() {
  int analog = analogRead(A0);
  Serial.println(analog);
  analogWrite(LED, analog/4);
  delay(100);  // Wait for a while
}

PWM 사용은 간단합니다. setup() 초기화 함수에서 pinMode()로 LED 핀을 OUTPUT 모드로 초기화 합니다. 그리고 analogWrite() 함수로 값을 써주면 됩니다. (0~255)

포텐셔미터의 값을 읽는 analogRead() 범위가 0~1023이니 4로 나눠준 값을 analogWrite() 함수에 사용하면 됩니다.

 

 

기타 예제

 

위에서 소개한 간단한 예제 외에도 다양한 센서 사용을 위한 아두이노 라이브러리들을 사용할 수 있습니다. 아두이노 제어를 위해 레지스트리를 건드리지 않는 라이브러리의 경우 ESP8266에서도 문제 없이 사용 가능한 것으로 알려져 있습니다. 아래 라이브러리들은 ESP8266에서도 사용 가능한 (테스트 된) 호환 라이브러리입니다.

  • Adafruit_ILI9341 - Port of the Adafruit ILI9341 for the ESP8266
  • arduinoVNC - VNC Client for Arduino
  • arduinoWebSockets - WebSocket Server and Client compatible with ESP8266 (RFC6455)
  • aREST - REST API handler library.
  • Blynk - easy IoT framework for Makers (check out the Kickstarter page).
  • DallasTemperature
  • DHT-sensor-library - Arduino library for the DHT11/DHT22 temperature and humidity sensors. Download latest v1.1.1 library and no changes are necessary. Older versions should initialize DHT as follows: DHT dht(DHTPIN, DHTTYPE, 15)
  • Encoder - Arduino library for rotary encoders. Version 1.4 supports ESP8266.
  • NeoPixel - Adafruit's NeoPixel library, now with support for the ESP8266 (use version 1.0.2 or higher from Arduino's library manager).
  • NeoPixelBus - Arduino NeoPixel library compatible with ESP8266. Use the "DmaDriven" or "UartDriven" branches for ESP8266. Includes HSL color support and more.
  • PubSubClient - MQTT library by @Imroy.
  • RTC - Arduino Library for Ds1307 & Ds3231 compatible with ESP8266.
  • Souliss, Smart Home - Framework for Smart Home based on Arduino, Android and openHAB.
  • ST7735 - Adafruit's ST7735 library modified to be compatible with ESP8266. Just make sure to modify the pins in the examples as they are still AVR specific.
  • Task - Arduino Nonpreemptive multitasking library. While similiar to the included Ticker library in the functionality provided, this library was meant for cross Arduino compatibility.
  • UTFT-ESP8266 - UTFT display library with support for ESP8266. Only serial interface (SPI) displays are supported for now (no 8-bit parallel mode, etc). Also includes support for the hardware SPI controller of the ESP8266.
  • WiFiManager - WiFi Connection manager with web captive portal. If it can't connect, it starts AP mode and a configuration portal so you can choose and enter WiFi credentials.
  • OneWire - Library for Dallas/Maxim 1-Wire Chips.
  • Adafruit-PCD8544-Nokia-5110-LCD-Library - Port of the Adafruit PCD8544 - library for the ESP8266.

 

인터넷을 검색해 보면 이 외에도 주요한 센서들의 예제를 구하실 수 있습니다.

 

 

참고자료

 

추천 0
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.