최근에 학생들과 아두이노를 이용해 학교 주변의 온도, 습도를 관측해보고 값을 분석해보기로 했다.
아두이노에서 측정한 데이터를 저장하려니 SD카드가 필요했고, 데이터를 확인하기 위해서는 SD카드를 빼고 다시 끼우는 번거로움이 있었다.
문득 데이터를 웹상에 저장하면 어떨까 하는 생각이 들었다.
오늘의 글은 아두이노와 구글 시트를 연동하기 위한 그 첫번째, 구글 스프레드 시트 설정이다.
1. 구글 스프레드 시트
구글 스프레드 시트는 구글이 제공하는 무료 웹 앱이다.
기본적으로 브라우저에서 작동하고 공동 편집과 조회가 가능하며, apps script를 통해 https 요청으로 시트 수정이 가능하다.
먼저 구글에 '구글 스프레드 시트'를 검색해서 시트를 하나 만들어준다.
로그인을 하면 아래와 같은 창이 뜬다. 여기서 빈 스프레드시트를 눌러 시트를 하나 만들어주자.
아래와 같이 새로운 시트가 생성되었다면 먼저 아래와 같이 해보자.
- 스프레드시트의 제목과 시트명을 영어로 바꾸어 준다.(혹시모를 오류 대비)
- 데이터의 열 인덱스를 만들어 준다.
이제 주소창에 있는 스프레드시트의 ID를 기억해두자.
주소의 형식은 '/d/구글스프레드시트 ID/edit#gid=0'이다. 중간 부분을 복사해주면 된다.
이제 구글 스프레드시트에서 기본적인 작업은 끝났다. 이번에는 스프레드시트의 script를 설정해보자.
2. app script 설정
시트 메뉴의 [확장 프로그램]-[Apps Script]로 들어간다.
아래와 같은 창을 볼 수 있다. 이제 function이 있는 곳에 우리가 원하는 코드를 입력하면 된다.
아래의 코드를 입력하자. 여기서 구글 시트의 아이디, 그리고 원하는 값의 이름은 switch, case 구문을 이용해 지정해 주어야 한다.
function doGet(e) {
Logger.log( JSON.stringify(e) );
var result = 'Ok';
if (e.parameter == 'undefined') {
result = 'No Parameters';
}
else {
var sheet_id = '자신의 구글시트 아이디'; // Spreadsheet ID
var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();
var newRow = sheet.getLastRow() + 1;
var rowData = [];
var Curr_Date = new Date();
rowData[0] = Curr_Date; // Date in column A
var Curr_Time = Utilities.formatDate(Curr_Date, "Asia/Tokyo", 'HH:mm:ss');
rowData[1] = Curr_Time; // Time in column B
for (var param in e.parameter) {
Logger.log('In for loop, param=' + param);
var value = stripQuotes(e.parameter[param]);
Logger.log(param + ':' + e.parameter[param]);
switch (param) {
case 'value1':
rowData[2] = value;
result = '3번째 열에 value1 값 입력';
break;
case 'value2':
rowData[3] = value;
result += ' ,4번째 열에 value2 값 입력';
break;
default:
result = "unsupported parameter";
}
}
Logger.log(JSON.stringify(rowData));
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
return ContentService.createTextOutput(result);
}
function stripQuotes( value ) {
return value.replace(/^["']|['"]$/g, "");
}
입력이 끝났다면 해당 코드를 배포해주자. 우측 상단의 배포를 누른 뒤, 새 배포를 눌러준다.
새 배포에서 유형은 웹 앱, 액세스 권한이 있는 사용자는 모든 사용자로 변경 후 배포를 눌러준다.
만일 액세스 권한을 모든 사용자로 하지 않으면 로그인을 요구 한다. 이 때는 권한 다시 모든 사용자로 변경 해주면 된다.
배포를 누르면 엑세스 권한을 요청한다. 액세스 승인을 누르자.
액세스 승인에 대한 창이 나오면 자신의 아이디를 클릭해준다.
경고 창이 뜨는데 무시하고 아래의 Advanced를 누른다.
아래에 뜨는 Go To ~ 부분을 눌러서 권한을 허가해준다.
이후 새 배포 창이 뜨면 웹 앱의 url 부분을 복사해서 설정이 제대로 되었는지 확인해 보자.
3. 웹 앱 확인하기
해당 웹 앱의 URL로 GET 요청을 보내면 쿼리 스트링에 있는 데이터들을 value1, value2에 저장해준다.
주소창에서 웹 앱 주소의 맨 뒤에 아래와 같이 데이터를 붙여서 주소창에 넣은 뒤 엔터를 쳐보자.
https://script.google.com/macros/s/구글 App Script 아이디/exec?value1="원하는값1"&value2="원하는값2"
위와 같은 형태로 데이터를 전달하는 것을 쿼리 스트링이라고 한다. "?"뒤에 원하는 값들을 "&"에 이어서 붙여준다.
구글 시트에 들어가서 확인해보면 아래와 같이 데이터가 잘 전달되어 있는 것을 확인할 수 있다.
텍스트가 아니라 단순한 숫자도 전달 가능하다.
값이 잘 입력되어 있다.
4. 글을 마치며
이번 글에서는 단순히 GET요청을 통해 구글 스프레드시트에 데이터를 입력하는 방법에 대해 알아보았다.
이제 남은 것은 아두이노에서 https 통신을 통해 GET 요청을 보내는 것만 남았다.
다음 글에서 이어 써보겠다.