///
Search
🏓

7주차 Wemos R1 D1 아두이노 보드와 각종센서사용법(2)

조도 센서

연결방법 (아두이노 → 조도센서)
5V 조도센서 바깥쪽
GND 저항 반대쪽
A0 저항과 조도센서랑 겹치는 쪽
보트레이트 속도 : 9600rates
소스코드
void setup() { Serial.begin(9600); } void loop(){ int Light = analogRead(A0); Serial.println(Light); }
Arduino
복사
연결예시
주의사항!
1.
꽂을때에 센서를 잘 꽂으세요!
2.
저항에 따라서 출력되는 값이 많이 달라질수도 있어요. 제가 실습한 저항의 색상은 검검 입니다.

가변저항

연결방법 (아두이노 → 가변저항센서 래버를 정면 방향이라고 가정하겠음)
5V 가변저항 오른쪽
GND 가변저항 왼쪽
A0 가변저항 가운데
보트레이트 속도 : 9600rates
소스코드
void setup() { Serial.begin(9600); } void loop(){ int Light = analogRead(A0); Serial.println(Light); }
Arduino
복사
연결예시

과제 답안

수업 도중에 실수한 코드
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> //LED는 긴다리가 +이다. const char* ssid = ""; const char* password = ""; ESP8266WebServer server(80); //접속 포트를 설정하여 웹서버를 구축한다. const int led = 14; //D13/SCK/D5 led 다리가 긴곳을 여기에 꽂아야 한다. String s,s_head; // 스트링 변수 두개 만든다. void handleRoot() { digitalWrite(led, HIGH); //핀에 하이 즉 전류를 주면 켜지게 되는 것이다. s=s_head+"<h1>켜짐</h1><br>"; server.send(200, "text/html", s); //server.send(200, "text/plain", "hello from esp8266!"); } void handleNotFound(){ digitalWrite(led, 1); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i<server.args(); i++){ message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); digitalWrite(led, 0); } // WIFI_STA (Station mode, Stand-alone mode) // 다른 공유기에 접속해서 IP를 할당받고, HTTP 통신을 사용하는 모드입니다 void setupWifi() { //setup WiFi WiFi.mode(WIFI_STA);//와이파이 Static Access 이걸로 접속하는 것이 일반적이다. WiFi.begin(ssid, password); //아이디와 비밀번호로 접속을 시도하는 것 Serial.println(""); // Wait for connection 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()); } void setup(void){ pinMode(led, OUTPUT); //14번 핀 아웃풋한다. digitalWrite(led, LOW); //꺼진 상태로 초기화 Serial.begin(115200); //통신속도 // 여기 프로그램 부분을 함수로처리 setupWifi(); //상단의 Wifi setup 함수로 넘어간다. // 스마트폰에 맟게 크기 조정, html에서 한글 출력하게 설정 s_head="<meta name='viewport' content='width=device-width, initial-scale=1.0'/>"; //s=s+"<meta http-equiv='refresh' content='5'/>"; s_head=s_head+"<meta http-equiv='Content-Type' content='text/html;charset=utf-8' />"; server.on("/", handleRoot);// 클라이언트 요청에 대한 함수 즉 이벤트이다. 이벤트가 오면 함수를 연결해주는 것이다. Handleroot는 위에있다. server.on("/inline", [](){ //server.send(200, "text/plain", "this works as well"); digitalWrite(led, LOW); s=s_head+"<h1>꺼짐</h1><br>"; server.send(200, "text/html", s); }); server.on("/", handleRoot);// 클라이언트 요청에 대한 함수 즉 이벤트이다. 이벤트가 오면 함수를 연결해주는 것이다. Handleroot는 위에있다. server.on("/loop", [](){ s=s_head+"<h1>반복</h1><br>"; server.send(200, "text/html", s); while(1){ digitalWrite(led, HIGH); delay (200); digitalWrite(led, LOW); delay (200);// 클라이언트 요청을 받는 함수를 살려줘야한다. 무한루프 늪에 빠짐 } }); server.onNotFound(handleNotFound);//서버에서 요청하는 함수가 없으면 이걸 발생 시키는것이다.//이 함수는 위에 있다. // 즉 존재하지 않는 주소로 접속 하였을때에 처리할 함수를 지정하는 함수 server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); //서버가 시작되고 나서 클라이언트의 요청을 받는 함수 //클라이언트가 접속하는 주소에 따라 해당하는 처리 함수를 호출한다. }
Arduino
복사
정답
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> //LED는 긴다리가 +이다. const char* ssid = ""; const char* password = ""; int a = 1; ESP8266WebServer server(80); //접속 포트를 설정하여 웹서버를 구축한다. const int led = 14; //D13/SCK/D5 led 다리가 긴곳을 여기에 꽂아야 한다. String s,s_head; // 스트링 변수 두개 만든다. void handleRoot() { a = 2; digitalWrite(led, HIGH); //핀에 하이 즉 전류를 주면 켜지게 되는 것이다. s=s_head+"<h1>켜짐</h1><br>"; server.send(200, "text/html", s); //server.send(200, "text/plain", "hello from esp8266!"); } void handleNotFound(){ digitalWrite(led, 1); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i<server.args(); i++){ message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); digitalWrite(led, 0); } // WIFI_STA (Station mode, Stand-alone mode) // 다른 공유기에 접속해서 IP를 할당받고, HTTP 통신을 사용하는 모드입니다 void setupWifi() { //setup WiFi WiFi.mode(WIFI_STA);//와이파이 Static Access 이걸로 접속하는 것이 일반적이다. WiFi.begin(ssid, password); //아이디와 비밀번호로 접속을 시도하는 것 Serial.println(""); // Wait for connection 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()); } void setup(void){ pinMode(led, OUTPUT); //14번 핀 아웃풋한다. digitalWrite(led, LOW); //꺼진 상태로 초기화 Serial.begin(115200); //통신속도 // 여기 프로그램 부분을 함수로처리 setupWifi(); //상단의 Wifi setup 함수로 넘어간다. // 스마트폰에 맟게 크기 조정, html에서 한글 출력하게 설정 s_head="<meta name='viewport' content='width=device-width, initial-scale=1.0'/>"; //s=s+"<meta http-equiv='refresh' content='5'/>"; s_head=s_head+"<meta http-equiv='Content-Type' content='text/html;charset=utf-8' />"; server.on("/", handleRoot);// 클라이언트 요청에 대한 함수 즉 이벤트이다. 이벤트가 오면 함수를 연결해주는 것이다. Handleroot는 위에있다. server.on("/inline", [](){ a = 2; //server.send(200, "text/plain", "this works as well"); digitalWrite(led, LOW); s=s_head+"<h1>꺼짐</h1><br>"; server.send(200, "text/html", s); }); server.on("/loop", [](){ a=1; s=s_head+"<h1>반복</h1><br>"; server.send(200, "text/html", s); while(a==1){ digitalWrite(led, HIGH); delay (200); digitalWrite(led, LOW); delay (200); server.handleClient(); //서버가 시작되고 나서 클라이언트의 요청을 받는 함수 } }); server.onNotFound(handleNotFound);//서버에서 요청하는 함수가 없으면 이걸 발생 시키는것이다.//이 함수는 위에 있다. // 즉 존재하지 않는 주소로 접속 하였을때에 처리할 함수를 지정하는 함수 server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); //서버가 시작되고 나서 클라이언트의 요청을 받는 함수 //클라이언트가 접속하는 주소에 따라 해당하는 처리 함수를 호출한다. }
Arduino
복사

참고 말씀

수업시간에 ""server.handleClient(); ""의 필요성을 언급하지 못하고 넘어갔습니다.
서버는 항상 요청받을 준비가 되어있어야하는데 저기 적혀있는것 처럼 하게 된다면
server.handleClient(); //서버가 시작되고 나서 클라이언트의 요청을 받는 함수
Arduino
복사
다른 요청이 들어왔을때 켜짐 꺼짐이 되도록 조치를 하였습니다.
반복문을 while(1)로 하면 무한루프 늪에 빠지니 조심해야합니다.
켜짐 → 꺼짐 → 반복 에서 성공하면 점수를 전부 다 드리도록 하겠습니다. (체점기준을 안적었기에 그렇습니다.)
코드 제출 안 하신 분들은 감점이 있습니다.