Найти в Дзене
Raspberry pi /Arduino/Smart_Home

Агенты на автономном питании -1 вариант

Друзья , все бы хорошо! НО мы не можем носить малинку в те места , где необходимо что-измерить . Хоть она у нас и мобильная и работает без проводов 8). а если необходимо собрать данные одновременно с нескольких мест.. - не получиться (как говорить один известный политик - ОДНОЗНАЧНО!)
Для сбора датчиков климата (климатических параметров) нам необходимо сделать агентов, которые будут находиться

Друзья , все бы хорошо! НО мы не можем носить малинку в те места , где необходимо что-измерить . Хоть она у нас и мобильная и работает без проводов 8). а если необходимо собрать данные одновременно с нескольких мест.. - не получиться (как говорить один известный политик - ОДНОЗНАЧНО!)

Для сбора датчиков климата (климатических параметров) нам необходимо сделать агентов, которые будут находиться непосредственно в месте сора данных. .

Начнем с Балкона. Очень важно знать температуру /влажность И температуру за пределами квартиры (т.е. на улице)

и. так были закуплены.

1-Батарейный блок -с выключателем.

Модуль ESP-12
Модуль ESP-12
-2

3-Датчик температуры DS18B20

-3

4 датчик температуры и влажности AHT10

-4
Программатор ESP01 UART, адаптер для беспроводного Wifi ESP8266 CH340G с USB на ESP8266, серия ESP8266, модуль платы разработки  - самый дешевый- но потребуется немного пайка..
Программатор ESP01 UART, адаптер для беспроводного Wifi ESP8266 CH340G с USB на ESP8266, серия ESP8266, модуль платы разработки - самый дешевый- но потребуется немного пайка..

и для настройки(прошивки) необходим программатор - можно взять самый простой- скрин выше

Далее было все это спаяно в одно целое и припаяны контакты для прошивки.

Далее заливаем скетч - ниже

#include <ESP8266WiFi.h>

#include <PubSubClient.h>

#include <Wire.h>

#include <Thinary_AHT10.h>

#include <OneWire.h>

#include <DallasTemperature.h>

int pwr18b20 = 2;

// Провод данных подключен к контакту 2 на Arduino

#define ONE_WIRE_BUS 0

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

AHT10Class AHT10;

const char* ssid = "ваша сеть";

const char* password = "ваш пароль";

const char* mqttServer = "адрес mqtt сервера";

const int mqttPort = 1883;

const char* mqttUser = "";

const char* mqttPassword = "";

WiFiClient espClient;

PubSubClient client(espClient);

float temperature;

float humidity;

float dewPoint;

int sensorValue = analogRead(A0);

ADC_MODE(ADC_VCC); // 3.3v voltage sensor

int vcc;

void setup() {

Serial.begin(9600);

AHT10.begin();

sensors.begin();

//pinMode(pwr18b20, OUTPUT);

pinMode(pwr18b20, OUTPUT);

digitalWrite(pwr18b20, HIGH);

WiFi.hostname("Esp_balkon");

WiFi.begin(ssid, password);

digitalWrite(pwr18b20, HIGH);

delay(2000);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.println("Connecting to WiFi..");

}

Serial.println("Connected to the WiFi network");

Serial.print("Connected, IP address: ");

Serial.println(WiFi.localIP());

Serial.printf("RSSI: %d dBm\n", WiFi.RSSI());

client.setServer(mqttServer, mqttPort);

client.setCallback(callback);

while (!client.connected()) {

Serial.println("Connecting to MQTT...");

if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {

Serial.println("mqttconnected");

} else {

Serial.print("failed with state ");

Serial.print(client.state());

//Serial.println(String("") + "Влажность: " + AHT10.GetHumidity() + "%");

//Serial.println(String("") + "Температура: " + AHT10.GetTemperature() + "℃");

//Serial.println(String("") + "Точка росы: " + AHT10.GetDewPoint() + "℃");

delay(1000);

}

}

//float temperature = AHT10.GetTemperature();

//float humidity = AHT10.GetHumidity();

//float dewPoint = AHT10.GetDewPoint();

client.subscribe("ESP_balkon/send");

}

void callback(char* topic, byte* payload, unsigned int length) {

Serial.print("Message arrived in topic: ");

Serial.println(topic);

Serial.print("Message:");

for (int i = 0; i < length; i++) {

Serial.print((char)payload[i]);

}

Serial.println();

Serial.println("-----------------------");

}

void loop() {

client.loop();

sensors.requestTemperatures(); // Отправляем команды для получения температуры

Serial.println(String("") + "Температура 18b20: " + sensors.getTempCByIndex(0)+ "℃"); // 18_b_20

client.publish("/ESP_balkon/sensor/Temperature_18b20", String(sensors.getTempCByIndex(0)).c_str());

Serial.println(String("") + "Влажность: " + AHT10.GetHumidity() + "%");

client.publish("/ESP_balkon/sensor/Humidity", String(AHT10.GetHumidity()).c_str());

Serial.println(String("") + "Температура: " + AHT10.GetTemperature() + "℃");

client.publish("/ESP_balkon/sensor/Temperature", String(AHT10.GetTemperature()).c_str());

Serial.println(String("") + "Точка росы: " + AHT10.GetDewPoint() + "℃");

client.publish("/ESP_balkon/sensor/DewPoint", String(AHT10.GetDewPoint()).c_str());

client.publish("/ESP_balkon/sensor/Battery", String(sensorValue).c_str());

// print out the value you read:

Serial.println(String("") + "AnalogRead: "+ sensorValue);

vcc = ESP.getVcc();

double dvcc = (float)vcc / 1024;

Serial.println("Voltage: " + String(dvcc, 4) + "V");

client.publish("/ESP_balkon/sensor/Voltage", String(dvcc, 4).c_str());

delay(5000);

digitalWrite(pwr18b20, LOW);

Serial.println("ya sleep");

ESP.deepSleep(900e6);

}

  • конец скетча

поясню принцип работы

  1. включаемся
  2. подключаемся к WIFI
  3. опрашиваем датчики температура\влажность\внешняя температура
  4. Опрашиваем напряжение питания ESP-12
  5. предаем на сервер MQTT
  6. засыпаем на 15 минут (для экономии батарейки)

повторяем цикл через 15 минут

Смотрите далее будет интереснее - можно написать мне, что бы вы хотели увидеть на моем канале На главную - все части в общим списком