> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/arduino/arduino-network/wi-fi/esp-01.md).

# ESP-01

## ESP-01을 활용한 Wi-Fi 통신 구

이 문서에서는 ESP01 모듈을 이용하여 WiFi를 이용하는 방법에 대해서 살펴본다.

### 결선도

* \[esp01:GND] to \[arduino:GND]
* \[esp01:VCC] to \[arduino:5V]
* \[esp01:RX] to \[arduino:Digital 3PIN]
* \[esp01:TX] to \[arduino:Digital 2PIN]

### 샘플 코드

샘플코드는 블루투스 통신때와 동일하며, 설정 후에 본격적인 사용이 가능하다.

```cpp
#include <SoftwareSerial.h>

//RX를 2번, TX를 3번으로 하여 시리얼 생성
//여기서 주의할 점은 
// - esp01의 RX와 연결된 핀이 TX 역할을 수행
// - esp01의 TX와 연결된 핀이 RX 역할을 수행
SoftwareSerial WiFiSerial(2, 3);//RX, TX 순서대로(esp01과 반대로)

void setup(){
  Serial.begin(9600);
  WiFiSerial.begin(9600);
  Serial.println("Enter AT Command");
}

void loop(){
  if(WiFiSerial.available()){
    Serial.write(WiFiSerial.read());
  }
  if(Serial.available()){
    WiFiSerial.write(Serial.read());    
  }
}
```

### 컴파일

`Ctrl+R` 또는 스케치 메뉴의 `확인/컴파일`을 눌러 컴파일을 진행한다.

### 업로드

`Ctrl+U` 또는 스케치 메뉴의 `업로드`를 눌러 업로드를 진행한다.

### 실행 결과

AT 명령을 전송하여 연결 여부를 확인한다.\
`OK`가 출력되면 정상적으로 연결이 되었다고 판단한다.

{% hint style="info" %}
정상적으로 연결되지 않은 경우에는 다음을 확인한다.

1. WiFiSerial.begin(115200);
2. Serial.begin(9600);
3. 시리얼 모니터 출력 상태 Both NL & CR 및 9600 보드레이
   {% endhint %}

### AT 명령 테스트

#### AT

`AT` 명령을 입력하면 `OK`가 반환되어야 정상 입력이 된 것이다.\
글자가 깨진 것은 설정을 통해 변경할 수 있다.

#### 보드레이트 설정

보드레이트를 시리얼과 동일한 속도인 9600으로 변경한다. SoftwareSerial은 115200을 지원하지 않기 때문에 글자가 깨지는 현상이 발생하기 때문이다.

```
AT+CIOBAUD=9600
```

펌웨어 업데이트를 한 경우 이 방법이 되지 않으므로 [다음 사이트](https://m.blog.naver.com/roboholic84/221261124179)를 참고한다.

보드레이트를 변경한 뒤 반드시 변경한 보드레이트로 코드를 변경해야 한다.

```
WiFiSerial.begin(9600);
```

#### 모드 확인

현재 모드를 확인하기 위해서는 다음의 명령을 Console에 입력한다.

```
AT+CWMODE?
```

#### 모드 종류

모드의 종류와 설명은 다음과 같다.

1. Station : Client 모드
2. AP : Host 모드
3. Dual : 혼합 모드

#### 모드 변경

WiFi에 연결하기 위해서는 `Station` 모드로 변경해야 한다.

```
AT+CWMODE=1
```

`OK`가 나오면 성공이다.

#### 와이파이 검색

감지되는 와이파이를 검색하여 출력하도록 다음 명령을 작성한다.

```
AT+CWLAP
```

#### 와이파이 접속

와이파이 접속을 위해서는 SSID와 Password가 필요하다.

```
AT+CWJAP="SSID","Password"
```

다음 메세지가 출력되면 정상적으로 연결된 것이다.

```
WIFI CONNECTED
WIFI GOT IP
```

#### 아이피 주소 확인

다음 명령을 통해 연결된 기기의 아이피 주소를 확인한다.

```
AT+CIFSR
```

아이피가 다음 형태로 출력된다.

```
+CIFSR:STAIP,"192.168.20.131"
+CIFSR:STAMAC,"f4:cf:a2:72:50:16"
```

#### 다중 연결 설정

와이파이를 이용하여 아두이노를 서버로 사용하려면 다중 연결을 허용해야 한다.

```
AT+CIPMUX=1
```

위와 같이 설정하면 다중 연결이 허용 상태가 된다.\
설정값의 종류는 다음과 같다.

* Single Connection : 0
* Multiple Connection : 1
