本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

自制超低功耗的数据记录器

发布时间:2021-06-27
分享到:

自制超低功耗的数据记录器

发布时间:2021-06-27
分享到:

该项目是使用 ESP8266传感器 制作数据记录器,以定期将温度/湿度/水分测量值上传到 Google Sheet。该记录器是用在室外,因此该设备只能由电池供电。但是流行的 NodeMCU 板的能效并不高,只能持续几周。经过研究,使用 ESP-12F(ESP8266 的变体)制作了数据记录器。它具有惊人的低功耗,在深度睡眠模式下仅为 20uA。每小时上传一个数据点,预计数据记录器可以使用 2 节 AA 电池运行一年以上。

硬件部件:

原理图:

代码:

Python程序:(点击下载

# 该程序每小时收集传感器数据,并上传到 Google 电子表格。
# 在运行代码之前替换以下参数。
# - ${WIFI_SSID}
# - ${WIFI_PASSWORD}
# - ${COLLECTOR_ID}
# 关于如何获取 COLLECTOR_ID,请参阅 Apps 脚本。

import dht
import machine
import network
import time
import usocket
import ussl

location = b'garden-bed'

def setup():
    ap_if = network.WLAN(network.AP_IF)
    sta_if = network.WLAN(network.STA_IF)
    ap_if.active(False)
    sta_if.active(True)
    sta_if.connect('${WIFI_SSID}', '${WIFI_PASSWORD}')
    for i in range(20):
        if sta_if.isconnected():
            break
        time.sleep(0.25)

def log():
    soil_vcc = machine.Pin(4, machine.Pin.OUT)
    soil_vcc.on()
    led = machine.Pin(2, machine.Pin.OUT)
    for i in range(4):
        led.off()
        time.sleep(0.25)
        led.on()
        time.sleep(0.25)
    dht_sensor = dht.DHT11(machine.Pin(5))
    dht_sensor.measure()
    temp = dht_sensor.temperature()
    humidity = dht_sensor.humidity()
    soil_sensor = machine.ADC(0)
    moisture = soil_sensor.read()
    soil_vcc.off()
    s = usocket.socket()
    ai = usocket.getaddrinfo("script.google.com", 443)
    addr = ai[0][-1]
    s.connect(addr)
    s = ussl.wrap_socket(s)
    req = b"GET /macros/s/"
    req = req + b"${COLLECTOR_ID}"
    req = req + b"/exec?tab=weather&location=" + location + b"&p1="
    req = req + str(temp) + b"&p2=" + str(humidity) + b"&p3=" + str(moisture)
    req = req + b" HTTP/1.1\r\n"
    req = req + b"Host: script.google.com\r\n"
    req = req + b"Connection: close\r\n"
    req = req + b"\r\n"
    s.write(req)
    s.read(100)
    s.close()

try:
    setup()
    log()
except:
    pass

rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)
rtc.alarm(rtc.ALARM0, 3592000)
machine.deepsleep()

应用脚本(点击下载

function doGet(e) {
  var ssId = "<your_spreadsheet_id>";
  var tab = e.parameter.tab;
  var location = e.parameter.location;
  var p1 = e.parameter.p1;
  var p2 = e.parameter.p2;
  var p3 = e.parameter.p3;
  var p4 = e.parameter.p4;
  var now = new Date();
  var ss = SpreadsheetApp.openById(ssId);
  var sheet = ss.getSheetByName(tab);
  var output = HtmlService.createHtmlOutput();

  sheet.appendRow([now, location, p1, p2, p3, p4]);
  output.append("OK");
  return output;
}

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论