meteo-service

Форк
0
155 строк · 4.7 Кб
1
/* 
2
 * https://github.com/S1mpleFunc/WeatherStation 
3
 *  
4
 * MIT License
5
 * 
6
 * Copyright (c) 2019 S1mpleFunc
7
 *  
8
 * 
9
 * Permission is hereby granted, free of charge, to any person obtaining a copy
10
 * of this software and associated documentation files (the "Software"), to deal
11
 * in the Software without restriction, including without limitation the rights
12
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
 * copies of the Software, and to permit persons to whom the Software is
14
 * furnished to do so, subject to the following conditions:
15
 * 
16
 * 
17
 * The above copyright notice and this permission notice shall be included in all
18
 * copies or substantial portions of the Software.
19
 * 
20
 * 
21
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
 * SOFTWARE.
28
 *
29
 */
30

31

32
#include <Adafruit_Sensor.h>
33
#include <Adafruit_BME280.h>
34
#include <ESP8266.h>
35
#include <SoftwareSerial.h>
36

37

38
#define RX 2
39
#define TX 3
40
 
41
#define SEALEVELPRESSURE_HPA (1013.25)
42
 
43
Adafruit_BME280 bme;
44

45
/* Название WIFI сети */
46
String AP = "WIFI_NAME";  
47
/* Пароль необходимой WIFI сети */
48
String PASS = "PASSWORD"; 
49
/* Сервер на который будут оправленны данные */
50
String HOST = "func-weather.herokuapp.com";
51
/* Порт сервера */
52
int PORT = 80;
53
/* Прочие переменные */
54
int countTimeCommand;
55
boolean found = false;
56

57
SoftwareSerial esp8266(RX, TX);
58
ESP8266 wifi(esp8266);
59

60
void setup() 
61
{
62
    Serial.begin(9600);
63
    esp8266.begin(115200);
64

65
    /* Проверка микросервиса и подключние к сети WIFI */
66
    sendCommand("AT", 5, "OK");
67
    sendCommand("AT+CWMODE=1", 5, "OK");
68
    sendCommand("AT+CWJAP=\"" + AP + "\",\"" + PASS + "\"", 20, "OK");
69

70
    /* Подключение датчика температуры / давления / влажности */
71
    Serial.println(F("BME280 тест"));
72
 
73
    if (!bme.begin()) 
74
    {
75
        Serial.println("Не удалось подключить датчик");
76
        while (1);
77
    }
78
    Serial.println("Датчик параметров подключен");
79
    delay(100); 
80
}
81
 
82
void loop() 
83
{ 
84
    /* Вывод в порт полученные значения */
85
    printValues();
86

87
    /* Если удалось установить соединение с сервером */
88
    if (wifi.createTCP(HOST, PORT)) 
89
    {
90
        /* Отправка данных GET запросом вида
91
         *  GET /?loc=SVAO&temp=ТЕМПЕРАТУРА&pressure=ДАВЛЕНИЕ&humidity=ВЛАЖНОСТЬ
92
        */
93
        String data = "GET /?loc=SVIBLOVO&temprature=";
94
        data += bme.readTemperature();
95
        data += "&pressure=";
96
        data += bme.readPressure() * 0.0075F;
97
        data += "&humidity=";
98
        data += bme.readHumidity();
99
        data += " HTTP/1.1\r\nHost: ";
100
        data += HOST;
101
        data += "\r\n\r\n";
102
        
103
        /* Отправка запроса */
104
        wifi.send(data.c_str(), data.length());
105

106
        /* Прекращает соединение с сервером */
107
        wifi.releaseTCP();
108
        Serial.println("Запрос отправлен");
109
    } 
110
    else
111
    { 
112
        Serial.println("Запрос не был отправлен");   
113
    }
114
    delay(5000);
115
}
116
 
117
void printValues() 
118
{
119
    /* Вывод данных о температуре */
120
    Serial.println();
121
    Serial.print("Температура = ");
122
    Serial.print(bme.readTemperature());
123
    Serial.print(" *C :: ");
124
    
125
    /* Вывод данных о давлении */
126
    Serial.print("давление = ");
127
    Serial.print(bme.readPressure() * 0.0075F);
128
    Serial.print(" torr :: ");
129

130
    /* Вывод данных о влажности */
131
    Serial.print("влажность = ");
132
    Serial.print(bme.readHumidity());
133
    Serial.print(" %");
134
    Serial.println();
135
}
136

137
/* Повторяющаяся отправка команд на Wifi-модуль */
138
void sendCommand(String command, int maxTime, char readReplay[])
139
{
140
    Serial.print("выполняю >> ");
141
    Serial.print(command);
142
    Serial.print(" ");
143
    
144
    while (countTimeCommand < maxTime) 
145
    {
146
        esp8266.println(command);
147
        if (esp8266.find(readReplay)) 
148
        {
149
            found = true;
150
            break;
151
        }
152
    }
153
    Serial.println(found ? "Успешно" : "Провал");
154
    found = false;
155
}
156

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.