본문 바로가기

프로그래밍/Arduino

[Arduino] 5. Wemos D1 mini로 인터넷 연결하기

Wemos D1 mini가 좋은점은 기본적으로 esp8266이 장착되어 있기 때문에 Wifi를 통한 인터넷 연결을 하고자 할 때, 추가적으로 esp8266이 필요하지 않다. Arduino UNO에 esp8266 모듈을 추가하고자 할 때처럼 복잡하고 귀찮은 펌웨어 및 세팅 과정을 겪지 않아도 된다는 소리이다.

본격적으로 Wemos d1 mini의 Wifi 이용해 인터넷을 연결해보자. 시작하기에 앞서, 본 글은 아두이노 스케치가 설치되어 있고, Wemos D1 mini 보드가 제대로 세팅되어있음을 가정한다. 이 과정을 하지 않았다면 아래의 링크를 참조하자.

[Arduino] 2. 아두이노 설치하기
[Arduino] 3. 아두이노 연결 및 세팅(Wemos D1 mini)


1. Arduino 연결하기

앞서 말했듯, Wemos d1 mini에는 기본적으로 esp8266이 장착되어 있다. 그래서 별다른 부품이 필요하지 않다. 그래서 아래 사진처럼 USB 케이블을 이용해 Wemos d1 mini를 컴퓨터에 연결해주자. 



사진과 같이 연결했다면, Wemos d1 mini를 통해 인터넷에 연결하기 위한 WiFi 환경이 필요하다. Esp8266은 무선통신 보안 프로토콜로 WPA, WPA2, WEP를 지원한다. EAP같은 WiFi 고급 보안 프로토콜을 지원하지 않기 때문에, 학교나 회사 같은 곳에서 WiFi를 연결하기 어려운 부분이 있다. (만약 학교나 회사에서 주변에 또다른 AP가 없거나, WiFi가 없는 환경인 경우 휴대폰의 핫스팟 기능을 이용해 연결할 수도 있다.) 



우리가 필요한 것은 WiFi의 SSID와 PW이다. 따로 설정하지 않았다면, AP를 보면 기본 SSID와 PW를 확인할 수 있다.



2. Internet 연결 예제

보드 매니저를 통해 Wemos d1 mini의 펌웨어를 설치했다면, esp8266 관련 예제도 함께 설치될텐데, 이를 이용해 인터넷에 연결해보고자 한다. 아래와 같이 메뉴를 통해 예제를 불러올 수 있다. 


[파일]-[예제]-[ESP8266WiFi]-[WiFiClient]



이를 통해서 WiFiClient 예제를 불러오면 아래와 같은 코드를 볼 수 있다. 


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
 *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
 *
 *  You need to get streamId and privateKey at data.sparkfun.com and paste them
 *  below. Or just customize this script to talk to other HTTP servers.
 *
 */
 
#include <ESP8266WiFi.h>
 
const char* ssid     = "your-ssid";
const char* password = "your-password";
 
const char* host = "data.sparkfun.com";
const char* streamId   = "....................";
const char* privateKey = "....................";
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  // We start by connecting to a WiFi network
 
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
 
int value = 0;
 
void loop() {
  delay(5000);
  ++value;
 
  Serial.print("connecting to ");
  Serial.println(host);
  
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
  // We now create a URI for the request
  String url = "/input/";
  url += streamId;
  url += "?private_key=";
  url += privateKey;
  url += "&value=";
  url += value;
  
  Serial.print("Requesting URL: ");
  Serial.println(url);
  
  // This will send the request to the server
  client.print(String("GET "+ url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
  
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  
  Serial.println();
  Serial.println("closing connection");
}
 
cs


코드를 보면 가장 윗부분에 ssid와 password, 그리고 host 정보가 있는 것을 확인할 수 있다. 



여기서 우선 ssid와 password를 수정하자. 앞서 자신의 AP에서 보았던 정보를 사용하면 된다. 나의 경우 ssid는 SK_WiFiGIGAFAE2가 된다. Password 부분도 수정해주자. 



아래의 host는 www.google.com 으로 적도록 하자.(큰 의미는 없다. 단순 연결 확인을 위해 적어두었다.) streamId와 privateKey는 비워두도록하자. 


이렇게만 두고 업로드 버튼을 눌러 코드를 실행해보자. 아래와 같이 시리얼모니터를 이용해 WiFi Connection이 출력된다면 성공이다.
google에 연결된 부분은 확인할 수 있는데, 아래에서 404 Not Found에러가 발생하는 것을 볼 수 있다. 아래 코드에 보면, URL 작성 부분이 있는데 www.google.com 에는 이에 해당하는 URL이 존재하지 않기 때문이다. 이 부분은 다음 포스트에서 추가적으로 작성해 제대로 http Request를 수행해볼 예정이다.

반응형