//구글광고

온습도계 예제 6 - sms 설정과 sketch


1. sms 설정

본 예제에서는 python 으로 문자 메세지를 전송한다. 
다양한 문자 메세지 회사가 있으니
원하는 곳으로 하자

본 예제에서는 coolsms에서 api를 받아왔다

요즘 스팸 문자가 쏟아져서 법이 개정되었다
발신인의 번호를 인증받아야 한다.

만약 문자 메세지 전송이 안될경우 마이페이지의 전송결과를 조회 해서 실패가 뜨면 인증 부분을 수행해야 한다.



이렇게 발신번호가 없이 예전에 만든 계정이 있다면 발신번호 추가를 통해 발신번호를 꼭 등록하자.



회원가입을 한 후 아두이노 IDE를 실행한다.



상단의 툴 메뉴를 통해 보드와 포트를 설정해준다.





포트선택 화면이다 ip번호가 아닌 com포트를 선택하자.

나중에 시리얼 모니터때 값이 안나오는 문제가 있다.




라이브러리 추가

아래 압축 파일들을 다운받는다.


Adafruit_Sensor-master.zip

DHT-sensor-library-master.zip


2개의  zip 파일을 다운받아 바탕화면이나 아무곳에 저장해 둔다.


스케치 > 라이브러리 포함하기 > .ZIP 라이브러리 추가.. 메뉴를 통해 다운받은 2개의 압축파일을 추가해준다.




아래의 소스 코드를 다운받아서 내용을 붙여넣는다.


온습도계v1.txt



붙여넣은 다음 업로드 버튼을 눌러 코드를 전송한다.




업로드 이후에 우측 상단에 시리얼 모니터 버튼을 클릭한다.

 



시리얼 모니터에 현재 온습도가 나오면 정상 동작하는 것이다.




현재 온도와 습도가 나오고 있다 여기서 변경할 수 있는 변수를 알아보면 ,


#include <Process.h>

#include <stdlib.h>

#include "DHT.h"


#define DHTPIN 8     // 센서의 데이터 핀번호

#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);


String TEM;

String HUM;

char cTEM[5];

char cHUM[5];


double TEM_LIMIT=30.0;  // 온도 문자 경보수치 30도  이 값을 수정하면 알람 임계치가 바뀐다

double HUM_LIMIT=80.0; // 온도 문자 경보 습도 80퍼센트


unsigned long curMillis=0;

unsigned long eventMillis=0;

unsigned long diffMillis=0;

byte eventFlag=LOW; 

unsigned long eventDelay=600000;   // 문자 경보를 알려주는 딜레이 시간 -- 이전에 경보를 보냈으면 10분 동안에는 보내지 않는다.  

 

void setup() {

  // put your setup code here, to run once:

  Bridge.begin();

  dht.begin();

  Serial.begin(9600);

  Serial.println("init");

}


void loop() {

  // put your main code here, to run repeatedly:

  double h = dht.readHumidity();

  double t = dht.readTemperature();

  Serial.print(" TEM:");  

  Serial.print(t);

  Serial.print("  HUM : ");

  Serial.println(h);

      

  dtostrf(h, 3,1, cHUM);

  dtostrf(t, 3,1, cTEM);  

  

  HUM= String(cHUM);

  TEM= String(cTEM);


  curMillis=millis(); // 현재 밀리를 구한다.

 

if (curMillis < eventMillis )

{

   Serial.println("eventmili reset..");

   eventMillis = curMillis ;

}


diffMillis = curMillis - eventMillis;

  

  if (eventFlag == HIGH)

  {

    if ( diffMillis > eventDelay )

    {

      eventFlag=LOW;

        Serial.print(" evenymilli :");  

        Serial.print(eventMillis);

        Serial.print("  curMillis : ");

        Serial.println(curMillis);

        Serial.print(" diff  :");  

        Serial.print( diffMillis );

        Serial.print("  eventDelay  : ");

        Serial.println(eventDelay );

        Serial.println("Event Flag reset..");

      }

    }


  if ((( t > TEM_LIMIT ) && eventFlag == LOW ) || (( h > HUM_LIMIT ) && eventFlag == LOW ))

  {

      eventMillis = curMillis;

      eventFlag=HIGH;

      Serial.println(" SMS alarm !! ");

   

     Process p1;            

     p1.begin("python");

     p1.addParameter("/root/python/sendSMS.py");      

     p1.addParameter(TEM); 

     p1.addParameter(HUM); 

     p1.run();   

      

    }


  Process p;            

  p.begin("python");

  p.addParameter("/root/python/insertDB.py");      

  p.addParameter("1");  

  p.addParameter(TEM); 

  p.addParameter(HUM); 

  p.run();

  Serial.println("Mysql DB insert");  

  

  delay(30000);  //1000 = 1초 , 30초마다 한번 동작하게 한다. 온도게 스팩상 최소 2초로 할것.


}





파이선 소스코드를 아두이노에 업로드 하자


coolsms.py

sendSMS.py


위의 두 예제 파일 중에서 sendSMS.py 를 메모장으로 열어 필요한 부분을 수정하자.


# -*- coding: ms949 -*-


#SMS전송.


import sys

import time

import coolsms


cs = coolsms.sms()

cs.appversion("TEMP/1.0")

cs.charset("cp949")

cs.setuser( "아이디","비밀번호")


cs.addsms("받는사람번호", "보내는사람번호", "온습도알림. 온도:"+sys.argv[1]+" 습도:"+sys.argv[2])


nsent = 0

if cs.connect():

    # add 된 모든 메세지를 서버로 보냅니다.

    nsent = cs.send()

else:

    # 오류처리

    print "Server connect error!!!"


cs.disconnect()

cs.emptyall()

sys.exit(0)

 


빨간색으로 표시된 부분을 자신의 정보에 맞게 변경하자.


그런다음 sftp 를 이용하여 아두이노 윤의 /root/python 폴더를 만들어서 위의 파일을 복사해 두자



sketch 소스의 변수중에 알람온도를 낮춰서 문자가 오는지 테스트 해보자,

단 문자간의 딜레이를 너무 짧게 주면 문자 폭탄을 맞을수 있으니 주의하자.


이렇게 해서 정상적으로 문자가 오면 문자 메세지 전송 및 온습도 측정 부분은 완성이다.


다음엔 DB에 입력하는 파이선 소스와 웹페이지 부분을 보겠다.


+ Recent posts