цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Малопотребляющий регистратор данных на основе ESP8266 с записью данных в таблицу Google



Малопотребляющий регистратор данных на основе ESP8266 с записью данных в таблицу Google

Автор: Mike(admin) от 9-06-2021, 03:55

В данном проекте показано, как сделать простой даталоггер для регистрации климатических показаний (температуры, влажности и уровня влажности почвы) на основе ESP8266. При этом такое устройство должно работать длительное время от двух батареек AA и периодически отправлять данные для записи в таблицу Google.


Малопотребляющий регистратор данных на основе ESP8266 с записью данных в таблицу Google

Итак, схема подключения ESP8266 к датчику влажности почвы DHT11 и датчику температуры/влажности приведена далее.


Малопотребляющий регистратор данных на основе ESP8266 с записью данных в таблицу Google

Код программы для ESP8266 написан на MicroPython и предполагает переход микросхемы в режим сна с периодическим пробуждением с целью минимизации энергопотребления. Код программы следующий:



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()

Для правильного взаимодействия с таблицей Google необходим специальный скрипт, который приведен далее. Создайте данный новый скрипт приложения в script.google.com. После развертывания, посмотрите на URL, чтобы получить ID-часть, которая будет использоваться в качестве COLLECTOR_ID в программе MicroPython для ESP8266.



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;
}



© digitrode.ru


Теги: ESP8266, датчик температуры, датчик влажности




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий