First commit
This commit is contained in:
24
ESP12SmallRoom/src/leds.cpp
Normal file
24
ESP12SmallRoom/src/leds.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include <leds.h>
|
||||
|
||||
leds::leds(int pinLED, int onms, bool inverse)
|
||||
{
|
||||
ledPin = pinLED;
|
||||
inv = inverse;
|
||||
onMS = onms;
|
||||
state = false;
|
||||
}
|
||||
|
||||
void leds::start()
|
||||
{
|
||||
curMS = millis();
|
||||
state = true;
|
||||
digitalWrite(ledPin, !inv);
|
||||
}
|
||||
|
||||
void leds::tick()
|
||||
{
|
||||
if(state && ((curMS + onMS) < millis())){
|
||||
state = false;
|
||||
digitalWrite(ledPin, inv);
|
||||
}
|
||||
}
|
||||
175
ESP12SmallRoom/src/main.cpp
Normal file
175
ESP12SmallRoom/src/main.cpp
Normal file
@@ -0,0 +1,175 @@
|
||||
#include <Arduino.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266mDNS.h>
|
||||
#include <WiFiUdp.h>
|
||||
#include <ArduinoOTA.h>
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_HTU21DF.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <leds.h>
|
||||
|
||||
#define LED_BLUE D5 //GPIO14
|
||||
#define LED_GREEN D6 //GPIO12
|
||||
#define LED_RED D7 //GPIO13
|
||||
#define PWR_SENS D8 //GPIO13
|
||||
|
||||
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
|
||||
WiFiClient espClient;
|
||||
PubSubClient client(espClient);
|
||||
leds lGreen(LED_GREEN, 200);
|
||||
leds lRed(LED_RED, 200);
|
||||
leds lBlue(LED_BLUE, 200);
|
||||
|
||||
const char* ssid = "wf-home";
|
||||
const char* password = "0ndthnrf";
|
||||
const char* mqtt_server = "192.168.1.250";
|
||||
|
||||
float temp, rel_hum;
|
||||
bool izm = false;
|
||||
unsigned long cRun;
|
||||
int minCnt = 0;
|
||||
int measCnt = 1;
|
||||
|
||||
void reconnect();
|
||||
void publishMin();
|
||||
void publishSec();
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.setOutputPower(20.5f);
|
||||
WiFi.hostname("ESP-SmallRoom");
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
|
||||
//Serial.println("Connection Failed! Rebooting...");
|
||||
// "Соединиться не удалось! Перезагрузка..."
|
||||
delay(5000);
|
||||
ESP.restart();
|
||||
}
|
||||
digitalWrite(LED_BUILTIN, !WiFi.isConnected());
|
||||
ArduinoOTA.onStart([]() { /*Serial.println("Start");*/}); // "Начало OTA-апдейта"
|
||||
ArduinoOTA.onEnd([]() { /*Serial.println("\nEnd");*/}); // "Завершение OTA-апдейта"
|
||||
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { /*Serial.printf("Progress: %u%%\r", (progress / (total / 100)));*/ });
|
||||
ArduinoOTA.onError([](ota_error_t error) {
|
||||
/*Serial.printf("Error[%u]: ", error);
|
||||
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); // "Ошибка при аутентификации"
|
||||
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); // "Ошибка при начале OTA-апдейта"
|
||||
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); // "Ошибка при подключении"
|
||||
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); // "Ошибка при получении данных"
|
||||
else if (error == OTA_END_ERROR) Serial.println("End Failed"); // "Ошибка при завершении OTA-апдейта"*/
|
||||
});
|
||||
ArduinoOTA.begin();
|
||||
pinMode(LED_GREEN, OUTPUT);
|
||||
pinMode(LED_BLUE, OUTPUT);
|
||||
pinMode(LED_RED, OUTPUT);
|
||||
pinMode(PWR_SENS, OUTPUT);
|
||||
digitalWrite(LED_GREEN, LOW);
|
||||
digitalWrite(LED_BLUE, LOW);
|
||||
digitalWrite(LED_RED, LOW);
|
||||
// Serial.begin(115200);
|
||||
Serial.println("HTU21D-F");
|
||||
digitalWrite(PWR_SENS, HIGH);
|
||||
delay(200);
|
||||
if (!htu.begin()) {
|
||||
Serial.println("Couldn't find sensor!");
|
||||
while (1);
|
||||
}
|
||||
temp = htu.readTemperature();
|
||||
rel_hum = htu.readHumidity();
|
||||
//digitalWrite(PWR_SENS, LOW);
|
||||
client.setServer(mqtt_server, 1883);
|
||||
cRun = millis();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
ArduinoOTA.handle();
|
||||
lGreen.tick();
|
||||
lRed.tick();
|
||||
lBlue.tick();
|
||||
|
||||
if (!client.connected()) {
|
||||
reconnect();
|
||||
}
|
||||
client.loop();
|
||||
|
||||
if(cRun + 999 < millis()){
|
||||
cRun = millis();
|
||||
if(measCnt == 0){
|
||||
temp += (htu.readTemperature() - temp) / 6.0f;
|
||||
rel_hum += (htu.readHumidity() - rel_hum) / 6.0f;
|
||||
digitalWrite(PWR_SENS, LOW);
|
||||
}
|
||||
if(++measCnt == 9){
|
||||
digitalWrite(PWR_SENS, HIGH);
|
||||
measCnt = 0;
|
||||
}
|
||||
//Serial.print("T: ");Serial.print(temp);Serial.print("\tH: ");Serial.println(rel_hum);
|
||||
if(++minCnt == 59){
|
||||
publishMin();
|
||||
minCnt = 0;
|
||||
}
|
||||
if(minCnt % 10 == 0) publishSec();
|
||||
}
|
||||
}
|
||||
|
||||
void reconnect() {
|
||||
lRed.start();
|
||||
//digitalWrite(LED_RED, HIGH);
|
||||
//Serial.print("Attempting MQTT connection...");
|
||||
// "Попытка подключиться к MQTT-брокеру... "
|
||||
// Пытаемся подключиться:
|
||||
if (client.connect("ESPSmallRoom")) {
|
||||
//Serial.println("connected"); // "подключен"
|
||||
// подписываемся или переподписываемся на топик;
|
||||
// можно подписаться не только на один, а на несколько топиков
|
||||
} else {
|
||||
//Serial.print("failed, rc="); // "подключение не удалось"
|
||||
//Serial.print(client.state());
|
||||
//Serial.println(" try again in 5 seconds");
|
||||
}
|
||||
//delay(100);
|
||||
//digitalWrite(LED_RED, LOW);
|
||||
}
|
||||
|
||||
void publishMin()
|
||||
{
|
||||
char strFVal[11];
|
||||
if (client.connected()) {
|
||||
lGreen.start();
|
||||
//digitalWrite(LED_BLUE, HIGH);
|
||||
if(!isnan(temp)){
|
||||
dtostrf(temp, 6, 1, strFVal);
|
||||
client.publish("/home/smallroom/temp", strFVal);
|
||||
}
|
||||
if(!isnan(rel_hum)){
|
||||
dtostrf(rel_hum, 6, 1, strFVal);
|
||||
client.publish("/home/smallroom/rel_hum", strFVal);
|
||||
}
|
||||
itoa(cRun, strFVal, 10);
|
||||
client.publish("/home/smallroom/millis", strFVal);
|
||||
//digitalWrite(LED_BLUE, LOW);
|
||||
}
|
||||
}
|
||||
|
||||
void publishSec()
|
||||
{
|
||||
char strFVal[11];
|
||||
if (client.connected()) {
|
||||
lBlue.start();
|
||||
//digitalWrite(LED_GREEN, HIGH);
|
||||
if(!isnan(temp)){
|
||||
dtostrf(temp, 7, 3, strFVal);
|
||||
client.publish("/hometest/smallroom/temp", strFVal);
|
||||
}
|
||||
if(!isnan(rel_hum)){
|
||||
dtostrf(rel_hum, 7, 3, strFVal);
|
||||
client.publish("/hometest/smallroom/rel_hum", strFVal);
|
||||
}
|
||||
itoa(WiFi.RSSI(), strFVal, 10);
|
||||
client.publish("/hometest/smallroom/RSSI", strFVal);
|
||||
itoa(cRun, strFVal, 10);
|
||||
client.publish("/hometest/smallroom/millis", strFVal);
|
||||
//digitalWrite(LED_GREEN, LOW);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user