지난 포스팅에서 아두이노(Arduino)로 인터넷을 연결하는 방법 중 이더넷(Ethernet) 모듈을 사용해보았습니다. 'ENC28J60' 이더넷 모듈을 아두이노 UNO R3 보드와 연결하여 DHCP(Dynamic Host Configuration Protocol: 동적 호스트 구성 프로토콜)를 통해 IP 할당받았습니다. 그럼 오늘은 진짜 인터넷 되는지 궁금하니까 할당받은 IP를 통해 웹 브라우저(web browser)에 간단한 텍스트를 띄워보도록 하겠습니다. 앞서 설명한 내용은 아래 링크 걸어두게요~ 참조 부탁드립니다.
- 프로그램 코딩 (ENC28J60 이더넷 모듈 사용)
아두이노로 웹브라우저에 텍스트를 출력하기 위해 프로그램 코딩이 필요합니다. 지난번에 다운로드한 이더넷 라이브러리(Library)를 계속 사용하기 때문에 혹시 없으신 분은 아래 파일을 다운로드하여 스케치(sketch)에서 추가하시면 됩니다.
이더넷 모듈 사용 방법에서 코딩했던 IP를 할당받기 위한 DHCP test 프로그램에서 몇 가지만 추가로 적어주면 되기 때문에 어렵지 않습니다.
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
const char webpage[] PROGMEM =
"<html>"
"<head>"
"<title>"
"Arduino Websever"
"</title>"
"</head>"
"<body>"
"Hello Arduino!!"
"</body>"
"</html>"
;
void setup () {
Serial.begin(57600);
Serial.println(F("\n[webClient]"));
// Change 'SS' to your Slave Select pin, if you arn't using the default pin
if (ether.begin(sizeof Ethernet::buffer, mymac, 8) == 0)
Serial.println(F("Failed to access Ethernet controller"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
memcpy(ether.tcpOffset(), webpage, sizeof webpage);
ether.httpServerReply(sizeof webpage);
}
위에 게시된 코드블럭에서 아래와 같이 변수 'webpage'를 HTML(HyperText Markup Language)로 프로그램을 정의하였습니다. HTML은 웹페이지를 만들기 위한 언어로 웹페이지의 전반적인 구조를 만들고 웹 브라우저와 같은 HTML 처리 장치의 행동에 영향을 주는 프로그램 언어들을 제어하는 기능을 합니다. 즉, 웹브라우저에서 동작하는 프로그램 언어입니다. 여기서는 간단한 텍스트만 출력하기 위한 HTML 기본 구조만 작성하였는 점 참고 부탁드립니다.
HTML 코딩에서 <title></title> 안의 내용이 웹페이지의 제목 부분이고 <body></body> 안의 내용이 웹브라우저로 출력하고 싶은 내용을 적으시면 됩니다. 저는 제목은 "Arduino Websever"로 임의로 정하고 "Hello Arduino!!"를 웹브라우저 크롬을 통해 출력하기 위해 위와 같이 작성하였습니다. 프로그램에서 빨간 표시 한 부분을 원하는 데로 바꾸시면 원하는 텍스트를 출력할 수 있습니다. (한글도 가능한데 그냥 하면 웹 브라우저에서 깨지기 때문에 추가적인 코드가 필요합니다. 우선 간단하게 테스트해보시고 한글 출력은 추후 업데이트하도록 하겠습니다.)
그럼 compile 후 아두이노에 성공적으로 업데이트하고 나서 PC와 연결된 USB는 뽑아버리고 아두이노에 외부 전원을 공급하여 확인하도록 하겠습니다. (시리얼 통신으로 가는지 진짜 인터넷을 통하는지 저는 의심이 많아서 일단 컴퓨터와 아두이노와의 연결을 끊었습니다. ㅎㅎ) 그리고 이더넷 모듈에 공유기의 랜선(LAN)을 연결한 후 아두이노에 할당받은 IP를 웹 브라우저에 입력합니다. (저는 IP가 192.168.0.102이고, 웹 브라우저는 크롬으로 진행하였습니다.)
그럼 아래와 같이 짠!! 하고 출력됩니다. 와우~!
추가로 프로그램을 조금 더 설명드리면 void loop() 부분의 명령어는 아두이노에 할당된 IP를 웹 브라우저에 입력하면 이더넷 모듈이 TCP 패킷을 받고, HTML로 작성된 변수 'webpage'의 내용을 웹브라우저로 띄워주는 코딩입니다. (몇 가지 명령어로 간단히 실행이 되는 것은 라이브러리를 사용해서 가능한 겁니다. 얼마나 고마운 존재인가요~ 감사합니다!! ㅎㅎ)
여기까지 아두이노(Arduino)로 인터넷(Internet) 연결하는 방법 중 ENC28J60 이더넷 모듈(Ethernet module)을 사용해서 웹브라우저에 간단한 텍스트를 출력하는 방법을 알아보았습니다. HTML을 사용하실 수 있으신 분은 프로그램을 수정해서 얼마든지 웹페이지를 추가적으로 구성하실 수 있습니다.
지금은 공유기 내부에서 IP를 사용하고 있지만 최종적으로 외부 인터넷을 사용하여 프로젝트를 어디에서나 진행 가능하게 만드는 것이 궁극적인 목표가 될 것입니다. ㅎㅎ 화이팅하겠습니다! ^^
오늘도 긴 글 읽어주셔서 감사합니다. 질문이나 좋은 의견 있으면 언제든지 댓글로 남겨주시면 최선을 다해 연구해서 답변드리겠습니다.
'아두이노 (Arduino) > 인터넷 (Internet) 연결' 카테고리의 다른 글
아두이노(Arduino) 인터넷 하기 - Wifi (ESP-01: ESP8266)연결하는 방법 (28) | 2019.11.19 |
---|---|
Arduino 아두이노 인터넷 연결하기 - 이더넷(ethernet) 사용 방법 (8) | 2019.11.06 |
Arduino 아두이노 인터넷(Internet) 연결하는 방법 (0) | 2019.10.30 |