'전체 글'에 해당되는 글 139건

  1. 2024.01.08 ESP8266 라이브러리, 예제 1
  2. 2024.01.08 ESP8266 샘플 많은 곳 1
  3. 2024.01.08 ESP8266... SoftwareSerial Server 1
  4. 2024.01.08 광센서 CdS Cell (GL7528)/Light Sensor
728x90
 

 

1. 라이브러리 설치

https://github.com/Diaoul/arduino-ESP8266

1) 위 URL 접속 후, "download"버튼 클릭. 내려받은 zip 파일을 아두이노IDE 메뉴 "스케치 > 라이브러리 포함하기 > .zip 라이브러리 추가..." 클릭 후, 다운받은 zip파일을 추가함.

2) 예제, "Complete" 참조

 

 

PS. 아래 소스에서 wifi.read() 할 때, 다음 버퍼보다 큰 데이터가 수신되는 경우, 추가 코딩 필요함.

#include <SoftwareSerial.h>
#include "ESP8266.h"

#define DEBUG true

#define SSID "U+Net5B6F"
#define PASS "1000019118"
#define DST_IP "211.172.246.98" //baidu.com

SoftwareSerial esp8266Serial = SoftwareSerial(2, 3);
ESP8266 wifi = ESP8266(esp8266Serial);

void setup()
{
    Serial.begin(9600);

    // ESP8266
    esp8266Serial.begin(9600);
    wifi.begin();
    wifi.setTimeout(1000);

    /****************************************/
    /******       Basic commands       ******/
    /****************************************/
    // test
    Serial.print("test: ");
    Serial.println(getStatus(wifi.test()));

    // restart
    Serial.print("restart: ");
    Serial.println(getStatus(wifi.restart()));

    // getVersion
    char version[16] = {};
    Serial.print("getVersion: ");
    Serial.print(getStatus(wifi.getVersion(version, 16)));
    Serial.print(" : ");
    Serial.println(version);

    // setWifiMode
    ************************************/
    // joinAP
    Serial.print("joinAP: ");
    Serial.println(getStatus(wifi.joinAP(SSID, PASS)));
    
    // getIP
    Serial.println("getIP: ");
    sendData("AT+CIFSR\r\n", 1000, DEBUG); // wifi mode : 1:station,2:AP, 3:dual

    /****************************************/
    /******       TCP/IP commands      ******/
    /****************************************/
    //서버모드로 하기전에 다중접속모드를 on 해야, 서버시작시 오류가 발생하지 않음.
    sendData("AT+CIPMUX=1\r\n", 1000, DEBUG);
    // createServer
    unsigned int port = 80;
    Serial.print("createServer: ");
    Serial.println(getStatus(wifi.createServer(port))); // port

}

void loop()
{
    /****************************************/
    /******        WiFi commands       ******/
    /****************************************/

    // read data
    unsigned int id;
    int length;
    int totalRead = 0;
    unsigned int bufferSize = 256;    
    char buffer[bufferSize] = {};

    if ((length = wifi.available()) > 0) {
      id = wifi.getId();
      if (length > 0) {
        do {        
          totalRead += wifi.read(buffer, bufferSize);
          Serial.print("Received ");
          Serial.print(totalRead);
          Serial.print("/");
          Serial.print(length);
          Serial.print(" bytes from client ");
          //Serial.print("from client ");
          Serial.print(id);
          Serial.println(": ");
          Serial.println((char*)buffer);
          wifi.flush();
        } while (totalRead < length);
      }
    }
}


void getConnectionStatue(ESP8266 wifi) {
    ESP8266ConnectionStatus connectionStatus;
    ESP8266Connection connections[5];
    unsigned int connectionCount;
    Serial.print("getConnectionStatus: ");
    Serial.print(getStatus(wifi.getConnectionStatus(connectionStatus, connections, connectionCount)));
    Serial.print(" : ");
    Serial.println(connectionCount);
    for (int i = 0; i < connectionCount; i++) {
      Serial.print(" - Connection: ");
      Serial.print(connections[i].id);
      Serial.print(" - ");
      Serial.print(getProtocol(connections[i].protocol));
      Serial.print(" - ");
      Serial.print(connections[i].ip);
      Serial.print(":");
      Serial.print(connections[i].port);
      Serial.print(" - ");
      Serial.println(getRole(connections[i].role));
    }
  delay(200);
}

