일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 출처 : https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
- toString
- https://velog.io/@velopert/create-typescript-react-component
- 게시판
- object
- http://jeonghwan-kim.github.io/dev/2019/06/25/react-ts.html
- 출처 : https://webdir.tistory.com/506
- Today
- Total
Back Ground
아두이노 - 이더넷쉴드 본문
1.이더넷 쉴드를 사용하여, 웹서버 만들기
▪ 이더넷
유선 인터넷 연결
https://www.temboo.com/arduino
사이트를 참조하여, 아두이노와 이더넷의 연결을 쉽게 하자!
2-1.웹 클라이언트를 켜서, 시리얼모니터에 구글사이트로 접근을 해보자.
2-2.웹 서버를 켜서,자신의 아이피를 확인하고, IP수정후 웹서버에 접근을 해보자!
브라우저로 접근을 하면, 아날로그 값 5개를 볼 수 있다.
스케치
예제 코드 수정을 해보자! (녹색부분을 넣을 것)
1. 63번 라인부터 80번 라인까지 주석처리를 한다.
2. 아래 구문을 입력하여 보자!
if (c == ' \n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<meta = charset= \"utf-8 \">");
client.println("<title>아두이노 배우기</title>");
client.println("</head>");
client.println("<body><center>");
client.println("<h1>아두이노 배우기 - 사물인터넷 장치 만들기</h1><br>");
client.println("<font size = 5 color = red > 첫번째 만든 아두이노 웹 서버 </font>");
client.println("</center></body>");
client.println("</html>");
break;
}
결과를 확인하여 보자!!
2-3.아두이노에서 버튼을 누르면 인터넷에 결과가 나오는 예제
스케치
웹서버의 예제에서 56번 라인부터 91번 라인까지 주석처리한다.(소스수정)
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
if ( digitalRead(2) ) {
client.println("<html><body> Pressed!</body></html>");
} else {
client.println("<html><body>Not Pressed!</body></html>");
}
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
이더넷 예제파일을 참조할 것
기타 참고자료는 네이버 카페 아두이노스토리를 활용할것!
http://cafe.naver.com/arduinostory/3415
----- 이더넷 쉴드 서버로 만드는 법 -----
ping 으로 없는 주소를 찾아서 확인해본다
예제
PC인터넷 local로 들어가보면
이더넷 쉴드 시리얼 모니터를보면 서버로 설정 된 걸 알수있다.
- 이더넷 쉴드 예제 모음 -
다운로드
↓
서버 예제 중
아두이노 아이피로 출력하기
결과
소스
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x67, 0xCB };
EthernetServer server(80);
void setup() {
Serial.begin(9600);
Ethernet.begin(mac);
Serial.print("This IP address : ");
IPAddress ip = Ethernet.localIP();
Serial.println(ip);
server.begin();
}
void loop() {
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) { // while - start
if (client.available()) { //if - begin
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
makeHTMLPage(client);
break;
}
if (c == '\n') { currentLineIsBlank = true; }
else if (c != '\r') { currentLineIsBlank = false; }
} // if - end
} // while - end
delay(1);
client.stop();
}
}
void makeHTMLPage(EthernetClient client)
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<meta = charset=\"utf-8\">");
client.println("<title>아두이노 배우기</title>");
client.println("</head>");
client.println("<body><center>");
client.println("<h1>아두이노 배우기 - 사물인터넷 장치 만들기</h1><br>");
client.println("<font size = 5 color = red > 첫번째 만든 아두이노 웹 서버 </font>");
client.println("</center></body>");
client.println("</html>");
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<meta = charset=\"utf-8\">");
client.println("<title>아두이노 배우기</title>");
client.println("</head>");
client.println("<body><center>");
client.println("<h1>아두이노 배우기 - 사물인터넷 장치 만들기</h1><br>");
client.println("<font size = 5 color = red > 첫번째 만든 아두이노 웹서버입니다. 홍길동닷컴 </font>");
client.println("</center></body>");
client.println("</html>");
}
----- 예제 PDF 다운로드 -------
↓
아두이노 기반 사물인터넷 장치 만들기(네이버카페아두이노스토리).pdf
------------------------------------------------------------------------------------------------------------
Switch 체크시
웹 브라우져의 OFF/ON이 바꾸는 -예제-
- EX3-1_Arduino_Web_Server_with_switch.ino -
※주의
아두이노엔 Pin이3 이라면 그 위에 겹치는 쉴드는 D2 다
이런식으로 마춰서 꼽으면 된다.
소스
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x67, 0xCB };
EthernetServer server(80);
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac);
Serial.print("This IP address : ");
Serial.println( Ethernet.localIP() );
server.begin();
pinMode(2, INPUT);
}
void loop()
{
EthernetClient client = server.available();
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<title>Arduino Read Switch State</title>");
client.println("<meta http-equiv=\"refresh\" content=\"1\">");
client.println("</head>");
client.println("<body>");
client.println("<h1>Switch</h1>");
client.println("<p>State of switch is:</p>");
GetSwitchState(client);
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') { currentLineIsBlank = true; }
else if (c != '\r') { currentLineIsBlank = false; }
}
}
delay(1);
client.stop();
}
}
void GetSwitchState(EthernetClient cl)
{
if (digitalRead(2)) {
cl.println("<p>ON</p>");
}
else {
cl.println("<p>OFF</p>");
}
}
웹 브라우져에 이런식으로 뜨게 된다.
버튼을 연결해서 누르고 있을때
버튼을 눌렀을 시
이렇게 ON 으로 바뀐다
-------------------------------------------------------------------------------------------
IP 주소에 따른 신호 주기 -예제-
IP 주소 에 /$1 이 있을 경우 LED에 불이 들어 오고
/$2에 LED불이 꺼진다
불이 들어오고 나오고를 알수 있다
(이 예제가 좀 이상한지 $1도 불이 오고 $2도 불이 들어온다.)
9번 Pin에 연결
시리얼 모니터 (IP 주소 확인)
소스
#include <SPI.h>
#include <Ethernet.h>
boolean Ready = false;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x24, 0x5E };
EthernetServer server(80);
String HTTP_req;
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac);
Serial.print("My IP address: ");
Serial.println( Ethernet.localIP() );
server.begin();
pinMode(9, OUTPUT);
}
void loop()
{
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
HTTP_req += c;
Serial.print(c);
if (c == '\n' && currentLineIsBlank) {
if ( HTTP_req.indexOf("$1") > -1 ) {
digitalWrite(9, HIGH);
}
if ( HTTP_req.indexOf("$2") > -1 ) {
digitalWrite(9, LOW);
}
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}
---------------------------------------------------------------
웹 브라우져로 LED 불 켜기 끄기 - 예제 -
소스
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x67, 0xCD };
EthernetServer server(80);
String HTTP_req;
boolean LED9_status = 0;
boolean LED8_status = 0;
#define LED9_PIN 9
#define LED8_PIN 8
void setup() {
Serial.begin(9600);
Ethernet.begin(mac);
Serial.print("This IP address : ");
IPAddress ip = Ethernet.localIP();
Serial.println(ip);
server.begin();
pinMode(LED9_PIN, OUTPUT);
pinMode(LED8_PIN, OUTPUT);
}
void loop()
{
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
HTTP_req += c;
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html>");
client.println("<meta charset=\"utf-8\"/>");
//<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />");
client.println("<html>");
client.println("<head>");
client.println("<title>Arduino LED Control</title>");
client.println("</head>");
client.println("<body>");
client.println("<h1><center> 네이버 카페,\"아두이노 배우기\"<br>");
client.println("사물인터넷 장치 만들기 - LED 제어</center><br>");
client.println("<p>Click to switch LEDs on and off.</p>");
client.println("<form method=\"get\">");
ProcessCheckbox(client);
client.println("</form></h1>");
client.println("</body>");
client.println("</html>");
Serial.print(HTTP_req);
HTTP_req = "";
break;
}
if (c == '\n') { currentLineIsBlank = true; }
else if (c != '\r') { currentLineIsBlank = false; }
}
}
delay(1);
client.stop();
}
}
// switch LED and send back HTML for LED checkbox
void ProcessCheckbox(EthernetClient cl)
{
/*
Serial.print("HTTP_req.indexOf(\"LED9=1\") -> "); Serial.println( HTTP_req.indexOf("LED9=1") );
Serial.print("HTTP_req.indexOf(\"LED8=1\") -> "); Serial.println( HTTP_req.indexOf("LED8=1") );
Serial.print("HTTP_req.indexOf(\"LED9=0\") -> "); Serial.println( HTTP_req.indexOf("LED9=0") );
Serial.print("HTTP_req.indexOf(\"LED8=0\") -> "); Serial.println( HTTP_req.indexOf("LED8=0") );
*/
if (HTTP_req.indexOf("LED9=1") > -1 ) {
LED9_status = ( HTTP_req.indexOf("LED9=1") < 20 ) ? 1 : 0;
}
if (HTTP_req.indexOf("LED8=1") > -1 ) {
LED8_status = ( HTTP_req.indexOf("LED8=1") < 20 ) ? 1 : 0;
}
if (LED9_status) { // switch LED on
digitalWrite(LED9_PIN, HIGH);
cl.println("<input type=\"checkbox\" name=\"LED9\" value=\"1\" onclick=\"submit();\" checked>LED9<br>");
} else {
digitalWrite(LED9_PIN, LOW);
cl.println("<input type=\"checkbox\" name=\"LED9\" value=\"1\" onclick=\"submit();\">LED9<br>");
}
if (LED8_status) { // switch LED on
digitalWrite(LED8_PIN, HIGH);
cl.println("<input type=\"checkbox\" name=\"LED8\" value=\"1\" onclick=\"submit();\" checked>LED8<br>");
} else { // switch LED off
digitalWrite(LED8_PIN, LOW);
cl.println("<input type=\"checkbox\" name=\"LED8\" value=\"1\" onclick=\"submit();\">LED8<br>");
}
}
'아두이노' 카테고리의 다른 글
아두이노 - 블루투스 (1) | 2016.06.22 |
---|---|
아두이노 - 트위터에 글씨 올리기 (0) | 2016.06.22 |
아두이노 - 적 외선 센서 (0) | 2016.06.21 |
아두이노 - 온도센서 (0) | 2016.06.21 |
아두이노 - 온습도센서 (0) | 2016.06.21 |