ESP8266 라이브러리(WiFiEsp)
ESP8266 라이브러리
라이브러리 설치
WiFiEsp 라이브러리 설치(라이브러리 관리자 이용)
- 검색: WiFiEsp
- by bportaluri 선택
- https://github.com/bportaluri/WiFiEsp
- 검색: WiFiEsp
API 문서
WiFi 객체 주요 메서드
WiFi AP(공유기)에 접속하고 IP를 받는 역할
WiFi.init(&softSerial)
- SoftwareSerial을 통해 초기화
WiFi.status()
- AP 연결 상태 리턴
WiFi.begin(ssid, password)
- AP 접속
- 접속 성공시 IP 할당 받음
WiFi.SSID()
- AP의 SSID 리턴
WiFi.localIP()
- 할당 받은 IP (IPAddress 객체) 리턴
WiFi.RSSI()
- AP의 신호 강도 리턴
AP 연결
#include <WiFiEsp.h>
#include <SoftwareSerial.h>
SoftwareSerial softSerial(2, 3); // RX, TX
char ssid[] = "SSID"; // your network SSID (name)
char pass[] = "pass"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
void setup() {
Serial.begin(115200);
softSerial.begin(9600);
WiFi.init(&softSerial); //주소를 넘긴다.
// softSerial *p : 포인터로 관리
if (WiFi.status() == WL_NO_SHIELD) { // ESP 연결 여부
Serial.println("WiFi shield not present");
while (true); // ESP 가 없으면 진행하지 않는다.
}
while (status != WL_CONNECTED) { // AP 접속 여부
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
}
Serial.println("You're connected to the network");
printWifiStatus();
}
void loop() {
}
void printWifiStatus() {
// print the SSID of the network you're attached to
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength
long rssi = WiFi.RSSI();
Serial.print("Signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
[WiFiEsp] Initilization successful - 1.5.4
Attempting to connect to WPA SSID: SSID
[WiFiEsp] Connected to SSID
You're connected to the network
SSID: SSID
IP Address: 192.168.0.13
Signal strength (RSSI):-752 dBm
코드 재사용을 위한 클래스화
- WifiUtil.h
#ifndef __WIFI_UTIL_H__
#define __WIFI_UTIL_H__
#include <SoftwareSerial.h>
#include <WiFiEsp.h>
class WifiUtil {
private:
const char *ssid;
const char *password;
SoftwareSerial softSerial;
int status = WL_IDLE_STATUS; // Status
public:
WifiUtil(int rx, int tx);
void init(const char *ssid, const char *password);
void checkShield();
void printInfo();
int check();
};
#endif
- WifiUtil.cpp
#include "WifiUtil.h"
WifiUtil::WifiUtil(int rx, int tx) : softSerial(rx, tx) {
}
// 쉴드 존재유무 확인
void WifiUtil::checkShield() {
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
while (true);
}
}
// 와이파이 접속여부 확인 - 미접속이면 접속 시도
int WifiUtil::check() {
while (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, password);
if (status == WL_CONNECTED) {
printInfo();
return 1; // 끊겼다가 다시 접속
}
}
return 0; // 끊긴적 없음
}
// 초기화 및 AP 접속
void WifiUtil::init(const char *ssid, const char *password) {
this->ssid = ssid;
this->password = password;
softSerial.begin(9600);
WiFi.init(&softSerial);
checkShield();
check();
}
void WifiUtil::printInfo() {
// 와이파이 접속정보
Serial.println("You're connected to the network");
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("Signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
Serial.println();
}
- app.ino
#include "WifiUtil.h"
const char SSID[] = "SSID";
const char PASSWORD[] = "pass";
WifiUtil wifi(2, 3);
void setup() {
Serial.begin(9600);
wifi.init(SSID, PASSWORD);
}
void loop() {
if (wifi.check()) { // WIFI 연결 확인
;
}
}
라이브러리로 구성
<문서>/Arduino/libraries/WifiUtil
WifiUtil.h, WifiUtil.cpp
WiFiEspClient 클라이언트 객체
WiFiEspClient 객체
- TCP Socket 처리 객체
- connect(서버주소, 포트번호)
- 지정 서버의 포트 번호로 접속
- print(), println()
- 메시지 출력
- available()
- 수신된 메시지 존재 여부
- 수신된 메시지의 길이 리턴
- read()
- 수신 메시지의 1바이트 읽기
#include <WifiUtil.h>
const char SSID[] = "cooluk";
const char PASSWORD[] = "xofla1106!";
WifiUtil wifi(2, 3);
WiFiEspClient client;
void setup() {
Serial.begin(9600);
wifi.init(SSID, PASSWORD);
request();
}
void loop() {
response();
}
const char server[] = "arduino.cc";
void request() {
// if you get a connection, report back via serial
if (client.connect(server, 80)) { // 80 : Web Server
Serial.println("Connected to server");
// Make a HTTP request
client.println("GET /asciilogo.txt HTTP/1.1");
client.println("Host: arduino.cc");
client.println("Connection: close");
client.println();
}
}
void response() {
while (client.available()) {
char c = client.read();
Serial.write(c);
}
}
[WiFiEsp] Initilization successful - 1.5.4
Attempting to connect to WPA SSID: SSID
[WiFiEsp] Connected to SSID
You're connected to the network
SSID: SSID
IP Address: 192.168.0.91
Signal strength (RSSI):-732 dBm
[WiFiEsp] Connecting to arduino.cc
Connected to server
HTTP/1.1 200 OK
Server: nginx/1.4.2
Date: Thu, 17 Sep 2020 07:37:19 GMT
Content-Type: text/plain
Content-Length: 2263
Last-Modified: Wed, 02 Oct 2013 13:46:47 GMT
Connection: close
Vary: Accept-Encoding
ETag: "524c23c7-8d7"
Accept-Ranges: bytes
...
'IoT 디바이스 활용 > Arduino' 카테고리의 다른 글
Arduino - Digital Sensors (0) | 2020.10.16 |
---|---|
Arduino - LED Sensors, 온도 센서 (0) | 2020.10.16 |
Arduino - WIFI - ESP8266 - AT 명령 (0) | 2020.10.16 |
Arduino - 미세먼지 센서 (0) | 2020.10.15 |
Arduino - 초음파 센서 (Ultra.h, Pulse.h) (0) | 2020.10.15 |
댓글