본문 바로가기

Arduino

비전공자를 위한 Arduino를 이용하여 android 폰으로 Iot 전등 제어하기2(Arduino편)

반응형

https://pinlib.tistory.com/entry/zx

 

비전공자를 위한 Arduino를 이용하여 android 폰으로 Iot 전등 제어하기(android편)

이번 android편은 크게 3Step으로 이루어져 있습니다. STEP 1. 세팅하기 우선 view binding을 사용하기 위해 build.gradle module 수준에서 kotlinOption 하단에 작성한다. 뷰 바인딩(view binding)이란 레이아웃 XML 파

pinlib.tistory.com

이전 글에 이어서 이번에는 아두이노 편을 작성해보겠습니다.

 

이번 arduino편은 크게 ~로 이루어져 있습니다.

 

STEP 1. 세팅하기

세팅

이렇게 해줍니다.

 

중요 포인트
1. 보드 이름 ( esp8266 -> LOLIN(WeMos)D1 R1)

2. Upload Speed (115200)

3. Flash Size (FS:3MB OTA ~512KB)

4. CPU Frequency (80 MHz)

 

STEP 2. 코드

 

우선 아두이노가 연결할 와이파이의 공유기 값을 넣어줘야 합니다.

const char* ssid = "공유기 id";
const char* password = "공유기 비밀번호";

 

setup에는 아두이노와 공유기를 연결시키기 위해 해당 코드를 작성해야 합니다.

//WiFi 연결
  Serial.print("Connecting to ");
  Serial.print(ssid);
 
  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }

loop에서는 서브모터를 제어하기 위한 코드를 작성합니다.

  //led on using mortor
  if(request.indexOf("/On") > 0 ){
    client.print("Turning motor on");
 
    for(int i=0; i<15; i++){
      angle = angle + 1;
      if(angle >= 180){
        angle = 180;
      }
      servo.write(angle);
      delay(10);
    }
    delay(230);
  }

해당 코드에서 

if(request.indexOf("/On") > 0 ){

의 부분의 경우 android로부터 rest통신을 이용하여 /On이라는 index값을 받아왔을 때를 조건으로 서브모터를 제어하기 위해 사용했습니다.

 

이제 전체 코드입니다.

#include <SPI.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <Servo.h>

const char* ssid = "YOUR SSID";
const char* password = "YOUR PASSWORD";

WiFiServer server(80);

//servo
Servo servo;
int angle = 90; //servo mortor 초기 각도값

void setup() {
  
  //서보모터 연결 핀 설정 및 각도 초기화
  servo.attach(D7); 
  servo.write(angle);
  delay(1000);
 
  //WiFi 연결
  Serial.print("Connecting to ");
  Serial.print(ssid);
 
  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP Address: ");
  Serial.println(WiFi.localIP());

  //Server 시작
  server.begin();
  Serial.println("Server started");
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.print("/");
}

void loop() {
  //client 접속 확인
  WiFiClient client = server.available();
  if(!client){
    return;
  }

  //client가 보내는 데이터를 기다린다.
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  //요청을 읽는다.
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

   //mid
  if(request.indexOf("/Switch") > 0){
    Serial.println("Turning motor on");
    client.print("Turning motor on");
    angle = 90;
    servo.write(angle);
    }
  

  //led on using mortor
  if(request.indexOf("/On") > 0 ){
    client.print("Turning motor on");
 
    for(int i=0; i<15; i++){
      angle = angle + 1;
      if(angle >= 180){
        angle = 180;
      }
      servo.write(angle);
      delay(10);
    }
    delay(230);
  }

  //led off using mortor
  if(request.indexOf("/Off") > 0){ 
    switchState = "off";
    client.print("Turning motor off");

    for(int i=0; i<15; i++){
      angle = angle -1;
      if(angle<=0){
        angle = 0;
      }
      servo.write(angle);
      delay(10);
    }
    delay(230);
  }

  while(client.available()) {
    client.read();
  }

  client.print("HTTP/1.1 200 OK");
  client.print("Content-Type: text/html\r\n\r\n");
  Serial.println("클라이언트 연결 해제");
  
  angle = 90;
  servo.write(angle);

  delay(50);
}

 

해당 코드를 사용하신다면 아래 영상과 같이 잘 작동됩니다.

 

해당 코드는 깃허브에도 올려놓았습니다. 이번에 처음으로 public으로 올려봤습니다.

https://github.com/junseop619/iot_light_control_with_android

 

GitHub - junseop619/iot_light_control_with_android

Contribute to junseop619/iot_light_control_with_android development by creating an account on GitHub.

github.com

만약 더 좋은 생각이 난다면 git hub에는 더욱 최적화된 코드를 올릴테니 git hub를 참조해주세요

반응형