serin99
serin 개발 일기
serin99
전체 방문자
오늘
어제
  • 분류 전체보기 (76)
    • FE (25)
      • JavaScript (14)
      • React (6)
      • Web (5)
    • IT (22)
      • [FE] 위클리 페이퍼 (19)
      • CS (2)
    • Project (4)
    • Python (8)
    • DB (2)
    • IoT (14)
      • 라즈베리파이 (9)
      • 아두이노 (4)

태그

  • Python
  • 자바스크립트
  • 프로그래밍
  • 부트캠프
  • 라즈베리파이

인기 글

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
serin99

serin 개발 일기

IoT/아두이노

아두이노 Wifi 모듈 사용하기(온습도 센서)

2023. 2. 27. 22:27
728x90

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 통신을 통해 온습도 센서의 값을 전달하는 코드이다. 

728x90

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

아두이노와 서버 소켓통신  (1) 2023.05.16
GP2Y1010AU0F 미세먼지 센서 테스트  (0) 2023.05.15
CO2 센서  (0) 2023.03.02
    'IoT/아두이노' 카테고리의 다른 글
    • 아두이노와 서버 소켓통신
    • GP2Y1010AU0F 미세먼지 센서 테스트
    • CO2 센서
    serin99
    serin99
    FE 개발자가 되기 위해 공부하는 사람

    티스토리툴바