Initial commit

master
David Zálešák 3 years ago
commit f7beced262

1
.gitignore vendored

@ -0,0 +1 @@
config.h

@ -0,0 +1,123 @@
//========== Preprocesor ==========
//---- Required ----
#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
//------------------
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include "Tasker.h"
#include "OneWire.h"
#include "DallasTemperature.h"
#include "config.h"
//========== Create objects ==========
AsyncWebServer server(80);
Tasker tasker;
OneWire oneWire(DS18B20_PIN);
DallasTemperature sensor(&oneWire);
//========== Init variables ==========
float temperature;
String metrics;
//=================================
void setup() {
//========== Wi-Fi setup ==========
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
//Connection Failed! Rebooting...
delay(5000);
ESP.restart();
}
//========== OTA setup ==========
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.begin();
//========== Pin setup ==========
pinMode(RELAY_PIN, OUTPUT);
//========== Sensor setup ==========
sensor.begin();
// do not block during temperature conversion
sensor.setWaitForConversion(false);
//========== Tasks init ==========
startConversion(); // First temp read
tasker.setInterval(startConversion, 15000); // read temperature every 15 seconds
//tasker.setTimeout(relayLoop, 5000);
tasker.setInterval(otaHandle, 1000);
//========== Web server setup ==========
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", "ESP termostat, tady se bude posílat aplikace z flash paměti");
});
if(METRICS_EXPORT){
server.on("/metrics", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain; charset=utf-8", metrics);
});
}
server.onNotFound(notFound);
server.begin();
//=================================
}
void loop() {
tasker.loop();
}
void otaHandle(){
ArduinoOTA.handle();
}
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
//void relayLoop(){
// byte pin = RELAY_PIN;
// bool led = !digitalRead(pin);
// digitalWrite(pin, led);
// tasker.setTimeout(relayLoop, led ? 3000 : 7000);
//}
void readSensor() {
// read the actual temperature after it's been converted
temperature = sensor.getTempCByIndex(0);
// do what you need with the temperature here
metrics = "temp ";
metrics += temperature;
}
void startConversion() {
// start temperature conversion (does not block)
sensor.requestTemperatures();
// schedule reading the actual temperature in 750 milliseconds
tasker.setTimeout(readSensor, 750);
}

@ -0,0 +1,24 @@
# ESP8266 - Termostat
Jedná se o termostat postavený na ESP8266 s možností připojení na Wi-Fi. Díky Wi-Fi konektivitě lze termostat ovládat pomocí jakéhokoli jiného zařízení a také lze z termostatu exportovat metriky.
Bylo zvoleno **ESP-01**. Tento model ESP má vyvedeny 2 GPIO piny.
Termostat obsahuje teplotní čidlo **DS18B20**, právě kvůli sběrnici OneWire, na kterou lze připojit více čidel.
Ke spínání kotle byl zvolen **relay modul**, který by bylo vhodné do budoucna nahradit nějakým polovodičem, aby termostat necvakal. Případně při návrhu boardu navrhnout osazení jak relé, tak nějakého polovodiče, který by sloužil ke spínání kotle (volba jumprem).
Termostat je napájen 230v.
Termostat nemusí sloužit pouze k regulaci kotle, ale i jako teplotní čidlo exportující své metriky.
Toto lze nastavit v configu.
**ToDo list:**
- [ ] Zabezpečení (API + JS app)
- [ ] API
- [ ] JS app
- [ ] OTA update
- [ ] API
- [ ] JS app
- [ ] v flash paměti
- [ ] aktualizace
- [x] OTA update
- [x] Wi-Fi konektivita
- [x] Metric export

@ -0,0 +1,6 @@
#define STASSID "SSID"
#define STAPSK "heslo"
#define DS18B20_PIN 0
#define RELAY_PIN 2
#define METRICS_EXPORT 1