오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_35 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_35

chan_96 2022. 2. 8. 20:09
728x90

온도센서

TMP36 : 전압의 변화량을 이용하여 온도 측정(-40 ~ -120도)



코드

 

 

피에조

 


코드

 

Serial 통신

: USB를 통해 아두이노와 PC 또는 다른 시리얼 장치 간에 정보를 송수신하는 것

 

Serial 모니터

: 아두이노로 송수신된 데이터를 모니터링

 

Serial.begin( )
Serial.print( )
Serial.println( )

Serial.available( ) => 전송한 데이터가 있는지 확인
: 읽어올 수 있는 문자(바이트) 수 int타입 반환 
Serial.read( ) => 전송된 데이터를 char형으로 읽어옴
: 입력된 Serial데이터를 읽은 후 더 이상 읽을 값이 없을 시 -1 반환

- 읽어올 수 있는 문자 수를 반환 -> int타입 리턴
- c언어는 0을 제외한 나머지 숫자는 전부 true -> 0은 false
- 전송한 데이터는 버퍼에 저장된다.
- Serial.available()은 버퍼에 저장된 데이터의 개수를 리턴하는데 read를 하는 순간 읽어온 데이터는 버퍼에서 삭제된다.

Serial.parseInt( ) => 전송된 데이터를 int형으로 읽어옴
: 정수형 숫자 값 읽어오기
ex) int num = Serial.parseInt();

 

전송된 값에 따라 LED 제어 1



 

누적 합 구하기


=> c언어에서는 문자열과 숫자형 데이터는 더하기 연산이 불가능하다

 

 


데이터 포맷

데이터를 주고받을 때는 특정한 형식으로 맞춰줘야 함

=> CSV, JSON, XML

 

CSV

: 쉼표를 기준을 항목을 구분하여 저장한 데이터

장점
용량이 적다(많은 양의 데이터 전송 시 활용)

단점
가독성이 떨어짐

활용
간단한 테이블 작성, 읽는 속도가 중요한 부분

 

JSON

'키 -값' 쌍으로 이루어진 데이터 오브젝트를 전달하기 위한 개방형 표준 포맷

장점
용량이 적고 가독성이 좋다

단점
데이터 양이 많아지면 추출 속도가 떨어짐

활용
자바스크립트 객체, Ajax(비동기 통신) 표준

 

XML

다목적 마크업 언어로 태그 등을 이용하여 데이터의 구조를 작성하는 기술

장점
직관적이다(가독성이 좋음)

단점
용량이 크고 데이터의 양이 많아지면 추출 속도가 떨어짐

활용
단순 게임 옵션, 직접 데이터 수정이 잦은 부분

 

동기통신 VS 비동기통신

 

동기(Synchronous) 통신

: request가 있으면 해당 response가 전달될 때까지 request를 요청할 수 없는 통신 방법

 

 

비동기(Asynchronous) 통신

: request를 보내더라도 response를 언제 받아도 상관없이 다른 request를 요청할 수 있는 통신 방법

jQuery 작성


Vanilla JS 작성


 

오픈 API(영화진흥위원회) 활용한 예제


코드

더보기
html
<div id="movie"></div>
<button onclick="getData()">영화 데이터 요청</button>​

 

 

javascript 방식
function getData(){
    var xhr = new XMLHttpRequest(); //request 객체 생성

    if(!xhr){
        alert("xhr 인스턴스가 생성되지 않았습니다!");
        return false;
    }

    //요청방식, 요청서버경로
    xhr.open("get", "http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20220204");
    //요청
    xhr.send();

    //응답
    xhr.onreadystatechange = function(){
        //요청을 성공적으로 했을 때
        if(xhr.readyState === XMLHttpRequest.DONE){
            if(xhr.status === 200){//응답데이터 성공적으로 받았을 때
                var res = JSON.parse(xhr.responseText);

                var str = `<table border='1'>`;
                str += `<tr>`;
                str += `<th>순위</th>`;
                str += `<th>영화제목</th>`;
                str += `<th>개봉일자</th>`;
                str += `</tr>`;

                for (let i = 0;i < res.boxOfficeResult.weeklyBoxOfficeList.length;i++) {
                    var temp = res.boxOfficeResult.weeklyBoxOfficeList[i];
                    str += `<tr>`;
                    str += `<td>${temp.rank}</td>`;
                    str += `<td>${temp.movieNm}</td>`;
                    str += `<td>${temp.openDt}</td>`;
                    str += `</tr>`;
                }
                str += `</table>`;

                var movie = document.getElementById("movie");
                movie.innerHTML = str;


            }else{//응답데이터 문제가 있을 때
                alert("응답실패");
            }
        }
    }

} // end of getData()​



jQuery방식
function getData(){
    $.ajax({
        url : "http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20220204",
        type : "get", // url : 요청할 서버 경로 , type : 요청 방식(get/post)
        success : function (res){
            console.log(res);

            // 콘솔출력
            for (let i = 0;i < res.boxOfficeResult.weeklyBoxOfficeList.length;i++) {
                console.log(res.boxOfficeResult.weeklyBoxOfficeList[i].rank);
                console.log(res.boxOfficeResult.weeklyBoxOfficeList[i].movieNm);
                console.log(res.boxOfficeResult.weeklyBoxOfficeList[i].openDt);
                console.log("---------------------------------------------------");
            }

            //document 출력
            var str = `<table border='1'>`;
            str += `<tr>`;
            str += `<th>순위</th>`;
            str += `<th>영화제목</th>`;
            str += `<th>개봉일자</th>`;
            str += `</tr>`;

            for (let i = 0;i < res.boxOfficeResult.weeklyBoxOfficeList.length;i++) {
                var temp = res.boxOfficeResult.weeklyBoxOfficeList[i];
                str += `<tr>`;
                str += `<td>${temp.rank}</td>`;
                str += `<td>${temp.movieNm}</td>`;
                str += `<td>${temp.openDt}</td>`;
                str += `</tr>`;
            }
            str += `</table>`;

            $("#movie").html(str);
        },
        error : function (){
            alert("통신실패!");
        }
    });
}​


API 링크
https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do?serviceId=searchWeeklyBoxOffice

 

728x90
Comments