아두이노와 스프레드시트 연동하기 - 코드 구성하기

힘센캥거루
2025년 10월 8일(수정됨)
5
33

지난 글에서는 아두이노와 스프레드시트 연동을 위한 시트 설정에 대해 알아보았다.

이번 글에서는 아두이노 D1 보드에서 https 통신을 이용한 데이터 전송 방법에 대해 알아보자.

1. 아두이노 D1 보드 라이브러리 설치하기

아두이노 D1 보드를 이용하기 위해선 먼저 보드 라이브러리를 설치해야 한다.

아두이노 IDE에서 파일-설정으로 들어간다.

아두이노와 스프레드시트 연동하기 - 코드 구성하기-2

아래의 추가적인 보드 매니저 urls에 아래의 주소를 입력해준다.

http://arduino.esp8266.com/stable/package_esp8266com_index.json
아두이노와 스프레드시트 연동하기 - 코드 구성하기-3아두이노와 스프레드시트 연동하기 - 코드 구성하기-4

입력이 완료되었다면 확인을 눌러주자.

아두이노와 스프레드시트 연동하기 - 코드 구성하기-5

왼편의 보드 매니저에서 arduino D1 보드를 검색 한 뒤 설치해준다.

이렇게 하면 보드 라이브러리 설치는 끝이다. 

아두이노와 스프레드시트 연동하기 - 코드 구성하기-6

보드를 선택 후 파일-예제로 들어가서 ESP8266 예제가 잘 나타나는지 확인해보자. 

먼저 아래처럼 보드를 설정 한다.

아두이노와 스프레드시트 연동하기 - 코드 구성하기-7

이렇게 예제가 잘 보인다면 설치 성공이다.

아두이노와 스프레드시트 연동하기 - 코드 구성하기-8

2. 아두이노 코드 컴파일하기

이제 아두이노에 코드를 업로드 할 시간이다.

먼저 모듈을 호출하고 와이파이에 접속하기 위한 기본 설정을 한다.

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

// int fan_pin = 8;

const char* ssid = "와이파이 이름";   // 와이파이 이름
const char* password = "와이파이 비밀번호"; // 와이파이 비밀번호

//----------------------------------------Host & https포트(https 는 443 고정)
const char* host = "script.google.com";
const int httpsPort = 443;
//----------------------------------------

WiFiClientSecure client; // WiFiClientSecure 객체 생성

// Google spreadsheet script ID
String GAS_ID = "구글 스프레드시트 스크립트 ID";

setup에서 시리얼 통신속도를 정하고 와이파이 연결을 한다.

ESP8266의 기본 시리얼 통신속도는 115,200이다.

WiFi.begin(ssid, password)를 통해 접속을 시도하고, WiFi.status()를 이용해 연결 상태를 확인한다.

client.setInsecure을 이용해 https 접속이 가능하도록 한다.

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password); // 와이파이 라우터와 연결
  Serial.println("");
  //----------------------------------------연결대기
  Serial.print("연결중");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
    };
  //----------------------------------------
  Serial.println("");
  Serial.print("와이파이 연결 성공 : ");
  Serial.println(ssid);
  Serial.print("IP 주소: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  //----------------------------------------
  client.setInsecure();
}

이제 메인코드를 작성할 차례이다. 

현재 아두이노에 연결된 것이 없기에, 두 개의 지정된 변수만을 구글 시트로 전송해 보았다.

void loop() {
  delay(1000);
  int v1 = 2000;
  int v2 = 3000;
  if (!client.connect(host, httpsPort)) {
    Serial.println("호스트 연결 실패");
    return;
  };
  String value1 =  String(v1);
  String value2 =  String(v2);
  String url = "/macros/s/" + GAS_ID + "/exec?value1=" + value1 + "&value2=" + value2;
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
         "Host: " + host + "\r\n" +
         "User-Agent: BuildFailureDetectorESP8266\r\n" +
         "Connection: close\r\n\r\n");
  Serial.println("요청 전송");
};

