아두이노 코딩-66: NodeMCU/WeMos ESP8266WiFi.h 라이브러리 사용법 요약

in #kr6 years ago

noname01.png아두이노 편집기에서 NodeMCU/WeMos 보드 코딩 시에 항상 수반되는 무선 와이파이 지원 라이브러리 ESP8266WiFi.h 에 관해서 알아보기로 한다.

아두이노 NodeMCU 코딩 헤더부분에 반드시 아래와 같이 라이브러리를 불러들인다.

#include “ESP8266WiFi.h”;

NodeMCU 보드에서 사용되고 있는 ESP8266 12E 칩 모듈은 아두이노사의 와이파이 쉴드나 아두이노 윤같은 빌트인 와이파이 보드에서 사용하는 와이파이 칩과는 다르며 일종의 Third Party 그룹에서 만든 아두이노 호환 보드로 보면 된다. 따라서 라이브러리도 어느 정도 다를 수밖에 없다.

ESP8266WiFi.h 와이파이 라이브러리는 사용자가 사용하게 되는 다수의 클라스들로 구성되는데 각 클라스 별로 특화된 기능들을 제공하게 된다. 예를 들면
WiFi class, IP address class, Server class, Client class 및 UDP class가 대표적이다.

우선 WiFi class 에 관해서 세부적인 기능을 알아보자.
WiFi.begin(ssid, password): 그 형태에 있어서 setup()에서 사용하는 Serial.begin()과 유사한데 두 개의 문자열 데이터 즉 사용자 ID 와 패스워드를 요구한다. 이 두 정보는 사용자가 연결하고자 하는 PC의 무선 공유기(Access Point) 또는 스마트 폰의 핫스팟 정보를 제공해야 한다. 되돌려 받는 정보는 다음과 같다.

WL_CONNECTED: 공유기에 성공적으로 연결이 된 후
WL_IDLE_STATUS: WiFi 상태가 변동되는 중간 과정
WL_NO_SSID_AVAIL: 사용자명 SSID 에 연결 될 수 없을 때
WL_CONNECT_FAILED: 패스워드가 부정확할 경우
WL_DISCONNECTED: 와이파이 모듈이 스테이션 모드로 배열되지 못한 경우

대개는 처음에 사용자가 아두이노에서 WiFi.begin()을 실행시키면 와이파이 네트워크와 연결 설정을 위해서 SSID 와 패스워드를 넘겨주게 된다. 그리고 난 다음에 사용자는 WiFi.status 가 WL_CONNECTED라는 값을 돌려 줄 때까지 몇 초간 루프를 돌면서 기다려야 한다.

WiFi.SSID()는 패스시킬 파라메터(arguments)가 없는 형태로 사용된다. 하지만 사용자가 연결하게 된 AP 또는 핫스팟의 SSID 값을 돌려 준다.

noname02.png

WiFi.RSSI()는 현재 공유기의 무선 강도를 dBM 단위로 돌려준다. 바로 앞이면 –45dBM 수준에 가까운 –dBM 값을 준다.
WiFi.scanNetworks(): 공유기에서 체크한 네트워크의 수 값만을 되돌려 주며 네트워크의 각각 명칭을 리스팅 해 주는 것은 아니다.
WiFi.macAddress(): ESP 디바이스의 MAC 주소를 돌려준다. MAC 주소는 이더넷 응용에서 중요하게 사용되는데 WiFi 응용에서는 거의 사용되지 않는다.

WiFi.printDiag(Serial); 이 특수한 기능은 핵심적인 와이파이 진단정보를 출력하는데 이용 가능하다.

WiFi 라이브러리 사용법을 보여 주는 아래의 아두이노 스케치 코드 예를 참조하기 바란다. 이 코드는 아두이노 편집기 예제의 WiFiScan.ino 과 매우 유사하나 한 가지 차이점은 일단 MAC address를 추가로 출력해 준다는 점이다. 아울러 자신이 사용할 공유기 ID와 password를 사용하여 WiFi.begin(“ID”,“password”) 명령을 실행하고 WiFi 연결을 시켜 준다는 점이다. 사용자로서는 자신이 WiFi에 실어 보낼 코드를 추가하면 되는 일종의 템플레이트 코드로서 아두이노 응용 코딩 시에 좀 길기는 하지만 거의 변동 사항이 없다.

//WiFi_Scan_01

#include “ESP8266WiFi.h”
void setup() {
Serial.begin(115200);
Serial.println();

WiFi.disconnect();
delay(1000);

//scan for number of nearby networks & print SSIDs
Serial.print("Nearby networks found ");
Serial.println(WiFi.scanNetworks());
delay(500);

Serial.println("List of surrounding Network SSIDs…:");
int n = WiFi.scanNetworks();
for (int i = 0; i < n; i++) {
Serial.println(WiFi.SSID(i));
}
Serial.println();

//connect to preferred SSID
WiFi.begin("android1234", "dddddddddd");
Serial.println("Connecting");

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();

// print SSID name,local IP allotted ,MAC address & signal strength
Serial.println();
Serial.print("Connected to SSID : ");
Serial.println(WiFi.SSID());
Serial.print("IP address allotted to ESP : ");
Serial.println(WiFi.localIP());
Serial.print("MAC Address of ESP : ");
Serial.println(WiFi.macAddress());
Serial.print("Signal strength is : ");
Serial.println(WiFi.RSSI());
}

void loop() {
}//프로그램 끝

이 예제 코드를 사용자 자신의 무선 와이 공유기 환경에 맞춰 사용자 명과 패스워드를 부여한 후에 아두이노 편집기에서 실행 시키면 그림과 같이 출력 된다.

noname03.png

WiFi.begin() 클라스에 이어서 Client() 클라스의 다음 라이브러리들에 대해 알아보자.
connected(), connect(), write(), print(), println(), available(), read(), flush(), stop()

Client 클라스를 사용하는 대표적인 코딩 사례로서 ThingSpeak에 센서 데이터를 올려놓는 코딩 예제들을 참고함과 동시에 다음과 같은 사용법을 참고하여라.

client.connect(host,80);
if(client.available()) {
⚫⚫⚫;
}
client.stop();
client.println();

Server() 클라스의 다음 라이브러리들에 대해 알아보자.
begin(), available(), write(), print(), println()

Server 클라스의 대표적인 코딩 사례로서 웹서버 프로그램 즉 IOT 사물인터넷 코딩 예제들을 참고하고 동시에 다음과 같은 사용법도 참고하도록 하자.

server.begin()
WiFiClient client = server.available();

Sort:  

pairplay 가 kr-dev 컨텐츠를 응원합니다! :)

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 63799.64
ETH 3130.40
USDT 1.00
SBD 3.97