공부/arduino2018.03.12 12:50

nodeMCU Web 따라하기 2

 

원천 소스

http://blog.daum.net/ejleep1/332

 

기존소스와 현재 소스 합쳐서 만들었다.

 

-------------------------------- 소스 -----------------------------------

#include <ESP8266WiFi.h>
#include <Ticker.h>

#define LED     D0    //LED PIN define
#define KEY_IN  D3    //Flash key pin define
#define ANALOG_IN A0  //analog in define


Ticker flipper1;
Ticker flipper2;


const char *ssid =  "wifi";     // replace with your wifi ssid and wpa2 key
const char *pass =  "----";

WiFiClient client;

unsigned int prt_index = 0;
unsigned char led_flag = 0;


void flip_test();
void led_test();

WiFiServer server(80);

// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  delay(10);
 
  Serial.println("Start..");

  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED, OUTPUT);
  pinMode(KEY_IN, INPUT);   // == pinMode(KEY_IN, INPUT);

  Serial.println("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, pass);
 
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");

  Serial.print("MAC: ");
  Serial.println(WiFi.macAddress());

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
  flipper1.attach(0.3, flip_test);    //start , ms
  flipper2.attach(0.5, led_test);       //start , ms

  //flipper.detach(); //stop
}

// the loop function runs over and over again forever
void loop() {

  int buttonState = digitalRead(KEY_IN);
  if (buttonState == 0)
  {
    Serial.printf("button key input !! \n");
  }

  WiFiClient client = server.available();
  if (client)
  {
    Serial.println("new client");
    while(!client.available()){
    delay(1);
    }

    // Read the first line of the request
    String req = client.readStringUntil('\r');
    Serial.println(req);
    client.flush();
 
    // Match the request
    int val1 = 0;
    /*if (req.indexOf("/gpio/0") != -1)
    val = 0;
    else if (req.indexOf("/gpio/1") != -1)
    val = 1;
    else {
    Serial.println("invalid request");
    client.stop();
    return;
    }
*/
    // Prepare the response
    int sensorReading = analogRead(ANALOG_IN);
    String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n <body> <h1>GPIO2 is now = ";
    s += (val1)?"high<p>":"low<p>";
    s += "Analog Value is now = ";
    s += (sensorReading);
    s += "</h1><p>";
    //s += "<img src='https://lh4.ggpht.com/yPq0eEBNR4g530UHDfpbtwe-yiAMLVjUcnGCsjW9_K9VniuLr_YbeefSsd3uqYvZWJ8=w300'><p>";
    //s += "<iframe width='560' height='315' src='https://www.youtube.com/embed/ZicP4y-nFg4' frameborder='0' allowfullscreen></iframe>";
    //s += "</html>\n";
    // Send the response to the client
    client.print(s);

    //-----
    client.println("<svg height='210' width='300'>");
    int val = analogRead(A0)/5;
    int y1 = 200-val;
    for(int i=1;i<300;i++){
      // 아나로그입력 생성(0-1023):1023=3.3V
      int x1 = (i-1);
      int x2 = i;
      int val = analogRead(A0)/5;
      int y2 = 200-val;
      client.println("<line x1='");
 
      client.println(x1);
      client.println("' y1='");
      client.println(y1);
      client.println("' x2='"); 
      client.println(x2);
      client.println("' y2='");
      client.println(y2);
      client.println("'");
      client.println("' style='stroke:rgb(255,0,0);stroke-width:2' />");
      client.println("Sorry, your browser does not support inline SVG.");
      y1 = y2;
    }

    client.println("</svg>");
    //client.println("  </body>");
    client.println("<br><br>");
    client.println("<a href=\"/on\"\"><button>Data Refresh </button></a><br />");          
    client.println("</html>");
    delay(1);
    delay(1);
    Serial.println("Client disonnected");
  }
 
}

//-------------------
void flip_test()
{
  int inputA_val = analogRead(ANALOG_IN);
 
  prt_index ++;
  //Serial.printf("%d",prt_index);
  switch (prt_index % 4)
  {
    case 0:
      Serial.printf("^");
      break;

    case 1:
      Serial.printf("-");
      break;

    case 2:
      Serial.printf("^");
      break;

    case 3:
      Serial.printf("; , B: %d \n", inputA_val);
      break;
  }
}

//--------------------
void led_test()
{
  if (led_flag)
  {
    led_flag = 0;
    digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  }
  else
  {
    led_flag = 1;
    digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  }
}

