반응형
https://pinlib.tistory.com/entry/zx
이전 글에 이어서 이번에는 아두이노 편을 작성해보겠습니다.
이번 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
만약 더 좋은 생각이 난다면 git hub에는 더욱 최적화된 코드를 올릴테니 git hub를 참조해주세요
반응형
'Arduino' 카테고리의 다른 글
비전공자를 위한 Arduino를 이용하여 android 폰으로 Iot 전등 제어하기(android편) (0) | 2023.09.09 |
---|---|
오류범벅(ESP8266, ESP-01, Arduino UNO) (0) | 2023.05.25 |
안드로이드로 아두이와 서버통신 제어하기(WIFI D1 R1, ESP8266, 모터제어, JSON) (0) | 2023.05.09 |
두근두근 납땜하기 (0) | 2023.04.29 |
안드로이드 앱을 통해 아두이노 led 제어하기 (0) | 2023.04.15 |