1. ESP 보드의 와이파이
2016년에 개발된 ESP32 개발 보드는 2014년에 개발된 ESP8266보드에 비해, 여러 가지로 향상된 성능을 가지고 있는데, 주요 사양을 아두이노 우노 및 피코, ESP8266과 비교하면 다음과 같은데, 라즈베리파이 피코 보드는 와이파이 및 블루투스 기능을 지원하는 W 버전의 하드웨어가 별도로 있지만, ESP 보드는 그 자체에서 와이파이 접속 기능(ESP32는 블루투스까지)을 지원하는 것이 특징이다.
따라서, ESP에서는 별도 버전의 하드웨어를 따로 구입하지 않아도 곧바로 와이파이 접속이 가능하고, 통상 ESP32개발보드가 라즈베리파이 피코보드보다 현저히 저렴하기도 해서, 간단한 기능의 와이파이 접속이 필요할때 ESP32보드는 유용하게 사용될 수 있다.
|
|
아두이노 우노 |
라즈베리파이 피코 |
ESP8266 |
ESP32 |
|
출시연도 |
2011(R3) |
2021 |
2014 |
2016 |
|
CPU |
8 Bit Single Core |
32 Bit-Dual Core |
32 Bit Single Core |
32 Bit Double Core |
|
클럭 속도 |
16 MHz |
133 MHz |
80MHz |
160MHz |
|
메모리 |
2 KB SRAM |
264KB SRAM 2MB Flash Memory |
No ROM 160KB RAM |
448KB ROM 520KB RAM |
|
Digital 입출력 핀 수 |
14 |
26 (GP0~GP28번) 단, 23/24/25 없음 |
11 (NodeMCU 경우) |
36 |
|
Analog 입력 수 |
6 |
3+1(내장 온도센서) |
1 |
18 |
|
ADC |
10 Bit |
12 Bit |
10 Bit |
12 Bit |
|
PWM |
6 |
16 |
8 |
16 |
|
온도센서 |
X |
내장 |
X |
내장 (최근 버전은 삭제) |
|
내장 LED 핀 |
13 |
25 |
16 |
2 |
|
wi fi |
X |
802.11 b/g/n (PICO-W) |
802.11 b/g/n |
802.11 b/g/n |
|
Bluetooth |
X |
5.2 (PICO-W) |
X |
4.2 |
2. Wifi Network 접속 방법
ESP32보드에서 마이크로 파이썬을 이용하여 와이파이 네트워크 접속을 하려면, 먼저 network 라이브러리를 선언해 주어야 한다.
import network
그리고, Wifi 접속 시 사용할 SSID와, Password 정보를 파악하여 코드 내에 선언해 준다.
와이파이 네트워크는 2.4GHz 와이파이 망을 선택해야 한다. 5GHz 네트워크는 접속이 안된다.
SSID = “mywifi”
PASSWORD = “password”
그리고, 다음 명령어들을 차례대로 이용하여 네트워크에 접속해 준다.
1) 먼저 wlan 생성 명령이다. ( ) 안은 Interface type인데, 그냥 똑같이 써준다.
wlan = network.WLAN(network.STA_IF)
2) 다음 이렇게 생성된 Wifi 접속 기능을 활성화시켜준다. 이 명령은 접속 기능을 켜거나 끄는 명령이다.
wlan.active(True)
3) 다음 명령으로 실제 접속을 시도한다.
wlan.connect(SSID, PASSWORD)
이렇게 명령어들을 연속해서 사용하고 잠시 기다려주면, Wifi접속이 이루어진다.
Wifi 접속을 종료하려고 하는 경우에는 다음 명령어를 사용하면 된다.
wlan.disconnect( )
3. 상태 확인 명령어
ESP32보드에서 마이크로 파이썬을 이용하여 와이파이 네트워크 접속을 하는 과정에서 오류가 발생하거나, 연결 상태를 파악하는데 참고할 수 있는 명령어들은 다음과 같다.
wlan.status( ) –> 인자 없이 사용하면 현재 상태 값을 돌려주는데, 반환값의 의미는 다음과 같다.
200: BEACON_TIMEOUT
201: NO_AP_FOUND
202: WRONG_PASSWORD
203: ASSOC_FAIL
204: HANDSHAKE_TIMEOUT
1000: IDLE
1001: CONNECTING
1010: GOT_IP
(주의: 이 명령에 대한 반환값이 라즈베리파이 피코 보드에서 -3에서 3까지의 정수값(0:Link Down, 1:Link Join, 2:No IP, 3: Link Up, -1:Link Fail, -2:No Net, -3 :Bad Auth)과 다르다.)
wlan.isconnected( ) –> 연결 여부를 TRUE / FALSE로 돌려줌
wlan.ifconfig( ) –> IP / subnet / gateway /DNS 값의 순서로 반환해 준다.
wlan.config( ) –> 인자 값을 설정하기 위해 사용하거나.
값없는 parameter만 사용하면 해당 parameter의 설정 상태를 알려준다.
예 ; wlan.config(‘ssid’)는 현재 접속한 SSID를 반환해 준다.
예 wlan.config(‘mac’)는 현재 접속한 Mac Address를 반환해 준다.
예 wlan.config(pm=0xa11140) power saving 모드를 비활성화해준다.
4. 접속 예제
위에서 소개한 Wifi 접속 명령어들을 보여주기 위해 다음과 같은 간단한 Code를 준비했다.
import network
import utime
SSID = "내 접속 SSID"
PASSWORD = "접속 Password"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.scan( ) #--> Scan
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected() and wlan.status() >= 0:
print("Waiting to connect:")
print("wlan.status() === ", wlan.status())
utime.sleep(1)
if wlan.status() != 1010:
raise RuntimeError('network connection failed')
else:
print("Wifi is connected == ", wlan.isconnected())
print("wlan.status() === ", wlan.status())
print( "Status =", wlan.status())
print( "ip =", wlan.ifconfig())
print( "SSID", wlan.config('ssid'))
print( "Channel :", wlan.config('channel'))
print( "Mac : ", wlan.config('mac'))
이 코드를 동작시키면 다음 캡처 이미지처럼, 정상적으로 Wifi 접속이 이루어지고, IP 정보와 Mac 정보 등이 확인되는 것을 볼 수 있다.
또한, 이 과정에서 wlan.status() 명령에 의해, 접속이 시도되는 동안 1001 값이 출력되는 것과, 연결이 이루어진 이후 이 값이 1010으로 변경된 것도 확인할 수가 있다.

