본문 바로가기
아두이노 응용

[아두이노/WiFi/서보모터] Arduino WeMos D1 WiFi (ESP8266) 호환 보드와 휴대폰 브라우저를 통한 서보 모터 구동

by 작동미학 2019. 8. 4.
반응형

ESP8266 보드가 포함된 Arduino 호환 보드를 활용해 서보 모터(servo motor)를 구동한다.

 

▶ 이 가이드를 따라하면

- Arduino D1 Wifi 버전으로 WiFi 통신을 통해 서보 모터 제어를 테스트해볼 수 있다.

 

▶ 부품 설명 및 회로 구성

이미 소개한 적이 있는 WeMos D1 WiFi 아두이노 호환 보드이다( https://bbangpan.tistory.com/93 ) 해당 가이드대로 필요한 보드 라이브러리를 다운받자. 그리고 역시 소개한 바 있는 서보 모터 ( https://bbangpan.tistory.com/6 )를 통해 간단하게 제어해보자.

조금 다른 것은 제어를 D1 보드의 ESP8266모듈과 같은 WiFi AP 연결되어있는 휴대폰의 브라우저로 있다는 점이다. (지난 시간에 시험했던 D1 WiFi 버전의 웹서버 기능을 응용해보자)

  

Arduino  호환 보드 D1 WiFi 버전(ESP8266모듈포함) + 서보 모터 연결(5V, GND, D5)
D1 WiFi  보드 구동에 필요한 Arduino 개발 툴 설정 / ESP8266 호환보드 라이브러리 설치후

 

WeMos D1 호환보드 라이브러리를 설치했다고 가정하고 아래 소스를 컴파일해서 업로드 해보자.

특정 URL로 접속하면 Servo Motor를 특정 각도로 만들어 준다. 접속 URL은 시리얼 모터를 통해 나온 IP를 통해 파악이 가능하다.

Github 주소 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_d1wifi_servocon.ino

 

/* Originally posted on www.bbangpan.com

   Program Description: Mobile browser controlled servo motor on WeMos D1 WiFi board

   Tested on : Arduino 1.8.5, Arduino Compatible D1 WiFi, Servo Motor

  

   Copyright (c) 2019 www.bbangpan.com. All rights reserved.

   This program can be used for any non-commercial purpose freely. */

 

#include <Servo.h>

#include <ESP8266WiFi.h>

#include <ESP8266WebServer.h>

 

const char* ssid = "자신의 SSID를 넣는다";

const char* pass = "자신의 AP 암호를 넣는다";

 

ESP8266WebServer server(80);

Servo myservo;

 

void setup(void){

  Serial.begin(115200);

  Serial.println(".");

 

  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

 

  Serial.println("");

  Serial.print("Connected to ");

  Serial.println(ssid);

  Serial.print("IP address: ");

  Serial.println(WiFi.localIP());

 

  server.on("/", [](){

    server.send(200, "text/html", "<h1>ON or OFF : <a href=\"/on\">ON</a> &nbsp;&nbsp;or <a href=\"/on\">OFF</a> or URL : /s?degree=90</h1>");

  });

 

  server.on("/s", [](){

    String sdegree = server.arg("degree");

    int degree = sdegree.toInt();

    Serial.print("degree: ");

    Serial.println(degree);

    myservo.write(degree);

    server.send(200, "text/plain", String(degree, DEC));

  });

 

  server.on("/on", [](){

    Serial.println("ON");

    myservo.write(180);

    server.send(200, "text/html", "<h1>ON! : <a href=\"/off\">OFF</a> or URL : /s?degree=90 </h1>");

  });

 

  server.on("/off", [](){

    Serial.println("OFF");

    myservo.write(0);

    server.send(200, "text/html", "<h1>OFF! : <a href=\"/on\">ON</a> or URL : /s?degree=90 </h1>");

  });

 

  server.begin();

  Serial.println("HTTP server started");

 

  myservo.attach(D5);   // Servo attached to D5 pin

  myservo.write(0);

}

 

void loop(void){

  server.handleClient();

}

컴파일 업로드 후 나온 시리얼 모니터 ( 툴 -> 시리얼 모니터 선택 )  화면

해당 보드와 같은 AP에 연결된 휴대폰으로 http://192.168.0.15/ (위 화면에 표기된 IP address 참조)를 입력한다.

 

http://IP주소/ (초기 화면), 각기 ON/OFF링크를 선택해보라

 

 

http://IP주소/on 는 0 도, http://IP주소/off 는 180도로 서보모터 제어

이렇게 해당 페이지에 접속하면 간단히 ON, OFF로 된 링크를 눌러 서보 모터를 제어할 수 있다

https://www.youtube.com/watch?v=ZgsQsL4du-U

참고로 http://IP주소/s?degree=각도 는 해당 각도로 돌려주는 코드가 구현 되어 있다.

 

사실은 위 할당 IP를 얻으려면 시리얼 모니터(아두이노 개발툴의 툴 메뉴)를 사용해야 하지만, ESP8266내의 http client 예시를 통해 자신이 운영하는 인터넷 웹 서버로 전송한다던가, WiFi APIP매핑 기능(외부 IP -> 내부 사설 IP) 등을 사용하여 휴대폰을 통해 외부에서도 집안에 접속해 무언가를 제어할 수 있게 만들 수 있다. ESP 8266이 자체 보유된 Arduino 호환 보드의 장점이다. 일전에 소개했던 D1 mini에서도 위 코드와 조합 그대로 사용이 가능하다.

 

▶ 구매 가이드

WeMos D1 WiFi : https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20190731080827&SearchText=D1+WiFi&switch_new_app=y ($3)

 

강의 키워드

WeMos D1 WiFi, 아두이노, ESP8266, 서보 모터, servo motor, 무선 제어, 휴대폰, 브라우저, 스마트폰

반응형