String getStatus(bool status)
{
    if (status)
        return "OK";

    return "KO";
}

String getStatus(ESP8266CommandStatus status)
{
    switch (status) {
    case ESP8266_COMMAND_INVALID:
        return "INVALID";
        break;

    case ESP8266_COMMAND_TIMEOUT:
        return "TIMEOUT";
        break;

    case ESP8266_COMMAND_OK:
        return "OK";
        break;

    case ESP8266_COMMAND_NO_CHANGE:
        return "NO CHANGE";
        break;

    case ESP8266_COMMAND_ERROR:
        return "ERROR";
        break;

    case ESP8266_COMMAND_NO_LINK:
        return "NO LINK";
        break;

    case ESP8266_COMMAND_TOO_LONG:
        return "TOO LONG";
        break;

    case ESP8266_COMMAND_FAIL:
        return "FAIL";
        break;

    default:
        return "UNKNOWN COMMAND STATUS";
        break;
    }
}

String getRole(ESP8266Role role)
{
    switch (role) {
    case ESP8266_ROLE_CLIENT:
        return "CLIENT";
        break;

    case ESP8266_ROLE_SERVER:
        return "SERVER";
        break;

    default:
        return "UNKNOWN ROLE";
        break;
    }
}

String getProtocol(ESP8266Protocol protocol)
{
    switch (protocol) {
    case ESP8266_PROTOCOL_TCP:
        return "TCP";
        break;

    case ESP8266_PROTOCOL_UDP:
        return "UDP";
        break;

    default:
        return "UNKNOWN PROTOCOL";
        break;
    }
}

void sendData(String command, const int timeout, boolean debug) {
  String response = "";
  esp8266Serial.print(command);
  long int time = millis();

  while((time + timeout) > millis()) {
    while(esp8266Serial.available()) {
      char c = esp8266Serial.read();
      response += c;
    }
  }

  if(debug) {
    Serial.println(response);
  }
}
 
728x90
Posted by 하루y
728x90

# 아두이노에 SoftwareSerial.h 만으로 ESP8266으로 wifi 서버 송수신

728x90
Posted by 하루y
728x90

간단한 예제....

결국 많은 라이브러리 제대로 동작되지 않아, AT명령으로만 구성.

필요한 소스는 다른 라이브러리를 참조해서 작성해야 할 듯....

- AT명령 참조할 것. https://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference/

- 아두이노 보드와 SoftwareSerial 해서 ESP8266 를 통해 wifi는 느리므로, ESP8266 으로 Server 구성해볼 것.

. 아두이노 UNO보드를 이용해서 ESP826 칩으로 업로드하려면, atmega328p 칩을 제거해야함.

 

#include <SoftwareSerial.h>
 
#define DEBUG true
 
SoftwareSerial esp8266(2,3); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.
                             // This means that you need to connect the TX line from the esp to the Arduino's pin 2
                             // and the RX line from the esp to the Arduino's pin 3

unsigned int count = 0;

void setup() {
    Serial.begin(9600);
    esp8266.begin(9600); // your esp's baud rate might be different
    
    Serial.println("");
    Serial.println("ESP8266 ESP-01 module");
    Serial.println("");

    sendData("AT+RST\r\n",2000,DEBUG); // reset module       
    sendData("AT+CWMODE=1\r\n",1000,DEBUG); // configure as access point    
    sendData("AT+CWJAP=\"U+Net5B6F\",\"1000019118\"\r\n", 5000, DEBUG);  
    sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address      
    //sendData("AT+CWSAP=\"esp8266_j2h\",\"12345678\",5,3\r\n",1000,DEBUG); // ap모드        
    sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections    
    sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80
}
 
