meteo-service
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 239#define TX 340
41#define SEALEVELPRESSURE_HPA (1013.25)42
43Adafruit_BME280 bme;44
45/* Название WIFI сети */
46String AP = "WIFI_NAME";47/* Пароль необходимой WIFI сети */
48String PASS = "PASSWORD";49/* Сервер на который будут оправленны данные */
50String HOST = "func-weather.herokuapp.com";51/* Порт сервера */
52int PORT = 80;53/* Прочие переменные */
54int countTimeCommand;55boolean found = false;56
57SoftwareSerial esp8266(RX, TX);58ESP8266 wifi(esp8266);59
60void setup()61{
62Serial.begin(9600);63esp8266.begin(115200);64
65/* Проверка микросервиса и подключние к сети WIFI */66sendCommand("AT", 5, "OK");67sendCommand("AT+CWMODE=1", 5, "OK");68sendCommand("AT+CWJAP=\"" + AP + "\",\"" + PASS + "\"", 20, "OK");69
70/* Подключение датчика температуры / давления / влажности */71Serial.println(F("BME280 тест"));72
73if (!bme.begin())74{75Serial.println("Не удалось подключить датчик");76while (1);77}78Serial.println("Датчик параметров подключен");79delay(100);80}
81
82void loop()83{84/* Вывод в порт полученные значения */85printValues();86
87/* Если удалось установить соединение с сервером */88if (wifi.createTCP(HOST, PORT))89{90/* Отправка данных GET запросом вида91* GET /?loc=SVAO&temp=ТЕМПЕРАТУРА&pressure=ДАВЛЕНИЕ&humidity=ВЛАЖНОСТЬ
92*/
93String data = "GET /?loc=SVIBLOVO&temprature=";94data += bme.readTemperature();95data += "&pressure=";96data += bme.readPressure() * 0.0075F;97data += "&humidity=";98data += bme.readHumidity();99data += " HTTP/1.1\r\nHost: ";100data += HOST;101data += "\r\n\r\n";102
103/* Отправка запроса */104wifi.send(data.c_str(), data.length());105
106/* Прекращает соединение с сервером */107wifi.releaseTCP();108Serial.println("Запрос отправлен");109}110else111{112Serial.println("Запрос не был отправлен");113}114delay(5000);115}
116
117void printValues()118{
119/* Вывод данных о температуре */120Serial.println();121Serial.print("Температура = ");122Serial.print(bme.readTemperature());123Serial.print(" *C :: ");124
125/* Вывод данных о давлении */126Serial.print("давление = ");127Serial.print(bme.readPressure() * 0.0075F);128Serial.print(" torr :: ");129
130/* Вывод данных о влажности */131Serial.print("влажность = ");132Serial.print(bme.readHumidity());133Serial.print(" %");134Serial.println();135}
136
137/* Повторяющаяся отправка команд на Wifi-модуль */
138void sendCommand(String command, int maxTime, char readReplay[])139{
140Serial.print("выполняю >> ");141Serial.print(command);142Serial.print(" ");143
144while (countTimeCommand < maxTime)145{146esp8266.println(command);147if (esp8266.find(readReplay))148{149found = true;150break;151}152}153Serial.println(found ? "Успешно" : "Провал");154found = false;155}
156