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

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

Код программы для 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