툴 - 라이브러리 관리에 들어가셔서
라이브러리 검색창에 8266관련 라이브러리를 받았다는 가정하에 진행 됩니다.
2021/01/16 - [라즈베리파이 프로젝트] - NodeMCU 1.0 아두이노IDE 연결
저의 이전 포스팅입니다 해당글에서 NODEMCU 관련 라이브러리를 받은 상태에서 진행하겠습니다.
IDE에서 스케치 - 라이브러리 포함하기 - ESP8266WIFI
를 클릭해주면 수많은 헤더파일이 생겨나게 됩니다.
그 중에서 저희는
#include <ESP8266WiFi.h>
#include <ESP8266WiFi.h>
이거 하나만 씁니다
와이파이 연결 소스코드
#include <ESP8266WiFi.h>
//wifi 연결코드
//그리고 추가사항으로 인터넷 연결 끊어지면 다시연결
//wifi
const char* ssid = "SK_WiFiGIGA04C6_2.4G"; //wifi 이름 수정해주세요
const char* password = "*********"; //비밀번호 수정해주세요
void setup() {
Serial.begin(115200); //전송속도
Wifi_connect(); //와이파이 연결
}
void loop() {
// put your main code here, to run repeatedly:
if(WiFi.status() != WL_CONNECTED){ //연결이 이상할시에
Serial.println("try reconnect");
Wifi_connect();
}
delay(5000);
}
void Wifi_connect() {
Serial.println("---------------------------------------");
Serial.println(ssid);
WiFi.begin(ssid, password); // WIFI연결 시작
while (WiFi.status() != WL_CONNECTED) {
// 네트워크의 연결 상태, 8개의 리턴값
// STATUS와 WL_CONNECTED 값이 같은지를 통해 제대로 연결이 되있는지를 확인할 수 있다
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Wifi connected!");
Serial.println("\nConnected to network");
Serial.print("My IP address is: ");
Serial.println(WiFi.localIP());
}
결과는
여기서 WiFi.status값은 8개의 리턴값을 가진다고 했는데,
리턴값은
-
WL_CONNECTED: assigned when connected to a WiFi network;
-
WL_NO_SHIELD: assigned when no WiFi shield is present;
-
WL_IDLE_STATUS: it is a temporary status assigned when WiFi.begin() is called and remains active until the number of attempts expires (resulting in WL_CONNECT_FAILED) or a connection is established (resulting in WL_CONNECTED);
-
WL_NO_SSID_AVAIL: assigned when no SSID are available;
-
WL_SCAN_COMPLETED: assigned when the scan networks is completed;
-
WL_CONNECT_FAILED: assigned when the connection fails for all the attempts;
-
WL_CONNECTION_LOST: assigned when the connection is lost;
-
WL_DISCONNECTED: assigned when disconnected from a network;
이렇게 8개 이다.
https://www.arduino.cc/en/Reference/WiFiStatus
여기부턴 인터넷 시간을 출력하는 코드를 소개합니다
라이브러리는 ESPDateTime을 사용합니다 이 역시 라이브러리 관리에서 검색해서 받아주시면 됩니다.
https://github.com/mcxiaoke/ESPDateTime
먼저 추가된 코드 전문입니다.
#include <DateTime.h>
#include <ESPDateTime.h>
#include <TimeElapsed.h>
#include <ESPDateTime.h>
#include <ESP8266WiFi.h>
//인터넷 시간 받아오는 코드
//그리고 추가사항으로 인터넷 연결 끊어지면 다시연결
//wifi
const char* ssid = "SK_WiFiGIGA04C6_2.4G";
const char* password = "1803003041";
unsigned long lastMs = 0;
unsigned long ms = millis();
void setup() {
Serial.begin(115200); //전송속도
Wifi_connect(); //와이파이 연결
setupDateTime();
Serial.println(DateTime.now());
Serial.println(DateTime.getTime());
Serial.println(DateTime.utcTime());
Serial.println("--------------------");
Serial.println(DateTime.toString());
Serial.println(DateTime.toISOString());
Serial.println(DateTime.toUTCString());
Serial.println("--------------------");
Serial.println(DateTime.format(DateFormatter::COMPAT));
Serial.println(DateTime.format(DateFormatter::DATE_ONLY));
Serial.println(DateTime.format(DateFormatter::TIME_ONLY));
Serial.println("--------------------");
DateTimeParts p = DateTime.getParts();
Serial.printf("%04d/%02d/%02d %02d:%02d:%02d %ld %+05d\n", p.getYear(),
p.getMonth(), p.getMonthDay(), p.getHours(), p.getMinutes(),
p.getSeconds(), p.getTime(), p.getTimeZone());
Serial.println("--------------------");
time_t t = DateTime.now();
Serial.println(DateFormatter::format("%Y/%m/%d %H:%M:%S", t));
Serial.println(DateFormatter::format("%x - %I:%M %p", t));
Serial.println(DateFormatter::format("Now it's %F %I:%M%p.", t));
}
void loop() {
// put your main code here, to run repeatedly:
if(WiFi.status() != WL_CONNECTED){ //연결이 이상할시에
Serial.println("try reconnect");
Wifi_connect();
}
Serial.println(DateTime.now());
Serial.println(DateTime.toString());
delay(5000);
}
void Wifi_connect() {
Serial.println("---------------------------------------");
Serial.println(ssid);
WiFi.begin(ssid, password); // 와이파이 이름과 비밀번호를 통해 WIFI연결을 시작 // WL_CONNECTED라는 값을 돌려준다
while (WiFi.status() != WL_CONNECTED) {
// 네트워크의 연결 상태, 8개의 리턴값
// STATUS와 WL_CONNECTED 값이 같은지를 통해 제대로 연결이 되있는지를 확인할 수 있다
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Wifi connected!");
Serial.println("\nConnected to network");
Serial.print("My IP address is: ");
Serial.println(WiFi.localIP());
}
void setupDateTime() {
// 와이파이 연결이후에 수정하세요
// you can use custom timeZone,server and timeout
DateTime.setTimeZone(9);
//DateTime.setServer("asia.pool.ntp.org");
DateTime.begin(15 * 1000);
DateTime.setTimeZone(9);
DateTime.begin();
if (!DateTime.isTimeValid()) {
Serial.println("Failed to get time from server.");
}
}
해당코드는 와이파이 연결이 정상적으로 진행될경우,
타임서버에서 시간을 받아와서 5초마다 시간을 출력해주는 코드입니다.
'NODEMCU' 카테고리의 다른 글
NodeMCU(아두이노) 에서 mysql로 쿼리 넘기기(DB 데이터 저장하기) (10) | 2021.02.28 |
---|---|
NodeMCU 1.0 아두이노IDE 연결 (0) | 2021.01.16 |