void loop() {
  if(esp8266.available()) // check if the esp is sending a message 
  {
    if(esp8266.find("+IPD,"))
    {
     delay(1000);
 
     int connectionId = esp8266.read()-48; // subtract 48 because the read() function returns 
                                           // the ASCII decimal value and 0 (the first decimal number) starts at 48

      String response = ""; 
      while(esp8266.available()) {
        // The esp has data so display its output to the serial window 
        char c = esp8266.read(); // read the next character.
        response+=c;
      }
        
     if(DEBUG && response.length() > 0) {
      Serial.println("\r\n------------------ response start");      
      Serial.println(response);
      Serial.println("------------------ response end");      
     }
               
    String webpage = "";
    //webpage  = "HTTP/1.1 200 OK\r\n";            // 크롬, IE는 해더로 인식하나, ios에서 인식 안함.
    //webpage += "Content-Type: text/html\r\n";
    //webpage += "Connection: close\r\n";
    //webpage += "Refresh: 10\r\n";
    //webpage += "\r\n";
    webpage += "<!DOCTYPE HTML>\r\n";
    webpage += "<html><body>\r\n";
    webpage += "<h1>Hello</h1><h2>World! " + String(count++) + "</h2><button>LED1</button><button>LED2</button>\r\n"; 
    webpage += "</body></html>\r\n";
    
     String cipSend = "AT+CIPSEND=";
     cipSend += connectionId;
     cipSend += ",";
     cipSend +=webpage.length();
     cipSend +="\r\n";
     
     sendData(cipSend,1000,DEBUG); // cipsend - maxlength 2048
     sendData(webpage,1000,DEBUG);
     /*
     webpage="<button>LED2</button>";
     
     cipSend = "AT+CIPSEND=";
     cipSend += connectionId;
     cipSend += ",";
     cipSend +=webpage.length();
     cipSend +="\r\n";
     
     sendData(cipSend,1000,DEBUG);
     sendData(webpage,1000,DEBUG);
     */
     String closeCommand = "AT+CIPCLOSE="; 
     closeCommand+=connectionId; // append connection id
     closeCommand+="\r\n";
     
     sendData(closeCommand,3000,DEBUG);
    }
  }
}

String sendData(String command, const int timeout, boolean debug)
{
    String response = ""; 
    esp8266.println(command); // send the read character to the esp8266
    long int time = millis();
    delay(20);
    
    while( (time+timeout) > millis()) {
      while(esp8266.available()) {
        // The esp has data so display its output to the serial window 
        char c = esp8266.read(); // read the next character.
        response+=c;
      }  
    }
    
    if(debug && response.length() > 0) {
      Serial.println("\r\n------------------ response start");      
      Serial.println(response);
      Serial.println("------------------ response end");
    }
    
    return response;
}

void clear() {
    while (esp8266.read() != -1) {}
}
728x90
Posted by 하루y
728x90

판매사이트 : https://www.devicemart.co.kr/

 

PDF: 센서 스펙

D7-CdS-e.pdf
0.26MB

 

 
 
analogRead()
Description


Reads the value from the specified analog pin. The Arduino board contains a 6 channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to digital converter. This means that it will map input voltages between 0 and 5 volts into integer values between 0 and 1023. This yields a resolution between readings of: 5 volts / 1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed using analogReference().


It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second.


Syntax


analogRead(pin)


Parameters


pin: the number of the analog input pin to read from (0 to 5 on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega)


Returns


int (0 to 1023)
analogWrite()


Description


Writes an analog value (PWM wave) to a pin. Can be used to light a LED at varying brightnesses or drive a motor at various speeds. After a call to analogWrite(), the pin will generate a steady square wave of the specified duty cycle until the next call to analogWrite() (or a call to digitalRead() or digitalWrite() on the same pin). The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz. Pins 3 and 11 on the Leonardo also run at 980 Hz.


On most Arduino boards (those with the ATmega168 or ATmega328), this function works on pins 3, 5, 6, 9, 10, and 11. On the Arduino Mega, it works on pins 2 - 13 and 44 - 46. Older Arduino boards with an ATmega8 only support analogWrite() on pins 9, 10, and 11.


The Arduino Due supports analogWrite() on pins 2 through 13, plus pins DAC0 and DAC1. Unlike the PWM pins, DAC0 and DAC1 are Digital to Analog converters, and act as true analog outputs.


You do not need to call pinMode() to set the pin as an output before calling analogWrite().


The analogWrite function has nothing to do with the analog pins or the analogRead function.


Syntax


analogWrite(pin, value)


Parameters


pin: the pin to write to.


value: the duty cycle: between 0 (always off) and 255 (always on).
analogReference() : Configures the reference voltage used for analog input. (default: 5V)
analogReadResolution() is an extension of the Analog API for the Arduino Due and Zero.
analogWriteResolution() is an extension of the Analog API for the Arduino Due and Zero.

 

 

 

728x90
Posted by 하루y