시트를 보면 값이 잘 전송된 것을 볼 수 있다.

아두이노와 스프레드시트 연동하기 - 코드 구성하기-9

이제 값을 전송하는 부분을 함수로 만들어보자.

함수명은 sendData로 하고, 이 함수는 2개의 int를 파라미터로 받는다.

아래 함수를 보면 핵심적인 부분은 위와 같고, 응답을 처리하는 부분이 추가되어 있다.

void sendData(int data1, int data2) {
  Serial.println("==========");
  Serial.print("호스트 연결중");
  Serial.println(host);
  
  //----------------------------------------Connect to Google host
  if (!client.connect(host, httpsPort)) {
    Serial.println("호스트 연결 실패");
    return;
  }
  //----------------------------------------
//----------------------------------------Processing data and sending data
  String value1 =  String(data1);
  String value2 =  String(data2);
  String url = "/macros/s/" + GAS_ID + "/exec?value1=" + value1 + "&value2=" + value2;
  Serial.print("요청 URL: ");
  Serial.println(url);

client.print(String("GET ") + url + " HTTP/1.1\r\n" +
         "Host: " + host + "\r\n" +
         "User-Agent: BuildFailureDetectorESP8266\r\n" +
         "Connection: close\r\n\r\n");

Serial.println("요청 전송");
  //----------------------------------------

//----------------------------------------Checking whether the data was sent successfully or not
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      Serial.println("헤더 수신");
      break;
    }
  }
  String line = client.readStringUntil('\n');
  if (line.startsWith("{\"state\":\"success\"")) {
    Serial.println("데이터 전송 성공");
  } else {
    Serial.println("데이터 전송 실패");
    Serial.println(line);
  }
  Serial.print("응답 : ");
  Serial.println(line);
  Serial.println("연결을 닫는중");
  Serial.println("==========");
  Serial.println();
  //----------------------------------------
}

이것을 loop문 안에 넣고 정상적으로 작동하는지 확인해보면 된다.

void loop() {
  delay(1000);
  int v1 = 2000;
  int v2 = 3000;
  sendData(v1, v2);
}

3. 전체코드

전체 코드는 아래와 같다. 유용하게 쓰길 바라며, 다음 글에서는 온습도 센서를 이용해 온도와 습도를 측정해보고자 한다.

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

// int fan_pin = 8;

const char* ssid = "와이파이 이름";   // 와이파이 이름
const char* password = "와이파이 비밀번호"; // 와이파이 비밀번호

//----------------------------------------Host & https포트(https 는 443 고정)
const char* host = "script.google.com";
const int httpsPort = 443;
//----------------------------------------

WiFiClientSecure client; // WiFiClientSecure 객체 생성

// Google spreadsheet script ID
String GAS_ID = "구글 스프레드시트 스크립트 ID";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password); // 와이파이 라우터와 연결
  Serial.println("");
  //----------------------------------------연결대기
  Serial.print("연결중");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
    };
  //----------------------------------------
  Serial.println("");
  Serial.print("와이파이 연결 성공 : ");
  Serial.println(ssid);
  Serial.print("IP 주소: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  //----------------------------------------

client.setInsecure();
};

void loop() {
  delay(1000);
  int v1 = 2000;
  int v2 = 3000;
  sendData(v1, v2);
};

