전기전자공학/실습

[Arduino] Wifi

LinZBe4hia 2018. 2. 1. 14:47

Wifi  모듈 포트 인식하기 위한 파일

nodeMCU.zip


아두이노 ->환경설정 => 추가적인 보드 매니저에 밑에 url 추가한다! (For esp8266 설치)

http://arduino.esp8266.com/stable/package_esp8266com_index.json



아두이노 -> 툴 -> 보드매니저 ->esp8266 설치


내 컴퓨터 -> 장치관리자 -> 포트 -> 와이파이 모듈 연결되 포트 번호 확인 (나의 경우: com6)


=> 아두이노 -> 툴 -> 포트 -> com6에서 com8로 바꿔줘야됨!

=> 아두이노 -> 보드 -> 'Arduino Uno'에서 'NodeMCU 1.0 (ESP-12E Module)' 로 바꾸기!


와이파이 모듈 D7(GPIO 13) 과 LED (+)단자 연결./ 와이파이 모듈 GND와 LED (-) 단자 연결



예제: 웹서버에 접속해서 LED 제어


#include <ESP8266WiFi.h>


const char* ssid = "IUnes";

const char* password = "kkkk1234";


int ledPin = 13; //GPIO 13, D7

WiFiServer server(80); //Q1 


void setup() {

  Serial.begin(115200);

  delay(10);

  

  pinMode(ledPin, OUTPUT); 

  digitalWrite(ledPin, LOW);


  Serial.println();

  Serial.println();

  Serial.println("Connecting to ");

  Serial.println(ssid);


  WiFi.begin(ssid, password); //Q2


  while (/* Q3 */WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.println(".");

  }

  Serial.println("");

  Serial.println("WiFi Connected");


  server.begin(); //Q4

  Serial.println("Server started");


  //Print the IP address - 웹에서 접속할 IP를 알려 준다.

  Serial.println("Use this URL to connect: ");

  Serial.println("http://");

  Serial.println(/* Q5 본인 아이피 출력 */WiFi.localIP());

  Serial.println("/");

}


// the loop function runs over and over again forever

void loop() {

  WiFiClient client = server.available();  //Q6 접속한 클라이언트 연동

  if(!client) {

    return;

  }


  Serial.println("new client");

  while(!client.available()){

    delay(1);

  }


  //첫번째 라인 읽기

  String request = client.readStringUntil('\r');

  Serial.println(request);

  client.flush(); //? 이건 뭐지?


  int value = LOW;

  if (request.indexOf("/LED=ON") != -1) {

    digitalWrite(ledPin, HIGH);

    value = HIGH;

  }

  if(request.indexOf("/LED=OFF") != -1) {

    digitalWrite(ledPin, LOW);

    value = LOW;

  }


  //서버 응답 -> 이제부터는 HTML 관련이다.

  client.println("HTTP/1.1 200 OK");

  client.println("Content-Type: text/html");

  client.println("");

  client.println("<!DOCTYPE HTML>");

  client.println("<html>");

  client.println("<head>");

  client.println("<title>NodeMCU Control</title>");

  client.println("<meta name='viewport' content='width=device-width, user-scalable=no'>");

  client.println("</head>");

  client.println("<body>");

  client.println("<div style='width: 300px; margin: auto; text-align: center;'>");

  client.println("<h3>NodeMCU Web Server</h3>");

  client.println("<p>");

  client.print("Led pin is now : ");

  if(value == HIGH) {

    client.println("On");

  } else {

    client.println("Off");

  }

  client.println("</p>");

  //client.println("<br><br>");

  client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");

  client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");  

  client.println("</div>");

  client.println("</body>");

  client.println("</html>");


  delay(1);

  Serial.println("Client disconnected");

  Serial.print("");

  

}


와이파이(내 폰 핫스팟)에 연결되면

WiFi Connected

Server started

Use this URL to connect: 

http://

172.20.10.10

/


폰 인터넷에 172.20.10.10. 치면 led on/off 화면 뜸 -> 제어 가능

웹서버에 접속해서 제어 가능!



무선은 전파 이용 . 전파는 빛!




예제 : 시간 서버에서 시간 받아오기!


#include <ESP8266WiFi.h>

#include <time.h>


const char* ssid = "IUnes";  

const char* password = "kkkk1234"; 

int timezone = 9; // 동경


void setup(void) {

  Serial.begin(115200);


  Serial.println("start start");


  WiFi.mode(WIFI_STA); //Q1. 모드 설정

  WiFi.begin(ssid, password);

  Serial.println("\nConnecting to WiFi");

  while (WiFi.status() != WL_CONNECTED) {

    Serial.print("Connecting...");

    delay(1000);

  }


  configTime(timezone * 3600, 0, "pool.ntp.org", "time.nist.gov");  //Q2. 시간 설정

  Serial.println("\nWaiting for time");

  while (!time(nullptr)) { //시간가져오기

   Serial.print(".");

   delay(1000);

  }

  Serial.println("");

}


void loop() {

    

  time_t now = time(nullptr);

 

    Serial.println(ctime(&now));


    delay(1000);



}