ESP32检测温湿度上传到飞书表格

297 阅读2分钟

飞书有自己的open api官方文档:飞书开放平台

但是比较麻烦,还需要创建应用:发送的header需要access token,这个access token需要有个应用才能获取到

目前使用的是比较方便的方法:飞书pc端找工作台,应用里面找到飞书捷径:

然后:(可以参考官网:使用飞书捷径

 

上面这步操作和阿里云物联网平台的物模型差不多,就是筛选json中的有效数据

上面这步前要新建一个表格,表格里面第一行要有标题,以列为单位,存放json中的数据,类似下图:

 然后就可以向webhook 地址进行发数据了,不需要验证,这是一个公开的url。

操作步骤:

在线测试工具(用的是http的post):在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具 —SO JSON在线工具

关于webhook :webhook 究竟是什么呢? - 知乎   ,或者自行百度

关于esp32方面,示例如下(不需要安装第三方库):

#include <Arduino.h>
#include <Wire.h>
#include <WiFi.h>
#include <HttpClient.h>

const char *ssid = "xxxxx";//WIFI
const char *password = "xxxxx";//WIFI密码
String url = "https://www.feishu.cn/flow/api/trigger-webhook/xxxxxxxxxx7";//网址 
WiFiClient client; //声明一个客户端对象,用于与服务器进行连接

#define LED_BUILTIN 27

int rst_num = 0;

void setup(void)
{
    pinMode(LED_BUILTIN, OUTPUT);

    Serial.begin(115200);
    Serial.println("Hello World!");

    WiFi.begin(ssid, password);//连接到网络

    while (WiFi.status() != WL_CONNECTED) {//等待网络连接成功
        delay(500);
        Serial.print(".");
        if(rst_num++ > 20)//10s没连上就重启
        {
          esp_restart();
        }
    }

    rst_num = 0;

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());//打印模块IP
}

void loop(void)
{
    int key = digitalRead(KEY);
    HTTPClient http;
    http.begin(url);
    http.addHeader("Content-Type", "application/json");
    String postMessage="{\"data\": {\"deviceID\": 0,\"time\": \"2021.9.13-15:25\",\"temp\": 0,\"hump\": 8}}";
    int httpCode = http.POST(postMessage);
    Serial.printf("httpCode: %d ",httpCode);

    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
    digitalWrite(LED_BUILTIN, HIGH);
}

python示例:

import requests

if __name__ == '__main__':
    print('main creat')

    url = "https://www.feishu.cn/flow/api/trigger-webhook/xxxxxxxx"
    data = '{"data": {"deviceID": 0,"time": "2021.9.13-15:25","temp": 0,"hump": 19}}'
    headers = {'content-type': "application/json"}
    res = requests.post(url=url, data=data, headers=headers)
    print(res.text)
    pass

使用 esp_restart();对esp32进行重启