ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아두이노+ esp8266+DTH11
    아두이노 2016. 9. 19. 21:59


    esp8266을 구입하면 제일면저 firmware를 업그레이드 하자(0.9.9.x)


    es8266 AP명령어


    AT+GMR  //버전확인


    AT+CWMODE? //작동 모드 확인  1:station 2:AP 3:both


    AT+CWMODE=3;  //작동모드 설정


    AT+CWLAP //AP목록 확인


    AT+CWJAP="SID Name","PASSWORD"


    AT+CWJAP? //접속AP확인 


    AT+CIFSR //할당 받은 ip확인


    멀티채널 접속을 Disable

    AT+CIPMUX=0

    AT+CIPSTART="TCP","184.106.153.149",80

    AT+CIPSEND=43

    GET /update?key=QMRY6Q????GN????&field1=0

    //   /input/[publicKey]?private_key=[privateKey]&humidity=[value]&temp=[value]


    멀티채널을 이용해서 접속하는 방법

    allow multiple connections

    AT+CIPMUX=1

    >>OK

    AT+CIPMUX?


    AT+CIPSEND=4,43 //채널 번호, 전송데이터 (문자수+2)

    GET /update?key=[THINGSPEAK_KEY]&field1=0



    TCP connection 예제


    AT+CIPSTART=4,"TCP","192.168.1.104",9999

    AT+CUPMODE=1

    AT+CIPSEND=4,5 







    SockeTest 다운로드:https://sourceforge.net/projects/sockettest/





    DHT11+아두이노+ESP8266 연결도




    <소스 코드>


    #include <SoftwareSerial.h>

    #include <stdlib.h>

    #include "DHT.h"


    SoftwareSerial SoftSerial(8, 9); // RX, TX


    #define DHTPIN 7     // DHT11이 연결되어 있는 아두이노 핀

    #define DHTTYPE DHT11   // DHT 11


    DHT dht(DHTPIN, DHTTYPE); //DHT타입 설정



    // thinkspeak에서 받은 키값

    String apiKey = "내가 받은 시리얼키";

    int exit_flag = 0;

    char SoftSerial_read;

    int ms_old, ms_new;


    // 한번만 실행 되는 코드

    void setup() {

      

      // 아두이노와 PC가 통신하는 아두이노 하드웨어 시리얼 

      Serial.begin(9600);

      

      // 아두이노와 esp8266이 통신하는 시리얼 포트

      

      SoftSerial.begin(9600);


      Serial.println("============ARDUINO START============");


      // ESP8266 초기화

      SoftSerial.println("AT+RST");


      exit_flag = 0;

      

      ms_old = millis();

      

      do {

        

    ms_new = millis();

        

    if (SoftSerial.available())

        {

          SoftSerial_read = SoftSerial.read(); //esp8266이 전송하는 값을 읽어서 저장

          Serial.write(SoftSerial_read); //pc 시리얼 모니터에 esp8266이 전송하는 값 수신

          

     exit_flag=1;

    }

        if ( (ms_new - ms_old) > 3000 )

        {

          exit_flag = 1;

          Serial.println("\n\rtimeout@reset");

          Serial.println("====================================");

        }

      } while (exit_flag == 0);

      

      exit_flag = 0;


    }




    float temp, humi;


    int counter=0;


    // the loop


    void loop() {


      humi = dht.readHumidity();

      temp = dht.readTemperature();


      if (isnan(humi) || isnan(temp) ) {

        Serial.println("Failed to read from DHT sensor!");

        return;

      } else


      {

        Serial.print("temperature:");

        Serial.print(temp);

        Serial.print(" humidity:");

        Serial.print(humi);

        Serial.println();

      }


      // convert to string


      char buf[16];

      String strTemp = dtostrf(temp, 4, 1, buf); //flot형을 문자열로 변환 4:width 1:정밀도 123.1

      String strTemp2 = dtostrf(humi, 4, 1, buf);


      // TCP connection

      String cmd = "AT+CIPSTART=\"TCP\",\"";

      cmd += "184.106.153.149"; // api.thingspeak.com

      cmd += "\",80";

      SoftSerial.println(cmd); //esp8266으로 데이터 전송


      exit_flag = 0;


      ms_old = millis();


      do {

        ms_new = millis();


        if (SoftSerial.available())

        {

          SoftSerial_read = SoftSerial.read();


          Serial.write(SoftSerial_read);


          if (SoftSerial_read == 'd') // OK Linked

          {

            exit_flag = 1;

          }

        }

        if ((ms_new - ms_old) > 1000)

        {

          exit_flag = 1;

          Serial.println("\n\rtimeout@AT+CIPSTART");

        }

      } while (exit_flag == 0);


      exit_flag = 0;


      // prepare GET string

      

      String getStr = "GET /update?api_key=";

      getStr += apiKey;

      getStr += "&field1=";

      getStr += String(strTemp);

      getStr += "&field2=";

      getStr += String(strTemp2);

      getStr += "\r\n\r\n";


      // send data length

      cmd = "AT+CIPSEND=";

      cmd += String(getStr.length());

      SoftSerial.println(cmd);

      


      exit_flag = 0;

      ms_old = millis();

      do {

        ms_new = millis();

        if (SoftSerial.available())

        {

          SoftSerial_read = SoftSerial.read();

          Serial.write(SoftSerial_read);

          if (SoftSerial_read == '>' )

          {

            exit_flag = 1;

            SoftSerial.print(getStr); 데이터 전송

          }

        }

        if ((ms_new - ms_old) > 1000)

        {

          exit_flag = 1;

          Serial.println("\n\rtimeout@AT+CIPSEND");

        }

      } while (exit_flag == 0);

      exit_flag = 0;


      ms_old = millis();


      do {

        ms_new = millis();

        if (SoftSerial.available())

        {

          SoftSerial_read = SoftSerial.read();

          Serial.write(SoftSerial_read);

          exit_flag = 1;

    }

        if ((ms_new - ms_old) > 3000)

        {

          exit_flag = 1;

          Serial.println("\n\rtimeout@final_send");

        }

      } while (exit_flag == 0);


      exit_flag = 0;


      // thingspeak needs 15 sec delay between updates

      

      Serial.println("\n\rwait for 15 second");

      Serial.println("------------------------------------");


      counter=0;

      

      ms_old = millis();

      

      do {

      

      ms_new = millis();


      if ( (ms_new - ms_old) > 1000) //important use 'greater than'

        {

          ms_old = millis();

          counter++;

          Serial.print(counter);

          Serial.print(" ");      

        }

      } while ( counter<60);


      Serial.println("->");



      }





    자료출처:


    http://orasman.tistory.com/272


    http://electronut.in/an-iot-project-with-esp8266/

    '아두이노' 카테고리의 다른 글

    시리얼 함수  (0) 2016.10.03
    DHT11 온도 습도 센서  (0) 2016.09.18
    아두이노와 블루투스를 이용한 온도 습도 데이터 수집  (0) 2016.09.17
    프로그램1-시리얼 통신2  (0) 2016.07.04
    프로그램1-시리얼통신  (0) 2016.07.03
Designed by Tistory.