SHT15 - 온습도 센서
SHT15 센서는 간단히 사용할 수 있는 장점이 있으며, 정밀도가 높은 디지털 온도 및 습도 측정 센서이다.
SHT15는 PCB 기판 위에 단일 칩이 부착되어 있는 형태이며, 칩 안에 온도, 습도 센서와 판독 회로를 내장하고 있다.
테스트 결과
#include <SHT1x.h>
#define dataPin A4 // DATA Pin
#define clockPin A5 // SCK Pin
SHT1x sht1x(dataPin, clockPin);
void setup()
{
Serial.begin(38400);
Serial.println("Starting up");
}
void loop()
{
float temp_c;
float temp_f;
float humidity;
// Read values from the sensor
temp_c = sht1x.readTemperatureC();
temp_f = sht1x.readTemperatureF();
humidity = sht1x.readHumidity();
// Print the values to the serial port
Serial.print("Temperature: ");
Serial.print(temp_c, DEC);
Serial.print("C / ");
Serial.print(temp_f, DEC);
Serial.print("F. Humidity: ");
Serial.print(humidity);
Serial.println("%");
delay(2000);
}
ESP8266(Wifi 모듈)
ESP8266 특징
WiFi 네트워킹을 지원하는 통신 모듈이며, 이를 사용하여 IoT System을 구현할 수 있다.
ESP8266 연결도 및 펌웨어 업데이트
ESP8266을 사용하기 앞서 펌웨어 업데이트를 먼저 해주어야 사용할 수 있다.
먼저 다음과 같이 연결한다.
ESP8266 연결도 및 펌웨어 업데이트
다음 링크로 들어가 펌웨어 업데이트를 해줄 프로그램을 받는다.
https://docs.google.com/file/d/0B3dUKfqzZnlwVGc1YnFyUjgxelE/edit
다음 bin 파일을 다운 받는다. 이때 업데이트 프로그램이랑 같은 폴더에 bin 파일을 둔다.
https://docs.google.com/file/d/0B3dUKfqzZnlwdUJUc2hkZDUyVjA/edit
펌웨어 업데이트 프로그램인 esp8266_flasher.exe를 실행한다.
프로그램을 실행 한 뒤에 Bin버튼을 눌러 펌웨어 업데이트 파일을 넣어준 후
Download버튼으로 펌웨어 업데이트를 실행해 주면 된다.
업데이트 실행한 후 100%까지 되고 Leaving... 문구가 나오면 펌웨어 업데이트는 완료된 것이다.
테스트 결과
테스트 하기에 앞서 아두이노 스케치의 새 파일을 열면 나오는 기본 틀을 업로드해서 아두이노를 초기화해준다.
초기화 과장에서 업로드하기 전 RX, TX는 빼고 해야 오류가 없다.
시리얼 모니터를 열고 아래 옵션에 라인엔딩을 Both NL & CR으로, 통신속도 9600 보드레이트로 세팅한다.
(라인엔딩을 Both NL & CR으로 설정하면 개행문자(\n)가 같이 출력된다.)
여러 AT명령어를 통해 결과 테스트를 진행한다.
AT : AT command 전송이 원활하게 이뤄지는지 확인
AT + GMR : esp8266의 현재 펌웨어 버전을 출력
AT+CWMODE? : esp8266의 모드를 출력
AT+CWMODE='mode num' : esp8266의 모드를 설정
1. Station : client 모드
2. AP : host 모드
3. Dual : client, host 모드
AT+CWLAP : 주변에 존재하는 와이파이 신호 목록들을 출력
AT+CWJAP="SSID", "Password" : SSID에 맞는 password를 가진 와이파이 공유기에 접속한다.
T+CWJAP? : 현재 esp8266에 연결된 와이파이 공유기를 출력한다.
#include <string.h>
#include "ESP8266.h"
#include <SoftwareSerial.h>
#include <SHT1x.h>
#define dataPin A4
#define clockPin A5
SHT1x sht1x(dataPin, clockPin);
#define SSID "inclab201"
#define PASSWORD "93411810"
#define SERVERIP "192.168.0.100"
SoftwareSerial mySerial(10,9);
void setup(){
Serial.begin(9600);
mySerial.begin(9600); //wifi 통신속도
Serial.println("ESP8266 connect");
boolean connected=false;
// 와이파이 초기 연결상태는 false
for(int i=0;i<10;i++)
{
if(connectWiFi())
{
connected = true;
break;
}
}
if (!connected){while(1);}
delay(5000);
}
void loop(){
float temp_c;
float temp_f;
float humidity;
// Read values from the sensor
temp_c = sht1x.readTemperatureC();
temp_f = sht1x.readTemperatureF();
humidity = sht1x.readHumidity();
// Print the values to the serial port
Serial.print("Temperature: ");
Serial.print(temp_c, DEC);
Serial.print("C / ");
Serial.print(temp_f, DEC);
Serial.print("F. Humidity: ");
Serial.print(humidity);
Serial.println("%");
String cmd = "AT+CIPSTART=\"TCP\",\""; //TCP연결
cmd += SERVERIP;
cmd += "\",80"; //http 기본포트는 80
Serial.println(cmd);
mySerial.println(cmd);
if(mySerial.find("Error"))
{
Serial.println( "TCP connect error" );
return;
}
String tempC(temp_c);
String humi(humidity);
cmd = "GET /insert_data.php?temp="+tempC+"&humi="+humi+"\r\n";
mySerial.print("AT+CIPSEND=");
mySerial.println(cmd.length());
Serial.println(cmd);
if(mySerial.find(">")) //커맨드 수행 끝에 응답 OK>에서 >를 찾는 동작
{
Serial.print(">");
}
else
{
mySerial.println("AT+CIPCLOSE");
Serial.println("connect timeout");
delay(1000);
return;
}
mySerial.print(cmd);
delay(2000);
Serial.println("====");
delay(1000);
}
boolean connectWiFi()
{
//mySerial.println("AT+CWMODE=1");
String cmd="AT+CWJAP=\""; // 와이파이 공유기 접속
cmd+=SSID;
cmd+="\",\"";
cmd+=PASSWORD;
cmd+="\"";
mySerial.println(cmd);
Serial.println(cmd);
delay(3000);
if(mySerial.find("OK"))
{
Serial.println("OK, Connected to WiFi.");
return true;
}
else
{
Serial.println("Can not connect to the WiFi.");
return false;
}
}
위에 코드는 esp8266Wifi 모듈을 사용하여 at 통신을 통해 온습도 센서의 값을 전달하는 코드이다.
'IoT > 아두이노' 카테고리의 다른 글
아두이노와 서버 소켓통신 (1) | 2023.05.16 |
---|---|
GP2Y1010AU0F 미세먼지 센서 테스트 (0) | 2023.05.15 |
CO2 센서 (0) | 2023.03.02 |