한 걸음 두 걸음

아두이노-안드로이드 원격 웹 제어 ] 웹에서 아두이노 모듈 제어하기 본문

Arduino

아두이노-안드로이드 원격 웹 제어 ] 웹에서 아두이노 모듈 제어하기

언제나 변함없이 2019. 7. 17. 17:19
반응형

#include <IoTStarterKit_WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2 //온도센서의 데이터선을 2번 pin에 연결
#define TAG_ID A

char *A[]={"Temperature","led","Light"};
int i;
int val;     //조도센서변수
int cds=A0;  //조도센서데이터
int mapping; //조도센서데이터 가공

OneWire ourWire(ONE_WIRE_BUS);  
DallasTemperature sensors(&ourWire);//oneWire선언한 것을 sensors 선언시 참조함.

//wifi Shield
#define WIFI_SSID   "ICT-LAB-2.4G"      //와이파이 SSID
#define WIFI_PASS "12345678"  //와이파이 비밀번호

//IoTMakers
IoTMakers g_im;
#define deviceID "gkskfhD1563338248460" //아이디
#define authnRqtNo "uspbxao7h"          //패스워드
#define extrSysID "OPEN_TCP_001PTL001_1000007512"  //게이트웨이 연결 ID

//IoT Makers 접속을 초기화 하는 함수
void init_iotmakers()
{
  while(1)
  {
    // AP 접속
    Serial.print("Connect to AP...");
    while(g_im.begin(WIFI_SSID, WIFI_PASS)<0) { 
      Serial.println("retrying.");
      delay(1000);
    }
    Serial.println("success");

    // 인자값으로 받은 정보로 KT IoT Makers 접속
    g_im.init(deviceID, authnRqtNo, extrSysID); 

    // IoTMakers 플랫폼 연결
    Serial.print("Connect to platform... ");
    while ( g_im.connect() < 0 ){
      Serial.println("retrying.");
      delay(1000);
    }
    Serial.println("success");

    //IoTMakers 플랫폼 인증
    Serial.print("Auth... ");
    if(g_im.auth_device() >= 0) {
      Serial.println("success ");
      return;
    }
    Serial.println("fail");
  }
}


void setup() 
{
  Serial.begin(9600);
  sensors.begin();
  init_iotmakers();
}


void loop()
{val=analogRead(cds); //조도센서읽은값을 변수에저장
 mapping=map(val,0,1023,0,255);//0~1023 -> 0~50 변환
  if(i==3){i=0;}

  while(i<3) {
  static unsigned long tick = millis();

  // 만약 플랫폼 접속이 종료되었을 경우 다시 접속
  if(g_im.isServerDisconnected() == 1) 
  {
    init_iotmakers();
  }

  // 센서 값을 읽어오는 시간 설정
  if ( ( millis() - tick) > 1000 )
  {
    send_temperature();
    tick = millis();
  }

  // IoTMakers 플랫폼 수신처리 및 keepalive 송신
  g_im.loop();
 i++;
   delay(300);}
}

int send_temperature()
{ 

  // 센서 값을 읽어온다.
  sensors.requestTemperatures(); 
  int data[] = {sensors.getTempCByIndex(0),val,mapping};

  // 시리얼모니터에 온도값 출력
  Serial.print("전송데이터 : ");
  Serial.print(data[i]);
  Serial.println("ok");


 if ( g_im.send_numdata(TAG_ID[i], (double)data[i]) < 0 ) { // 센서값 전송
      Serial.println(F("fail"));  
    return -1;
  }
  return 0;
}

제어부분 에러떠서 제어소스 지워놓은 tree래ㅠㅋㅋㅋ그래서


void mycb_strdata_handler(char *tagid, char *strval)
{ 
if(strcmp(TAG_ID[3], tagid) == 0 && strcmp(strval, "on") == 0)
{
digitalWrite(led,HIGH);
Serial.println("32도 초과로 led on"); 
}
else if ( strcmp(TAG_ID[3], tagid) == 0 && strcmp(strval, "off") == 0 ){
digitalWrite(led,LOW);
Serial.println("led off"); 
}

추가하고 Templed 추가 if(3을 4로 변경)하면 완성됩니다.

반응형