--------------------------------------------------------------------------

 

-------------------------------- 출력 -----------------------------------

 

 

 

--------------------------------------------------------------------------

 

'공부 > arduino' 카테고리의 다른 글

nodeMCU oled 드라이브 U8g2  (0) 2018.03.23
nodeMCU web 따라하기 3  (0) 2018.03.12
nodeMCU Web 따라하기 2  (0) 2018.03.12
nodeMCU web 따라하기  (0) 2018.03.12
nodeMCU wifi 연결  (0) 2018.03.12
nodeMCU analog input 업데이트  (0) 2018.03.10
Posted by 큰파도
공부/arduino2018.03.12 12:10

원천 소스

https://blog.naver.com/mtinet/220791197571

 

https://github.com/mtinet/ESP8266_12E/blob/master/WiFiWebServer.ino

 

소스를 따라해봤다.

 

------------------------------- 소스 ------------------------------------

 

#include <ESP8266WiFi.h>
#include <Ticker.h>

#define LED     D0    //LED PIN define
#define KEY_IN  D3    //Flash key pin define
#define ANALOG_IN A0  //analog in define


Ticker flipper1;
Ticker flipper2;


const char *ssid =  "ssid";     // replace with your wifi ssid and wpa2 key
const char *pass =  "----";

WiFiClient client;

unsigned int prt_index = 0;
unsigned char led_flag = 0;


void flip_test();
void led_test();

WiFiServer server(80);

// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  delay(10);
 
  Serial.println("Start..");

  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED, OUTPUT);
  pinMode(KEY_IN, INPUT);   // == pinMode(KEY_IN, INPUT);

  Serial.println("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, pass);
 
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");

  Serial.print("MAC: ");
  Serial.println(WiFi.macAddress());

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());

  flipper1.attach(0.3, flip_test);    //start , ms
  flipper2.attach(0.5, led_test);       //start , ms

  //flipper.detach(); //stop
}

// the loop function runs over and over again forever
void loop() {

  int buttonState = digitalRead(KEY_IN);
  if (buttonState == 0)
  {
    Serial.printf("button key input !! \n");
  }

  WiFiClient client = server.available();
  if (client)
  {
    Serial.println("new client");
    while(!client.available()){
    delay(1);
    }

    // Read the first line of the request
    String req = client.readStringUntil('\r');
    Serial.println(req);
    client.flush();
 
    // Match the request
    int val = 0;
    /*if (req.indexOf("/gpio/0") != -1)
    val = 0;
    else if (req.indexOf("/gpio/1") != -1)
    val = 1;
    else {
    Serial.println("invalid request");
    client.stop();
    return;
    }
*/
    // Prepare the response
    int sensorReading = analogRead(ANALOG_IN);
    String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<h1>GPIO2 is now = ";
    s += (val)?"high<p>":"low<p>";
    s += "Analog Value is now = ";
    s += (sensorReading);
    s += "</h1><p>";
    s += "<img src='https://lh4.ggpht.com/yPq0eEBNR4g530UHDfpbtwe-yiAMLVjUcnGCsjW9_K9VniuLr_YbeefSsd3uqYvZWJ8=w300'><p>";
    s += "<iframe width='560' height='315' src='https://www.youtube.com/embed/ZicP4y-nFg4' frameborder='0' allowfullscreen></iframe>";
    s += "</html>\n";
   
    
    // Send the response to the client
    client.print(s);
    delay(1);
    Serial.println("Client disonnected");
  }
 
}

//-------------------
void flip_test()
{
  int inputA_val = analogRead(ANALOG_IN);
 
  prt_index ++;
  //Serial.printf("%d",prt_index);
  switch (prt_index % 4)
  {
    case 0:
      Serial.printf("^");
      break;

    case 1:
      Serial.printf("-");
      break;

    case 2:
      Serial.printf("^");
      break;

    case 3:
      Serial.printf("; , B: %d \n", inputA_val);
      break;
  }
}

//--------------------
void led_test()
{
  if (led_flag)
  {
    led_flag = 0;
    digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  }
  else
  {
    led_flag = 1;
    digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  }
}

 

--------------------------------------------------------------------------

 

 

------------------------------- 출력 -------------------------------------

 

 

---------------------------------------------------------------------------

 

 

'공부 > arduino' 카테고리의 다른 글

