-
아두이노+ 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
'아두이노' 카테고리의 다른 글
시리얼 함수 (0) 2016.10.03 DHT11 온도 습도 센서 (0) 2016.09.18 아두이노와 블루투스를 이용한 온도 습도 데이터 수집 (0) 2016.09.17 프로그램1-시리얼 통신2 (0) 2016.07.04 프로그램1-시리얼통신 (0) 2016.07.03