Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Дмитрий Решетей
/
OREGON
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
1
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 31ba33e6
authored
Sep 16, 2020
by
Дмитрий Решетей
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lost update from Jun 2020
1 parent
8cda0041
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
176 additions
and
70 deletions
libraries/Oregon_NR-master/Oregon_NR_MY.cpp
libraries/Oregon_NR-master/Oregon_NR_MY.h
libraries/Oregon_NR-master/Oregon_TM.cpp
wifi_reciver/wifi_reciver.ino
libraries/Oregon_NR-master/Oregon_NR_MY.cpp
View file @
31ba33e
...
...
@@ -111,9 +111,10 @@ Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT)
INT_NO
=
MHZ_INT
;
RECEIVER_PIN
=
MHZ
;
pinMode
(
MHZ
,
INPUT
);
// Вывод, на который подключён приёмник
//digitalWrite(MHZ,
HIGH
); // ДОБАВЛЕННО mr.Tech ВРЕМЕННО ТОЛЬКО ДЛЯ ОТЛАДКИ. нЕОБХОДИМО УДАЛИТЬ!
//digitalWrite(MHZ,
LOW
); // ДОБАВЛЕННО mr.Tech ВРЕМЕННО ТОЛЬКО ДЛЯ ОТЛАДКИ. нЕОБХОДИМО УДАЛИТЬ!
}
Oregon_NR
::
Oregon_NR
(
byte
MHZ
,
byte
MHZ_INT
,
byte
led
,
bool
pull_up
)
{
INT_NO
=
MHZ_INT
;
...
...
@@ -122,7 +123,7 @@ Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT, byte led, bool pull_up)
RECEIVER_PIN
=
MHZ
;
pinMode
(
MHZ
,
INPUT
);
// Вывод, на который подключён приёмник
pinMode
(
LED
,
OUTPUT
);
// Вывод светодиода
//digitalWrite(MHZ,
HIGH
); // ДОБАВЛЕННО mr.Tech ВРЕМЕННО ТОЛЬКО ДЛЯ ОТЛАДКИ. нЕОБХОДИМО УДАЛИТЬ!
//digitalWrite(MHZ,
LOW
); // ДОБАВЛЕННО mr.Tech ВРЕМЕННО ТОЛЬКО ДЛЯ ОТЛАДКИ. нЕОБХОДИМО УДАЛИТЬ!
}
//////////////////////////////////////////////////////////////////////
...
...
libraries/Oregon_NR-master/Oregon_NR_MY.h
View file @
31ba33e
#include <Arduino.h>
#ifndef Oregon_NR_h
_AIR
#define Oregon_NR_h
_AIR
#ifndef Oregon_NR_h
#define Oregon_NR_h
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// This Arduino code is for receive and transmit data using Oregon Scientific RF protocol version 2.1 and 3.0.
...
...
libraries/Oregon_NR-master/Oregon_TM.cpp
View file @
31ba33e
...
...
@@ -635,11 +635,11 @@ bool Oregon_TM::transmit()
if
(
millis
()
>=
time_marker_send
&&
send_time
)
{
digitalWrite
(
7
,
LOW
);
// Включение режима TX на 7-й ноге. Добавлено mr.Tech 09.03.2020
delay
(
500
);
digitalWrite
(
7
,
LOW
);
// Включение режима TX на 7-й ноге
- начало TX
. Добавлено mr.Tech 09.03.2020
delay
(
500
);
// задержка перед началом преамбулы. mr.Tech
SendPacket
();
time_marker_send
=
millis
()
+
send_time
;
digitalWrite
(
7
,
HIGH
);
// Отключение режима TX на 7-й ноге. Добавлено mr.Tech 09.03.2020
digitalWrite
(
7
,
HIGH
);
// Отключение режима TX на 7-й ноге
- конец TX
. Добавлено mr.Tech 09.03.2020
return
true
;
}
...
...
wifi_reciver/wifi_reciver.ino
View file @
31ba33e
...
...
@@ -13,14 +13,24 @@
#include <Oregon_NR_MY.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
//#include <ESP8266WebServer.h>
//#include <ESP8266mDNS.h>
//#include <Wire.h> // Подключаем библиотеку Wire
//#include <Adafruit_BME280.h> // Подключаем библиотеку Adafruit_BME280
//#include <Adafruit_Sensor.h> // Подключаем библиотеку Adafruit_Sensor
/*#include <SPI.h>
#define BME_SCK 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/
//Режимы работы
#define TEST_MODE false //Режим отладки (данные на narodmon.ru не отсылаются)
//#undef TEST_MODE
#define SEND_INTERVAL 120000 //350000 - 5 min //Как часто отсылать данные на сервер
//#define SEND_INTERVAL 12000
#define CONNECT_TIMEOUT 10000 //Время ожидания соединения
#define DISCONNECT_TIMEOUT 10000 //Время ожидания отсоединения
...
...
@@ -29,7 +39,6 @@
#define mac "#ESP826677671C0B" //МАС-адрес на narodmon.ru d8-f1-5b-07-1c-0b
//#define mac "#ESP8266FFFFFFFF" //ID или MAC на narodmon.ru
const
char
*
ssid
=
"ASUS"
;
//Параметры входа в WiFi
const
char
*
password
=
"123456789"
;
//настройки сети для хитрого маршрута
...
...
@@ -40,7 +49,8 @@ const char* password = "123456789";
//ESP8266WebServer server(80);
//****************************************************************************************
Oregon_NR
oregon
(
13
,
13
,
2
,
true
);
// Приёмник 433Мгц подключён к D7 (GPIO13), Светодиод на D2 подтянут к +пит.
//Oregon_NR oregon(13, 13, 2, true);// Приёмник 433Мгц подключён к D7 (GPIO13), Светодиод на D2 подтянут к +пит.
Oregon_NR
oregon
(
15
,
15
,
3
,
true
);
// Приёмник 433Мгц подключён к D7 (GPIO13), Светодиод на D2 подтянут к +пит.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Массивы для хранения полученных данных для датчиков Oregon:
...
...
@@ -48,44 +58,38 @@ Oregon_NR oregon(13, 13, 2, true); // Приёмник 433Мгц подключ
float
r_hmdty
[
3
];
//Влажность. Если = 101 - значит нет данных
bool
r_bat
[
3
],
bat_pcr
,
bat_wrt
;
//Флаг батареи
bool
r_isreceived
[
3
];
//Флаг о том, что по данному каналу приходил хоть один правильный пакет и данные актуальны
word
r_type
[
3
];
//Тип датчика
unsigned
long
rcv_time
[
3
];
// времена прихода последних пакетов
float
number_of_receiving
[
3
];
//сколько пакетов получено в процессе сбора данных
float
wa_speed
;
// Скорость ветра
float
mw_speed
;
// Макс скорость ветра
// bool w_direction; // Направление ветра
float
w_d
;
// Направление ветра
float
r_rate
;
// Интенсивность осадков - дождя
float
r_total
;
// Колличество осадков - дождя
float
tempC
;
// Температура
float
humidity
;
// Влажность
float
pressureHgmm
;
// Давление мм Рт.ст
//****************************************************************************************
//Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT)
//{
// //INT_NO = MHZ_INT;
// //RECEIVER_PIN = MHZ;
// //pinMode(MHZ, INPUT); // Вывод, на который подключён приёмник
// digitalWrite(MHZ, HIGH); // ДОБАВЛЕННО mr.Tech ВРЕМЕННО ТОЛЬКО ДЛЯ ОТЛАДКИ. нЕОБХОДИМО УДАЛИТЬ!
//}
#define BLUE_LED 2 //Индикация подключения к WiFi
#define GREEN_LED 14 //Индикатор успешной доставки пакета а народмон
#define RED_LED 255 //Индикатор ошибки доставки пакета на народмон
//Параметоы соединения с narodmon:
//IPAddress nardomon_server(94,19,113,221);
char
nardomon_server
[]
=
"narodmon.ru"
;
int
port
=
8283
;
WiFiClient
client
;
//Клиент narodmon
const
unsigned
long
postingInterval
=
SEND_INTERVAL
;
unsigned
long
lastConnectionTime
=
0
;
boolean
lastConnected
=
false
;
unsigned
long
cur_mark
;
#define BLUE_LED 2 //Индикация подключения к WiFi
#define GREEN_LED 14 //Индикатор успешной доставки пакета а народмон
#define RED_LED 255 //Индикатор ошибки доставки пакета на народмон
// #define BME280_ADDRESS 0x77
// Adafruit_BME280 bme;
//Параметоы соединения с narodmon:
//IPAddress nardomon_server(94,19,113,221);
char
narodomon_server
[]
=
"narodmon.ru"
;
int
port
=
8283
;
WiFiClient
client
;
//Клиент narodmon
WiFiServer
server
(
80
);
// Указываем порт Web-сервера
String
header
;
const
unsigned
long
postingInterval
=
SEND_INTERVAL
;
unsigned
long
lastConnectionTime
=
0
;
boolean
lastConnected
=
false
;
unsigned
long
cur_mark
;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//SETUP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -94,12 +98,17 @@ unsigned long cur_mark;
void
setup
()
{
pinMode
(
BLUE_LED
,
OUTPUT
);
pinMode
(
GREEN_LED
,
OUTPUT
);
pinMode
(
RED_LED
,
OUTPUT
);
// pinMode(1, INPUT);
// pinMode(2, INPUT);
// pinMode(3, INPUT);
// pinMode(4, INPUT);
// pinMode(5, INPUT);
digitalWrite
(
2
,
LOW
);
digitalWrite
(
1
,
LOW
);
digitalWrite
(
15
,
LOW
);
/////////////////////////////////////////////////////
//Инициализация памяти
...
...
@@ -110,47 +119,54 @@ void setup()
number_of_receiving
[
i
]
=
0
;
}
/////////////////////////////////////////////////////
//Запуск Serial-ов
Serial
.
begin
(
115200
);
Serial
.
println
(
""
);
if
(
TEST_MODE
)
Serial
.
println
(
"Test mode"
);
/////////////////////////////////////////////////////
//Запуск Wifi
wifi_connect
();
/////////////////////////////////////////////////////
digitalWrite
(
BLUE_LED
,
HIGH
);
if
(
test_narodmon_connection
()){
digitalWrite
(
GREEN_LED
,
HIGH
);
digitalWrite
(
RED_LED
,
LOW
);
}
else
{
digitalWrite
(
GREEN_LED
,
LOW
);
digitalWrite
(
RED_LED
,
HIGH
);
}
//вкючение прослушивания радиоканала
oregon
.
start
();
oregon
.
receiver_dump
=
true
;
//Если не распознаются последние байты принятого пакета можно попробовать подстроить частоту захвата данных
oregon
.
receiver_dump
=
false
;
//Если не распознаются последние байты принятого пакета можно попробовать подстроить частоту захвата данных
oregon
.
timing_correction
=
0
;
// коррекция частоты завхвата данных. Обычно достаоточно подобрать значение от -5 до 5
oregon
.
decode_method
=
3
;
//или использовать метод 3 для декодирования
oregon
.
decode_method
=
1
;
//или использовать метод 3 для декодирования
//подключение датчика давления, температуры и влажности BME280
// Wire.begin(D1, D2);
// Wire.setClock(100000);
// if (!bme.begin(BME280_ADDRESS )) { // Проверка инициализации датчика
// Serial.println("Could not find a valid BME280 sensor, check wiring!"); // Печать, об ошибке инициализации.
// while (1) delay(3000); // Зацикливаем
// }
// Wire.begin();
// Wire.setClock(100000);
// if (!bme.begin(BME280_ADDRESS ))
// {
// Serial.println("Could not find a valid BME280 sensor, check wiring!");
// while (1)
// {
// yield();
// delay(3000);
// }
// }
//
server
.
begin
();
}
//////////////////////////////////////////////////////////////////////
//LOOP//////////////////////////////////////////////////////////////////////
...
...
@@ -158,13 +174,23 @@ void setup()
void
loop
()
{
// if (!bme.begin(BME280_ADDRESS ))
// {
// Serial.println("Could not find a valid BME280 sensor, check wiring!");
//// while (1)
// {
// yield();
// // delay(3000);
// }
// }
WiFiClient
client
=
server
.
available
();
// Получаем данные, посылаемые клиентом
//////////////////////////////////////////////////////////////////////
//Защита от подвисаний/////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
if
(
micros
()
>
0xFFF00000
)
while
(
micros
()
<
0xFFF00000
);
//Висим секунду до переполнения
if
(
millis
()
>
0xFFFFFC0F
)
while
(
millis
()
<
0xFFFFFC0F
);
//Висим секунду до переполнения
//////////////////////////////////////////////////////////////////////
//Проверка полученных данных,/////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
...
...
@@ -182,29 +208,22 @@ void loop()
if
(
millis
()
-
lastConnectionTime
>
postingInterval
&&
is_a_data_to_send
)
{
//Обязательно отключить прослушивание канала
oregon
.
stop
();
digitalWrite
(
BLUE_LED
,
HIGH
);
if
(
send_data
()){
digitalWrite
(
GREEN_LED
,
HIGH
);
digitalWrite
(
RED_LED
,
LOW
);
}
else
{
digitalWrite
(
GREEN_LED
,
LOW
);
digitalWrite
(
RED_LED
,
HIGH
);
}
oregon
.
start
();
}
//////////////////////////////////////////////////////////////////////
//Захват пакета,//////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
oregon
.
capture
(
0
);
oregon
.
capture
(
0
);
// (1) - отладка отображается в консоль
//
//Захваченные данные годны до следующего вызова capture
...
...
@@ -332,7 +351,7 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
Serial
.
print
(
"PCR800,"
);
Serial
.
print
(
" RAIN RATE: "
);
Serial
.
print
(
oregon
.
rain_rate
,
4
);
//
Serial.print(oregon.rain_rate, 3);
//
Serial.print(oregon.rain_rate, 3);
//Serial.print(" | ");
//Serial.print(oregon.rain_rate, 1);
Serial
.
print
(
" mm/h, "
);
...
...
@@ -354,6 +373,53 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
r_rate
=
oregon
.
rain_rate
;
r_total
=
oregon
.
total_rain
;
}
// tempC = bme.readTemperature();
// humidity = bme.readHumidity();
// pressureHgmm = bme.readPressure() / 133.322;
// Print to serial monitor
// printToSerial(tempC, humidity, pressureHgmm);
////////////////////////////////////////////
/// JSON client ////////////////////////////
if
(
client
)
{
Serial
.
println
(
"New Client."
);
// Отправка "Новый клиент"
String
currentLine
=
""
;
// Создаем строку для хранения входящих данных от клиента
while
(
client
.
connected
())
{
// Пока есть соединение с клиентом
if
(
client
.
available
())
{
// Если клиент активен
char
c
=
client
.
read
();
// Считываем посылаемую информацию в переменную "с"
Serial
.
write
(
c
);
// Отправка в Serial port
header
+=
c
;
if
(
c
==
'\n'
)
{
// Вывод HTML страницы
if
(
currentLine
.
length
()
==
0
)
{
client
.
println
(
"HTTP/1.1 200 OK"
);
// Стандартный заголовок HTTP
client
.
println
(
"Access-Control-Allow-Origin: *"
);
// разрешаю cross-origin запросы
client
.
println
(
"Content-type:text/html "
);
client
.
println
(
"Connection: close"
);
// Соединение будет закрыто после завершения ответа
client
.
println
(
"Refresh: 13"
);
// Автоматическое обновление каждые 13 сек
client
.
println
();
// Формирую данные в формате JSON
client
.
print
(
"{
\"
w_d
\"
:
\"
"
);
client
.
print
(
w_d
);
client
.
print
(
"
\"
,
\"
wa_speed
\"
:
\"
"
);
client
.
print
(
wa_speed
);
client
.
print
(
"
\"
,
\"
mw_speed
\"
:
\"
"
);
client
.
print
(
mw_speed
);
client
.
println
(
"
\"
}"
);
client
.
println
();
break
;
}
else
{
currentLine
=
""
;
}
}
else
if
(
c
!=
'\r'
)
{
currentLine
+=
c
;
}
}
}
header
=
""
;
client
.
stop
();
Serial
.
println
(
"Client disconnected."
);
Serial
.
println
(
""
);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//***************************************************************************************************************************************
...
...
@@ -400,7 +466,7 @@ void wifi_connect() {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool
test_narodmon_connection
()
{
if
(
client
.
connect
(
nardomon_server
,
port
))
{
if
(
client
.
connect
(
nar
o
domon_server
,
port
))
{
client
.
println
(
"##"
);
cur_mark
=
millis
();
do
{
...
...
@@ -429,7 +495,7 @@ bool send_data() {
if
(
WiFi
.
status
()
!=
WL_CONNECTED
)
wifi_connect
();
bool
what_return
=
false
;
if
(
client
.
connect
(
nardomon_server
,
port
))
{
if
(
client
.
connect
(
nar
o
domon_server
,
port
))
{
//Отправляем MAC-адрес
Serial
.
println
(
' '
);
String
s
=
mac
;
...
...
@@ -537,7 +603,25 @@ void sendOregonData() {
default:
s
+=
" 50"
;
}
Serial
.
println
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
if
(
!
TEST_MODE
)
client
.
println
(
s
);
// // TEMPERATURE ##
// s = "\n#T1#";
// s += tempC;
// Serial.println(s);
// if (!TEST_MODE) client.print(s);
//
// // HUMIDITY ##
// s = "\n#H1#";
// s += humidity;
// Serial.println(s);
// if (!TEST_MODE) client.print(s);
//
// // PRESURE ##
// s = "\n#P1#";
// s += pressureHgmm;
// Serial.println(s);
// if (!TEST_MODE) client.print(s);
// ########################################################################################
...
...
@@ -577,6 +661,27 @@ void sendOregonData() {
// if (!TEST_MODE) client.println(s);
// }
}
/////////////////////////////////////////////////////////////////////////////
void
printToSerial
(
float
tempC
,
float
humidity
,
float
pressurePascals
)
{
//// Temperature
Serial
.
print
(
"Temperature: "
);
Serial
.
print
(
tempC
);
Serial
.
println
(
"C"
);
//// Barometric pressure
Serial
.
print
(
"Pressure: "
);
Serial
.
print
(
pressureHgmm
);
Serial
.
println
(
"Hgmm"
);
//// Humidity
Serial
.
print
(
"Humidity: "
);
Serial
.
print
(
humidity
);
Serial
.
println
(
"%"
);
delay
(
3000
);
}
//////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
// ЗАМЕНА DELAY, которая работает и не приводит к вылету...
////////////////////////////////////////////////////////////////////////////////////////
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment