DHT22温湿度传感器-ESP32-推送指标到influxdb1

#include "config.h"
#include <PromLokiTransport.h>
#include <PrometheusArduino.h>
#include <Preferences.h>

#include <DHT.h>      //引用的库函数
#include <DHT_U.h>
#define DHTPIN 17   //定义引脚 接P17
#define DHTTYPE DHT11  //定义类型
DHT dht(DHTPIN, DHTTYPE);  //初始化

PromLokiTransport transport;
PromClient client(transport);

// Create a write request for 4 series.每增加一个指标记得加上1
WriteRequest req(4,1024);

// Check out https://prometheus.io/docs/practices/naming/ for metric naming and label conventions.
// This library does not currently create different metric types like gauges, counters, and histograms
// however internally Prometheus does not differentiate between these types, rather they are both
// a naming convention and a usage convention so it's possible to create any of these yourself.
// See the README at https://github.com/grafana/prometheus-arduino for more info.

// Define a TimeSeries which can hold up to 5 samples, has a name of `uptime_milliseconds`
TimeSeries ts1(5, "uptime_milliseconds_total", "{job=\"esp32-test\",host=\"esp32\"}");

// Define a TimeSeries which can hold up to 5 samples, has a name of `heap_free_bytes`
TimeSeries ts2(5, "heap_free_bytes", "{job=\"esp32-test\",host=\"esp32\",foo=\"bar\"}");


// !!!!!
// IF YOU WANT TO INCREASE THE TOTAL AMOUNT OF TIME SERIES, ALSO INCREASE WriteRequest()
// !!!!!

// Note, metrics with the same name and different labels are actually different series and you would need to define them separately
TimeSeries ts3(5, "temperature_total", "job=\"esp32-test\",host=\"esp32\",foo=\"temperatureTtotal\"");

TimeSeries ts4(5, "humidity_total", "job=\"esp32-test\",host=\"esp32\",foo=\"humidityTotal\"");

int loopCounter = 0;

void setup() {
    Serial.begin(115200);
    dht.begin(); //DHT开始工作
    

    
    // Wait 5s for serial connection or continue without it
    // some boards like the esp32 will run whether or not the 
    // serial port is connected, others like the MKR boards will wait
    // for ever if you don't break the loop.
    uint8_t serialTimeout;
    while (!Serial && serialTimeout < 50) {
        delay(100);
        serialTimeout++;
    }

    Serial.println("Starting");

    // Configure and start the transport layer
    transport.setWifiSsid(WIFI_SSID);
    transport.setWifiPass(WIFI_PASSWORD);
    transport.setDebug(Serial);  // Remove this line to disable debug logging of the client.
    if (!transport.begin()) {
        Serial.println(transport.errmsg);
        while (true) {};
    }

    // Configure the client
    client.setUrl(URL);
    client.setPath((char*)PATH);
    client.setPort(PORT);
    client.setDebug(Serial);  // Remove this line to disable debug logging of the client.
    if (!client.begin()) {
        Serial.println(client.errmsg);
        while (true) {};
    }

    // Add our TimeSeries to the WriteRequest
    req.addTimeSeries(ts1);
    req.addTimeSeries(ts2);
    req.addTimeSeries(ts3);
    req.addTimeSeries(ts4);
    req.setDebug(Serial);  // Remove this line to disable debug logging of the write request serialization and compression.

    Serial.print("Free Mem After Setup: ");
    Serial.println(freeMemory());

};



void loop() {
    int64_t time;
    time = transport.getTimeMillis();
    Serial.println(time);

    
    float humidity = dht.readHumidity();    //读湿度
    float temperature = dht.readTemperature(); //读温度
    Serial.print("相对湿度: ");   // 串口显示
    Serial.print(humidity);
    Serial.println(" %RH");
    Serial.print("温度: ");
    Serial.print(temperature);
    Serial.println(" °C");
    delay(1000); //延时1s

  
    
    if (!ts1.addSample(time, millis())) {
        Serial.println(ts1.errmsg);
    }
    if (!ts2.addSample(time, freeMemory())) {
        Serial.println(ts2.errmsg);
    }
    
    if (!ts3.addSample(time, temperature)) {
        Serial.println(ts3.errmsg);
    }
    if (!ts4.addSample(time, humidity)) {
        Serial.println(ts4.errmsg);
    }
    loopCounter++;

    if (loopCounter >= 4) {
        // Send data
        loopCounter = 0;
        PromClient::SendResult res = client.send(req);
        if (!res == PromClient::SendResult::SUCCESS) {
            Serial.println(client.errmsg);
            // Note: additional retries or error handling could be implemented here.
            // the result could also be:
            // PromClient::SendResult::FAILED_DONT_RETRY
            // PromClient::SendResult::FAILED_RETRYABLE
        }
        // Batches are not automatically reset so that additional retry logic could be implemented by the library user.
        // Reset batches after a succesful send.
        ts1.resetSamples();
        ts2.resetSamples();
        ts3.resetSamples();
        ts4.resetSamples();
    }

    // Prometheus default is 15 second intervals but you can send several times per second if you want to.
    // Collection and Sending could be parallelized or timed to ensure we're on a 15 seconds cadence,
    // not simply add 15 second to however long collection & sending took.
    delay(15000);


};

WIFI配置:

#define WIFI_SSID     "XXXX"
#define WIFI_PASSWORD "XXXX"

#define URL "XXXXXXXX" // "192.168.0.1" or "prometheus.yourdomain.local" No http or https, No port or path
#define PATH "/write?db=prometheus"
#define PORT 9201

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值