nodeMCU web 따라하기 3  (0) 2018.03.12
nodeMCU Web 따라하기 2  (0) 2018.03.12
nodeMCU web 따라하기  (0) 2018.03.12
nodeMCU wifi 연결  (0) 2018.03.12
nodeMCU analog input 업데이트  (0) 2018.03.10
nodeMCU 참고 사이드  (0) 2018.03.10
Posted by 큰파도
공부/arduino2018.03.12 11:26

 

#include <ESP8266WiFi.h>
#include <Ticker.h>

#define LED     D0    //LED PIN define
#define KEY_IN  D3    //Flash key pin define
#define ANALOG_IN A0  //analog in define


Ticker flipper1;
Ticker flipper2;


const char *ssid =  "ssid";     // replace with your wifi ssid and wpa2 key
const char *pass =  "password";

 

WiFiClient client;

 

unsigned int prt_index = 0;
unsigned char led_flag = 0;


void flip_test();
void led_test();


// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  delay(10);
 
  Serial.println("Start..");

  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED, OUTPUT);
  pinMode(KEY_IN, INPUT);   // == pinMode(KEY_IN, INPUT);

  Serial.println("Connecting to ");
  Serial.println(ssid);

 

  WiFi.begin(ssid, pass);
 
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println("");
  Serial.println("WiFi connected");

 

  Serial.print("MAC: ");
  Serial.println(WiFi.macAddress());

 

  flipper1.attach(0.3, flip_test);    //start , ms
  flipper2.attach(0.5, led_test);       //start , ms

  //flipper.detach(); //stop
}

 

// the loop function runs over and over again forever
void loop() {

  int buttonState = digitalRead(KEY_IN);
  if (buttonState == 0)
  {
    Serial.printf("button key input !! \n");
  }
}

 

 

//-------------------
void flip_test()
{
  int inputA_val = analogRead(ANALOG_IN);
 
  prt_index ++;
  //Serial.printf("%d",prt_index);
  switch (prt_index % 4)
  {
    case 0:
      Serial.printf("^");
      break;

    case 1:
      Serial.printf("-");
      break;

    case 2:
      Serial.printf("^");
      break;

    case 3:
      Serial.printf("; , B: %d \n", inputA_val);
      break;
  }
}

 

 

//--------------------
void led_test()
{
  if (led_flag)
  {
    led_flag = 0;
    digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  }
  else
  {
    led_flag = 1;
    digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  }
}

 

 

 

'공부 > arduino' 카테고리의 다른 글

nodeMCU Web 따라하기 2  (0) 2018.03.12
nodeMCU web 따라하기  (0) 2018.03.12
nodeMCU wifi 연결  (0) 2018.03.12
nodeMCU analog input 업데이트  (0) 2018.03.10
nodeMCU 참고 사이드  (0) 2018.03.10
nodeMCU pin MAP 다시보기  (0) 2018.03.09
Posted by 큰파도
공부/arduino2018.03.10 12:54

타이머 ticker 를 2개로 늘리고 ADC 를 살려 봤다.


------------------ 참고소스 ----------------------


#include <Ticker.h>


#define LED     D0    //LED PIN define 

#define KEY_IN  D3    //Flash key pin define 

#define ANALOG_IN A0  //analog in define



Ticker flipper1;

Ticker flipper2;



unsigned int prt_index = 0;

unsigned char led_flag = 0;



void flip_test();

void led_test();



// the setup function runs once when you press reset or power the board

void setup() {

  Serial.begin(115200);

  delay(10);

  Serial.println("Start..");


  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED, OUTPUT);

  pinMode(KEY_IN, INPUT);   // == pinMode(KEY_IN, INPUT);


  flipper1.attach(0.3, flip_test);    //start , ms

  flipper2.attach(1, led_test);       //start , ms


  //flipper.detach(); //stop


}


// the loop function runs over and over again forever

void loop() {


  int buttonState = digitalRead(KEY_IN);

  if (buttonState == 0)

  {

    Serial.printf("button key input !! \n");

  }

}


//-------------------

void flip_test()

{

  int inputA_val = analogRead(ANALOG_IN);

  

  prt_index ++;

  //Serial.printf("%d",prt_index);

  switch (prt_index % 4)

  {

    case 0:

      Serial.printf("1");

      break;


    case 1:

      Serial.printf("2");

      break;


    case 2:

      Serial.printf("3");

      break;


    case 3:

      Serial.printf("4 , A: %d \n", inputA_val);

      break;

  }

}


