NodeMCU에서 Google 스프레드시트로 데이터를 보내는 방법
게시 됨: 2020-08-26인터넷을 통해 NodeMCU 펌웨어를 사용하여 센서 데이터를 Google 스프레드시트로 보내는 것은 매우 편리합니다. 이는 Google 스크립트를 통해 수행할 수 있으며 많은 클라우드 저장소 대안과 달리 비용이 전혀 들지 않는다는 이점이 있습니다.
이 기사에서는 ESP8266 및 DHT11 온도 및 습도 센서를 사용하여 온도 판독값을 전송하는 간단한 프로젝트를 보여 드리겠습니다.
Google 시트 설정
먼저 새 스프레드시트를 만들고 싶을 것입니다. Google 계정에 로그인하고 내 드라이브로 이동하여 빈 스프레드시트를 엽니다.
스프레드시트의 URL 키를 복사하세요. 스프레드시트에 직관적인 이름을 지정합니다. 도구 메뉴 아래의 스크립트 편집기로 이동합니다.
스크립트에 이름을 지정합니다(특히 두 개 이상의 프로젝트를 수행하는 경우 직관적으로 유지하십시오). 주어진 스크립트를 사용하여 Google 스크립트 편집기에 복사하여 붙여넣습니다.
스프레드시트 ID 줄 아래에 저장된 스프레드시트의 URL 키를 붙여넣습니다.
스크립트를 저장하고 앱으로 배포합니다. 게시 메뉴에서 이 옵션을 찾을 수 있습니다. 스프레드시트가 올바르게 작동하도록 배포 매개변수를 구성합니다.
- '현재 웹앱 URL'을 저장합니다.
- 모든 스크립트 수정본에 대해 프로젝트 버전을 새 버전으로 저장하세요. 이렇게 하면 Google에서 향후 수정본을 업데이트할 수 있습니다.
- 다음으로 앱 실행 필드에 "나(Gmail 주소)"라는 문구를 추가하세요.
- 앱에 액세스할 수 있는 사람 필드에 "누구나, 익명이라도"라는 줄을 추가합니다.
ESP8266 및 DHT11 센서 설정을 위한 코드
ESP8266을 DHT11 센서에 연결할 때 업로드해야 하는 내용은 다음과 같습니다.
#include “ESP8266WiFi.h”
#include “DHT.h”
#define DHTPIN 2 // 연결된 디지털 핀
//esp 보드의 핀 2에서 D4까지
// 사용 중인 DHT 센서 유형에 대한 코드에서 주석을 제거합니다.
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21
//#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN,DHTTYPE);
const char WEBSITE[] = “api.pushingbox.com”; //PushingBox API 서버
const 문자열 devid = “<YOUR_Devid_HERE>”; //Pushingbox의 장치 ID
const char* MY_SSID = “<YOUR_WIFI_NAME_HERE”;
const char* MY_PWD = “<YOUR_WIFI_PASSWORD_HERE>”;
무효 설정()
{
Serial.begin(115200);
dht.begin();
Serial.print(““+*MY_SSID에 연결 중);
WiFi.begin(MY_SSID, MY_PWD);
Serial.println("wl 연결에 들어갑니다");
while (WiFi.status() != WL_CONNECTED) //연결되지 않음,..연결 대기 중
{
지연(1000);
Serial.print(“.”);
}
Serial.println("wl 연결됨");
Serial.println("");
Serial.println("자격 증명이 승인되었습니다! Wi-Fi에 연결되었습니다\n ");
Serial.println("");
}
무효 루프()
{
//판독 사이에 더 많은 시간을 허용합니다.
//Google 시트 채우기, PushingBox의 무료 요청 수를 초과하지 않도록 합니다.
지연(10000); //10초, (샘플링 속도 대 서비스 호출 할당량)
float 습도Data = dht.readHumidity();
// 온도를 섭씨로 읽습니다(기본값).
float celData = dht.readTemperature();
// 온도를 화씨로 읽습니다(isFahrenheit = true).
float fehrData = dht.readTemperature(true);
// 실패한 읽기를 확인하고 일찍 종료합니다(다시 시도하기 위해).
if (isnan(humidityData) || isnan(celData) || isnan(fehrData))
{
Serial.println("DHT 센서 읽기에 실패했습니다!");
반품;
}
// 섭씨 단위로 열 지수를 계산합니다(isFahreheit = false).
float hicData = dht.computeHeatIndex(celData, HumidityData, false);
// 화씨 단위로 열 지수를 계산합니다(기본값).
float hifData = dht.computeHeatIndex(fehrData, HumidityData);
//115200 Baud에서 직렬 모니터 또는 선택한 터미널로 인쇄
Serial.print(“습도: “);
Serial.print(humidityData);
Serial.print(” %\t”);
Serial.print(“Cel의 온도: “);
Serial.print(celData);
Serial.print(" *C ");
Serial.print(“페르의 온도: “);
Serial.print(fehrData);
Serial.print(” *F\t”);
Serial.print("Cel의 열 지수: ");
Serial.print(hicData);
Serial.print(" *C ");
Serial.print(“페르의 열 지수: “);
Serial.print(hifData);
Serial.print(” *F\n”);
WiFi클라이언트 클라이언트; //WiFi 객체 인스턴스화
//PushingBox를 통해 WiFi 클라이언트를 사용하여 API 서비스 시작 또는 API 서비스
if (client.connect(WEBSITE, 80))
{
client.print(“GET /pushingbox?devid=” + devid
+ “&humidityData=” + (문자열) HumidityData
+ “&celData=” + (문자열) celData
+ “&fehrData=” + (문자열) fehrData
+ “&hicData=” + (문자열) hicData
+ “&hifData=” + (문자열) hifData
);
client.println(” HTTP/1.1″);
client.print("호스트: ");
client.println(웹사이트);
client.println("사용자 에이전트: ESP8266/1.0");
client.println("연결: 종료");
클라이언트.println();
}
}
Google App Script 코드 예
센서 데이터 전송을 위해 읽을 수 있는 스크립트를 만드는 데 필요한 코드는 다음과 같습니다.
GET 요청 쿼리:
https://script.google.com/macros/s/<gscriptID>/exec?celData=data_here
HumidityDat, celData,fehrData,hicData, hifData (GScript, PushingBox, Arduino 변수를 순서대로 작성해야 함)
함수 doGet(e) {
Logger.log ( JSON.stringify(e) ); // 매개변수를 보기 위한 것입니다.
Var 결과 = '확인';
If (e.매개변수 == 정의되지 않음) {
결과 = '매개변수 없음';
}
또 다른 {
Var id= '<스프레드시트 URL\;
Var sheet = SpreadsheetApp.openById(id).getActivesheet();
Var newRow = sheet.getLastRow() + 1;
Var rowData = [];
//var waktu = new Date()'
rowData[0] = 새로운 날짜(); //A열의 타임스탬프
for(e.parameter의 var 매개변수) {
logger.log('in for 루프, param='+param);
var value = StripQuotes(e.parameter[param]);
스위치(매개변수) {
케이스 'humidityData': //매개변수
rowData[1] = 값; //B열의 값
부서지다;
케이스 'celData';
rowData[2] = 값;
부서지다;
'fehrData'의 경우:
rowData[3] = 값 ;
부서지다;
'hicData'의 경우:
rowData[4] = 값;
부서지다;
'hifData'의 경우:
rowData[5] = 값;
부서지다;
기본:
결과 = "지원되지 않는 매개변수";
}
Logger.log(JSON.stringify(rowData));
Var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
ContentService.createTextOutput(결과)를 반환합니다.
}
함수 StripQuotes(값){
반환 값.replace(/^[“']|['|]$/g, “”);
}
푸싱박스 설정
이 서비스는 DHT 센서 데이터와 Google 스프레드시트 간의 중개자 역할을 합니다. PushingBox API를 사용하면 HTTP로 전송된 데이터를 Google이 인식하는 암호화된 HTTPS 데이터로 변환할 수 있습니다.
PushingBox는 하루에 1,000개의 요청으로 제한됩니다. 그러나 Google이 응답할 자체 암호화 알고리즘을 만드는 데 필요한 많은 지루한 작업과 전문 지식이 필요하지 않습니다.
- 아직 PushingBox 계정이 없다면 계정을 만드세요.
- NodeMCU 센서 데이터 프로젝트에도 사용 중인 Gmail 주소를 사용하세요.
- 내 서비스로 이동합니다.
- 서비스 추가 옵션에서 새 서비스를 추가합니다.
- CustomURL이라는 마지막 옵션으로 스크롤하여 나만의 서비스를 설정하세요!
- 이름, URL, 방법이 필요한 필드를 입력합니다.
- 방법으로 GET을 선택하세요.
- URL은 Google Scrip 주소를 생성할 때 생성된 URL에서 "script.google.com…"으로 시작하는 URL을 사용하세요.
- 서비스를 제출하고 내 시나리오로 이동합니다.
- 직관적인 이름을 입력하고 추가 버튼을 누르세요.
- 화면에 메시지가 표시되면 작업을 추가합니다.
- 각 변수의 이름 형식을 지정하여 GET 메서드를 구성합니다. 이 단계는 기록하는 센서 수와 기록하는 내용에 따라 달라집니다.
하드웨어 구성
ESP8266과 함께 DHT 센서를 사용하는 경우 3.3v 대신 5v로 장치에 전원을 공급하세요. 전압이 낮으면 정확한 판독값을 얻을 수 없습니다.
ESP8266의 핀 2와 D4를 연결하세요.
소프트웨어 구성
이 설정은 Arduino IDE(1.6.4보다 최신 버전이 바람직함)에서 작동합니다. 이는 또한 시스템에 일부 라이브러리를 다운로드해야 함을 의미합니다.
라이브러리는 다음 링크에서 찾을 수 있습니다.
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
다음 단계에는 Arduino 스케치를 업로드하고 프로젝트와 장치에 맞게 구성하는 작업이 포함됩니다. 프로젝트에 맞게 형식을 지정하고 사용자 정의해야 하는 관련 필드는 세 가지뿐입니다.
- Wi-Fi 네트워크.
- Wi-Fi 비밀번호.
- 푸싱박스 아이디입니다.
NodeMCU 데이터 전송에 어떻게 접근합니까?
이를 수행하는 방법은 더 다양하며 NodeMCU 펌웨어가 포함된 ESP8266을 사용하여 Google Sheets 또는 기타 클라우드 플랫폼으로 직접 데이터를 전송하는 데 사용할 수 있는 수많은 센서 유형이 있습니다.
프로젝트를 개인화하기 위해 자신만의 스크립트와 코드를 작성하는 것을 선호합니까, 아니면 github 및 기타 플랫폼에서 검증된 스크립트를 온라인으로 검색하여 거기에서 적응합니까? 아래 댓글 섹션에서 선호하는 코드와 스크립트 소스, ESP8266 및 센서 조합을 알려주세요.