// 구글 스프레드시트로 데이터 전송
void sendData(int data1, int data2) {
  Serial.println("==========");
  Serial.print("호스트 연결중");
  Serial.println(host);
  
  //----------------------------------------Connect to Google host
  if (!client.connect(host, httpsPort)) {
    Serial.println("호스트 연결 실패");
    return;
  };
  //----------------------------------------

//----------------------------------------Processing data and sending data
  String value1 =  String(data1);
  String value2 =  String(data2);
  String url = "/macros/s/" + GAS_ID + "/exec?value1=" + value1 + "&value2=" + value2;
  Serial.print("요청 URL: ");
  Serial.println(url);

client.print(String("GET ") + url + " HTTP/1.1\r\n" +
         "Host: " + host + "\r\n" +
         "User-Agent: BuildFailureDetectorESP8266\r\n" +
         "Connection: close\r\n\r\n");

Serial.println("요청 전송");
  //----------------------------------------

//----------------------------------------Checking whether the data was sent successfully or not
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      Serial.println("헤더 수신");
      break;
    };
  };
  String line = client.readStringUntil('\n');
  if (line.startsWith("{\"state\":\"success\"")) {
    Serial.println("데이터 전송 성공");
  } else {
    Serial.println("데이터 전송 실패");
    Serial.println(line);
  };
  Serial.print("응답 : ");
  Serial.println(line);
  Serial.println("연결을 닫는중");
  Serial.println("==========");
  Serial.println();
  //----------------------------------------
}
아두이노와 스프레드시트 연동하기 - 코드 구성하기-10

관련 글

마이크로비트(micro:bit)로 거미로봇 코딩하기
마이크로비트(micro:bit)로 거미로봇 코딩하기
이번에 로봇기술 관련 모임에서 무료로 강의를 하나 개설하셨다.재현고등학교에서 진행하는 마이크로 비트를 이용해 거미로봇을 제어하는 연수였다.아는 선생님께서 신청을 했는데, 당일에 업무랑 겹쳐서 나에게 자리를 양보해주셔서 참여해보기로 했다.상계역에서 걸어서 10분 거리이다...
아두이노로 RFID카드 복제하기
아두이노로 RFID카드 복제하기
오늘은 아두이노로 RFID카드를 복제하는 방법에 대해 써보려고 한다.한번 글을 쓰면 잊어버리지 않기에, 복기하는 차원에서 남긴다.1.RFID 카드의 내부 데이터 구조일반적인 RFID 카드는&nbsp;MIFARE Classic 1K 카드이다.이 카드의 메모리 구조는 아래...
아두이노 ESP32로 온습도 데이터 수집하기
아두이노 ESP32로 온습도 데이터 수집하기
오늘은 아두이노 ESP32로 온습도를 측정하고 데이터를 전송하는 와이파이 백엽상을 만들어볼 것이다.해당 내용은 학교에서 진행할 16+1 수업 원고를 바탕으로 작성한 글이다.1. 준비물준비물은 간단하다.ESP32, DHT-22, 전선 3개먼저 ESP32를 간단하게 설명하...
아두이노 D1 R2 사용기
아두이노 D1 R2 사용기
그냥 아두이노 uno로 하면 될 것을, 괜히 내장 와이파이 달린거 써보겠다고 wemos d1 r2를 쓰다가 고생을 꽤나 했다.이 글은 d1 r2와 같이 핀맵핑이 다른 아두이노를 사용하는 이들을 위한 글이다.1. IDE 셋팅아두이노의 종류가 다양해서 각 보드에 맞는 보드...
맥북에서 아두이노 Timed out waiting for packet header 해결 방법
맥북에서 아두이노 Timed out waiting for packet header 해결 방법
맥북에서 아두이노 Wemos D1 R2 연결시 Timed out 문제 해결하는 방법
아두이노와 스프레드시트 연동하기 - 구글 시트 설정
아두이노와 스프레드시트 연동하기 - 구글 시트 설정
최근에 학생들과 아두이노를 이용해 학교 주변의 온도, 습도를 관측해보고 값을 분석해보기로 했다.&nbsp;아두이노에서 측정한 데이터를 저장하려니 SD카드가 필요했고, 데이터를 확인하기 위해서는 SD카드를 빼고 다시 끼우는 번거로움이 있었다.&nbsp;&nbsp;문득 데...

댓글을 불러오는 중...