//--------------------

void led_test()

{

  if (led_flag)

  {

    led_flag = 0;

    digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW

  }

  else

  {

    led_flag = 1;

    digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)

  }

}



-------------------------------------------------






'공부 > arduino' 카테고리의 다른 글

nodeMCU web 따라하기  (0) 2018.03.12
nodeMCU wifi 연결  (0) 2018.03.12
nodeMCU analog input 업데이트  (0) 2018.03.10
nodeMCU 참고 사이드  (0) 2018.03.10
nodeMCU pin MAP 다시보기  (0) 2018.03.09
nodeMCU 타이머(Ticker)살리기  (0) 2018.03.09
Posted by 큰파도
공부/arduino2018.03.10 12:26

인터넷 검색중 nodeMCU 에 간단한 회로를 첨부해서

소스와 함께 설명한 사이트를 찾았다.


기초적인 내용을 이해하는데 좋을 듯 하다


https://roboindia.com/tutorials/nodemcu-arduino



'공부 > arduino' 카테고리의 다른 글

nodeMCU wifi 연결  (0) 2018.03.12
nodeMCU analog input 업데이트  (0) 2018.03.10
nodeMCU 참고 사이드  (0) 2018.03.10
nodeMCU pin MAP 다시보기  (0) 2018.03.09
nodeMCU 타이머(Ticker)살리기  (0) 2018.03.09
아두이노 멀티 장비 설정  (0) 2018.03.07
Posted by 큰파도
공부/arduino2018.03.09 22:52

PIN MAP 선언 방법이 여러가고 소스마다 달라서 다시 확인 해 본다.

 

