[Day27] Esp32 + IFTTT + Google Sheet

1.前言

今天要讲解如标题一样,Google Sheet是Google所开发的试算表,所以我们要用Google Sheet来存放我们所感测到的数值,那废话不多说,直接开始。

2.创建事件

依照Day25 Esp32s + IFTTT + LINE这篇一样设置Webhook,到Then That会稍微不同(因为要选择Google sheet服务)

相同在搜寻栏查找Google Sheet

图片取自:IFTTT

选择左边Add row to spreadsheet

图片取自:IFTTT

这边跟上次设置Line相同,可以自己调整格式

  • Spreadsheet name 创建时档案的名称
  • Formatted row 每个栏位要填写何种资料
  • Drive folder path 资料夹在云端的路径

图片取自:IFTTT

如果设定完就可以将事件创建起来罗,後续一样到Webhook的Documentation,测试是否可以执行成功。
※EventName记得改

图片取自:IFTTT

触发成功後,到Google云端硬碟查看是否多出IFTTT资料夹

图片取自:IFTTT

如果没有此资料夹,可能是上面Google Sheet设定中有更动资料夹位置,又或者目前IFTTT连接Google Sheet有问题。

点开後会看见试算表,可以点开看看是否有你刚刚输入的数值

图片取自:Google

如果可以看见就代表测试成功罗~

3.接线图

图片取自:使用者绘制

Esp32s GND -> St01(C) -
Esp32s Vcc(5V) -> St01(C) +
Esp32s 22 -> St01(C) SCL
Esp32s 21 -> St01(C) SDA

4.程序码

第10、11行,需更改ssid及password
第14行,需更改事件名称及Key

#include <WiFi.h>
#include <WiFiClient.h>

#include <AHT10.h>
#include <Wire.h>
uint8_t readStatus = 0;
AHT10 myAHT10(AHT10_ADDRESS_0X38);

// Replace with your SSID and Password
const char* ssid     = "xxxx";
const char* password = "xxxxxxxx";

// Replace with your unique IFTTT URL resource
const char* resource = "/trigger/Esp32sAHT10GoogleSheet/with/key/cEf5MJB"; 
// How your resource variable should look like, but with your own API KEY (that API KEY below is just an example):
//const char* resource = "/trigger/myAHT1011_readdata/with/key/nxxxxxxL2d_XXXXXgTlNSrxMJdmqy5";

// Maker Webhooks IFTTT
const char* server = "maker.ifttt.com";
// Time to sleep
uint64_t uS_TO_S_FACTOR = 1000000;  // Conversion factor for micro seconds to seconds
// sleep for 30 minutes = 1800 seconds
uint64_t TIME_TO_SLEEP = 60;        //1 minutes

void setup() {
  Serial.begin(115200);
  myAHT10.begin();           // 初始化 
  delay(1000);  
}

void loop() {
  initWifi();
  makeIFTTTRequest();
  //delay(20000);       //Send Time
  // enable timer deep sleep
    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);    
    Serial.println("Going to sleep now");
    // start deep sleep for 3600 seconds (60 minutes)
    esp_deep_sleep_start();
}

// Establish a Wi-Fi connection with your router
void initWifi() {
  Serial.print("Connecting to: "); 
  Serial.print(ssid);
  WiFi.begin(ssid, password);  

  int timeout = 10 * 4; // 10 seconds
  while(WiFi.status() != WL_CONNECTED  && (timeout-- > 0)) {
    delay(250);
    Serial.print(".");
  }
  Serial.println("");

  if(WiFi.status() != WL_CONNECTED) {
     Serial.println("Failed to connect, going back to sleep");
  }

  Serial.print("WiFi connected in: "); 
  Serial.print(millis());
  Serial.print(", IP address: "); 
  Serial.println(WiFi.localIP());
}

// Make an HTTP request to the IFTTT web service
void makeIFTTTRequest() {
  Serial.print("Connecting to "); 
  Serial.print(server);
  
  WiFiClient client;
  int retries = 5;
  while(!!!client.connect(server, 80) && (retries-- > 0)) {
    Serial.print(".");
  }
  Serial.println();
  if(!!!client.connected()) {
    Serial.println("Failed to connect...");
  }
    Serial.print("Request resource: "); 
  Serial.println(resource);
  // Temperature in Celsius
  String jsonObject = String("{\"value1\":\"") + myAHT10.readTemperature() + "\",\"value2\":\"" + myAHT10.readHumidity() + "\"}";
  client.println(String("POST ") + resource + " HTTP/1.1");
  client.println(String("Host: ") + server); 
  client.println("Connection: close\r\nContent-Type: application/json");
  client.print("Content-Length: ");
  client.println(jsonObject.length());
  client.println();
  client.println(jsonObject);
        
  int timeout = 5 * 10; // 5 seconds             
  while(!!!client.available() && (timeout-- > 0)){
    delay(100);
  }
  if(!!!client.available()) {
    Serial.println("No response...");
  }
  while(client.available()){
    Serial.write(client.read());
  }
    Serial.println("\nclosing connection");
  client.stop(); 
}

5.成果展示

密密麻麻数值,如果嫌时间太快可以尝试更动delay的数值,使时间可以更快,像预设大约10分钟,而我展示图片将延迟降低至1分钟。

图片取自:Google

欢迎交流

好了,这次是教各位储放资料的方式,在网路上有很多提供储存资料的服务,像是Thingspeak不仅有提供资料还有图表可以提供查看,有兴趣的人可以去研究看看,那今天的部分就这样罗明天再见~。


<<:  有空再说与 TODO

>>:  [Day 16] 每个模型我全都要 - 堆叠法 (Stacking)

django入门(七) — 简单范例(5)-Django ORM操作

Django ORM介绍 一般而言,我们要存取资料库需要透过SQL语法,但在django则是使用OR...

Power BI Course in Bangalore

IntelliMindz offers Power BI Course in Bangalore. ...

你的钱一直被通膨吃掉,但你却不知觉!!!

昨天朋友看了我的文章後,来找我「讨论」,关於中华电信与0050的议题。 我昨天下那样的结论还有个主要...

[Day29] 倒数第二天~集大成!Next.js + React + Bootstrap + Reactstrap 十八般武艺(?)样样来,勇敢的上吧!

前言 因为今天已经来到倒数第二天! 觉得应该要把之前介绍过的东西全部融合在一起展现出来, 也算是成果...

Day 10 Summary 2

Introduction to embedded system Role of embedded s...