앞 포스팅에서 JSN270 Wifi Shield의 문제점에 대해 포스팅했고
이번 포스팅은 그로인해 사용하게된 Ethernet Shield를 이용한 Http서버 연결에 대해
포스팅을 해보도록 하겠습니다. GO GO!!
먼저 아래 이미지와같이 Uno보드에 Ethernet Shield를 연결하고
USB와 LAN선을 연결해 줍니다. 불빛이 잘 들어오네요.
Arduino는 오픈소스가 잘 되어있어, 사용하기가 무척 좋은 것 같습니다.
예제 -> Ethernet에서 WebClient와 WebServer예제를 사용합니다.
Web Client
/* | |
Web client | |
This sketch connects to a website (http://www.google.com) | |
using an Arduino Wiznet Ethernet shield. | |
Circuit: | |
* Ethernet shield attached to pins 10, 11, 12, 13 | |
created 18 Dec 2009 | |
by David A. Mellis | |
modified 9 Apr 2012 | |
by Tom Igoe, based on work by Adrian McEwen | |
*/ | |
#include <SPI.h> | |
#include <Ethernet.h> | |
// Enter a MAC address for your controller below. | |
// Newer Ethernet shields have a MAC address printed on a sticker on the shield | |
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; | |
// if you don't want to use DNS (and reduce your sketch size) | |
// use the numeric IP instead of the name for the server: | |
//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS) | |
char server[] = "www.google.com"; // name address for Google (using DNS) | |
// Set the static IP address to use if the DHCP fails to assign | |
IPAddress ip(192, 168, 0, 177); | |
// Initialize the Ethernet client library | |
// with the IP address and port of the server | |
// that you want to connect to (port 80 is default for HTTP): | |
EthernetClient client; | |
void setup() { | |
// Open serial communications and wait for port to open: | |
Serial.begin(9600); | |
while (!Serial) { | |
; // wait for serial port to connect. Needed for native USB port only | |
} | |
// start the Ethernet connection: | |
if (Ethernet.begin(mac) == 0) { | |
Serial.println("Failed to configure Ethernet using DHCP"); | |
// try to congifure using IP address instead of DHCP: | |
Ethernet.begin(mac, ip); | |
} | |
// give the Ethernet shield a second to initialize: | |
delay(1000); | |
Serial.println("connecting..."); | |
// if you get a connection, report back via serial: | |
if (client.connect(server, 80)) { | |
Serial.println("connected"); | |
// Make a HTTP request: | |
client.println("GET /search?q=arduino HTTP/1.1"); | |
client.println("Host: www.google.com"); | |
client.println("Connection: close"); | |
client.println(); | |
} else { | |
// if you didn't get a connection to the server: | |
Serial.println("connection failed"); | |
} | |
} | |
void loop() { | |
// if there are incoming bytes available | |
// from the server, read them and print them: | |
if (client.available()) { | |
char c = client.read(); | |
Serial.print(c); | |
} | |
// if the server's disconnected, stop the client: | |
if (!client.connected()) { | |
Serial.println(); | |
Serial.println("disconnecting."); | |
client.stop(); | |
// do nothing forevermore: | |
while (true); | |
} | |
} |
Web Server
/* | |
Web Server | |
A simple web server that shows the value of the analog input pins. | |
using an Arduino Wiznet Ethernet shield. | |
Circuit: | |
* Ethernet shield attached to pins 10, 11, 12, 13 | |
* Analog inputs attached to pins A0 through A5 (optional) | |
created 18 Dec 2009 | |
by David A. Mellis | |
modified 9 Apr 2012 | |
by Tom Igoe | |
modified 02 Sept 2015 | |
by Arturo Guadalupi | |
*/ | |
#include <SPI.h> | |
#include <Ethernet.h> | |
// Enter a MAC address and IP address for your controller below. | |
// The IP address will be dependent on your local network: | |
byte mac[] = { | |
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED | |
}; | |
IPAddress ip(192, 168, 1, 177); | |
// Initialize the Ethernet server library | |
// with the IP address and port you want to use | |
// (port 80 is default for HTTP): | |
EthernetServer server(80); | |
void setup() { | |
// Open serial communications and wait for port to open: | |
Serial.begin(9600); | |
while (!Serial) { | |
; // wait for serial port to connect. Needed for native USB port only | |
} | |
// start the Ethernet connection and the server: | |
Ethernet.begin(mac, ip); | |
server.begin(); | |
Serial.print("server is at "); | |
Serial.println(Ethernet.localIP()); | |
} | |
void loop() { | |
// listen for incoming clients | |
EthernetClient client = server.available(); | |
if (client) { | |
Serial.println("new client"); | |
// an http request ends with a blank line | |
boolean currentLineIsBlank = true; | |
while (client.connected()) { | |
if (client.available()) { | |
char c = client.read(); | |
Serial.write(c); | |
// if you've gotten to the end of the line (received a newline | |
// character) and the line is blank, the http request has ended, | |
// so you can send a reply | |
if (c == '\n' && currentLineIsBlank) { | |
// send a standard http response header | |
client.println("HTTP/1.1 200 OK"); | |
client.println("Content-Type: text/html"); | |
client.println("Connection: close"); // the connection will be closed after completion of the response | |
client.println("Refresh: 5"); // refresh the page automatically every 5 sec | |
client.println(); | |
client.println("<!DOCTYPE HTML>"); | |
client.println("<html>"); | |
// output the value of each analog input pin | |
for (int analogChannel = 0; analogChannel < 6; analogChannel++) { | |
int sensorReading = analogRead(analogChannel); | |
client.print("analog input "); | |
client.print(analogChannel); | |
client.print(" is "); | |
client.print(sensorReading); | |
client.println("<br />"); | |
} | |
client.println("</html>"); | |
break; | |
} | |
if (c == '\n') { | |
// you're starting a new line | |
currentLineIsBlank = true; | |
} else if (c != '\r') { | |
// you've gotten a character on the current line | |
currentLineIsBlank = false; | |
} | |
} | |
} | |
// give the web browser time to receive the data | |
delay(1); | |
// close the connection: | |
client.stop(); | |
Serial.println("client disconnected"); | |
} | |
} |
WebServer 코드에서
byte mac[]; // PC와 연결된 아두이노의 Mac address
IPAddress ip(); // PC와 연결된 아두이노의 현재 IP 주소
위의 정보가 필요하다 Mac주소 같은경우는 Ethernet Shield의 아랫면에 적혀 있다는데,
이상하게 우리는 그렇지 않았습니다. 우리와 같은 분들은 Web Server예제를 통해서, Mac주소를
알아낼 수 있습니다.
이제 Web Client 에서 수정만 해주면 됩니다.
IPAddress server();
위의 코드의 주석을 풀어서 우리의 서버를 구축한 PC의 IP주소를 적어 줍니다.
그리고 다음과 같이 수정합니다.
Host부분에 Server IP만 바꾸어주면 됩니다. 간단합니다.
그 이후에 Serial모니터를 보면 서버연결이 잘 되는것을 확인할 수 있습니다.
JSN270 WiFi Shield를 사용했을 때는 끊어지던 서버가 안 끊어지는 것이
확인됩니다.
'Deep Learning(YOLO)기반의 Smart Scarecrow' 카테고리의 다른 글
[15] Deep Learning기반의 Smart Scarecrow 마무리!! (18) | 2017.12.26 |
---|---|
[14] 아두이노 서보모터제어 (물총 사용하기) (6) | 2017.12.26 |
[12] Arduino Http서버 연결1(JSN270 WiFi Shield) 문제점 (2) | 2017.12.26 |
[11] 물총 제어를 위한 Arduino 환경설정 하기 (2) | 2017.12.26 |
[10] Apache2 Root Directory 변경으로 문제해결 (0) | 2017.12.19 |