NODEMCU의 기본PIN MAP 은 아래와 같다.

 

  • D0 = GPIO16;
  • D1 = GPIO5;
  • D2 = GPIO4;
  • D3 = GPIO0;
  • D4 = GPIO2;
  • D5 = GPIO14;
  • D6 = GPIO12;
  • D7 = GPIO13;
  • D8 = GPIO15;
  • D9 = GPIO3;
  • D10 = GPIO1;
  • LED_BUILTIN = GPIO16
  •  

    #define PPPP D0 로 하면 해당 PPPP 가 D0 로 선언 된다.

    사용 방법은  pinMode(PPPP , OUTPUT);  이된다.

     

    마찬가지로

    int PPPP = 16;  으로 하고 pinMode(PPPP , OUTPUT); 으로 사용하면된다.

    즉 GPIO16 으로 선언을 16이라는 숫자로 선언이 가능하다.

     

     

    '공부 > arduino' 카테고리의 다른 글

    nodeMCU analog input 업데이트  (0) 2018.03.10
    nodeMCU 참고 사이드  (0) 2018.03.10
    nodeMCU pin MAP 다시보기  (0) 2018.03.09
    nodeMCU 타이머(Ticker)살리기  (0) 2018.03.09
    아두이노 멀티 장비 설정  (0) 2018.03.07
    nodemcu led 구동  (0) 2018.03.07
    Posted by 큰파도
    공부/arduino2018.03.09 21:30

    Ticker 를 살렸다.

     

    참고 사이트 : https://github.com/esp8266/Arduino/tree/master/libraries/Ticker

     

    ----------------- 소스  -----------------------

     

    #include <Ticker.h>

    #define LED D0


    Ticker flipper;
    unsigned int prt_index = 0;
    void flip_test();


    // the setup function runs once when you press reset or power the board
    void setup() {
      Serial.begin(115200);
      delay(10);
      Serial.println("Start..");
     
      // initialize digital pin LED_BUILTIN as an output.
      pinMode(LED, OUTPUT);

      flipper.attach(0.3, flip_test);    //start , ms
      //flipper.detach(); //stop
     
    }

    // the loop function runs over and over again forever
    void loop() {
     
      digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1000);                       // wait for a second
      digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
      delay(1000);                       // wait for a second
    }

    void flip_test()
    {
      prt_index ++;
      Serial.printf("%d",prt_index);
    }

     

    -----------------------------------------------

     

    그외 사항 :

     

    1. 기본 소스는 Ver 1.0 이다. 좀더 발전시킨 Ver 2.0 이 있다.

     

    https://github.com/sstaub/Ticker

     

    Ticker-master.zip

     

     

     

    2. TickerScheduler 도 참고할만한것 같다.

     

    https://github.com/Toshik/TickerScheduler

     

    TickerScheduler-master.zip

     

     

     

     

    '공부 > arduino' 카테고리의 다른 글

    nodeMCU 참고 사이드  (0) 2018.03.10
    nodeMCU pin MAP 다시보기  (0) 2018.03.09
    nodeMCU 타이머(Ticker)살리기  (0) 2018.03.09
    아두이노 멀티 장비 설정  (0) 2018.03.07
    nodemcu led 구동  (0) 2018.03.07
    nodeMCU H/W특징  (0) 2018.03.06
    Posted by 큰파도
    공부/arduino2018.03.07 11:12

    아두이노에서 여러개의 보드를 사용하고자 한다면 아래와 같은 방법을 사용

     

    환경설정에서 사용하고자 하는 장비의 json 주소 링크를 한다.

     

     

    툴 > 보드 > 보드메니져 에서 사용하고자 하는 장비 검색후 인스톨 사용

     

    그럼 아래와 같이 여러개의 환경이 등록 된것을 확인 할수 있다.

     

     

    '공부 > arduino' 카테고리의 다른 글

    nodeMCU pin MAP 다시보기  (0) 2018.03.09
    nodeMCU 타이머(Ticker)살리기  (0) 2018.03.09
    아두이노 멀티 장비 설정  (0) 2018.03.07
    nodemcu led 구동  (0) 2018.03.07
    nodeMCU H/W특징  (0) 2018.03.06
    nodeMCU 아두이노 설정  (0) 2018.03.06
    Posted by 큰파도
    공부/arduino2018.03.07 10:56

    --------- 예제 소스 수정 -------------------------------------

     

    #define LED D0

     

    // the setup function runs once when you press reset or power the board
    void setup() {
      // initialize digital pin LED_BUILTIN as an output.
      pinMode(LED, OUTPUT);
    }

     

    // the loop function runs over and over again forever
    void loop() {
      digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1000);                       // wait for a second
      digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
      delay(1000);                       // wait for a second
    }

     

     

    --------- 다운로드 하면 아래 메세지 출력  ------------------

     

    스케치는 프로그램 저장 공간 247051 바이트(23%)를 사용. 최대 1044464 바이트.
    전역 변수는 동적 메모리 32864바이트(40%)를 사용, 49056바이트의 지역변수가 남음.  최대는 81920 바이트.
    Uploading 251200 bytes from C:\Users\bigwa\AppData\Local\Temp\arduino_build_669391/Blink.ino.bin to flash at 0x00000000
    ................................................................................ [ 32% ]
    ................................................................................ [ 65% ]
    ................................................................................ [ 97% ]
    ......                                                                           [ 100% ]

     

     

    '공부 > arduino' 카테고리의 다른 글

    nodeMCU 타이머(Ticker)살리기  (0) 2018.03.09
    아두이노 멀티 장비 설정  (0) 2018.03.07
    nodemcu led 구동  (0) 2018.03.07
    nodeMCU H/W특징  (0) 2018.03.06
    nodeMCU 아두이노 설정  (0) 2018.03.06
    아두이노 Nuvoton 관련  (0) 2018.03.05
    Posted by 큰파도
    공부/arduino2018.03.06 15:11

    1. 통신속도 115200

    2. 보드 모양

     

     

    참고 : https://frightanic.com/iot/comparison-of-esp8266-nodemcu-development-boards/

     

     

    GPIO2(D4) 에 LED 있음 -> 통신시 LED 로 확인 가능

    GPIO16(D0) 에 LED 있음 -> 일반 구동 확인 가능

     

    RST 버튼 은 RESET용

    FLASH 버튼 + 전원 ON 또는 FLASH 버튼 + RST 하면 boot 로더진입 해서 신규 ROM 다운로드 가능

    단 esptool 또는 아두이노는 자동으로 다운로드진입 해서 별도작업 필요 없음

     

    GPIO0(Flash버튼) -> 일반구동시 KEY 입력으로 사용 가능

     

     

    '공부 > arduino' 카테고리의 다른 글

    아두이노 멀티 장비 설정  (0) 2018.03.07
    nodemcu led 구동  (0) 2018.03.07
    nodeMCU H/W특징  (0) 2018.03.06
    nodeMCU 아두이노 설정  (0) 2018.03.06
    아두이노 Nuvoton 관련  (0) 2018.03.05
    아두이노에 STM32 사용설정  (0) 2018.03.05
    Posted by 큰파도