조도 센서
•
연결방법 (아두이노 → 조도센서)
◦
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)로 하면 무한루프 늪에 빠지니 조심해야합니다.
•
켜짐 → 꺼짐 → 반복 에서 성공하면 점수를 전부 다 드리도록 하겠습니다. (체점기준을 안적었기에 그렇습니다.)
•
코드 제출 안 하신 분들은 감점이 있습니다.