ПОМОГИТЕ кому не сложно ARDUINO датчики
Модератор: immortal
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Тогда надо что то делать с протоколом. Статус изменился - ушел пакет , и пока не получили подтверждение отправляем постоянно. Получили - следующее через какое то время время. Так реализовано в АМС.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 73
- Зарегистрирован: Ср авг 31, 2016 7:54 am
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
У меня счас так и реализовано. Долбит до тех пор пока не получит подтверждения. Ну есть только тайм аут, скажем 10 попыток, на случай если вдруг что с устройством, ну сдохло или еще что. Из за это получается ардуина перегружена. Вот думаю надо как то либо протокол поменять, либо разделить функции на две дуины, ну или пожертвовать какими то подтверждениями.
-
- Сообщения: 238
- Зарегистрирован: Чт ноя 26, 2015 10:54 pm
- Благодарил (а): 38 раз
- Поблагодарили: 45 раз
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Мне кажется)), что библиотека MySensors Вам поможет...
Полностью от проблем, конечно, не избавит, но под Ваше описание подходит...
Полностью от проблем, конечно, не избавит, но под Ваше описание подходит...
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Интересная эта тема - протокол. И наверное обсуждать надо не тут. В АМС столкнулся с ситуацией - первая версия очень удачная, в запросе куча настроек и проходит всегда с первого раза. С пятью сенсорами приходит ответ - передача не удалась, хотя все цифры отображаются корректно с первого раза. В сторону MySensor только начинаю смотреть. С учетом когда сделают свой гейт.....
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 73
- Зарегистрирован: Ср авг 31, 2016 7:54 am
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Всем привет. Нашел проблему она не совсем в сервере. Точнее в сети радиоканала. С сервера по радио данные улетают, вроде как и сразу получает получатель, а вот ответ не доходит. И сервер начинает опять его долбить. Начал выяснять при переходе радио модуля с передачи на прием не хватает тех задержек что регламентируют. Вчера на одном датчике поэкспериментировал с задержкой после перехода на прием сервера передающий модуль не сразу отвечает а делает паузу (я поставил 200-300мс). Вроде ответы доходят все и сразу. Сегодня погоняю еще. Я все данные прохождения по этапам вывел в COM порт там сразу все видно кто в цепочке косячит.
-
- Сообщения: 73
- Зарегистрирован: Ср авг 31, 2016 7:54 am
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
И еще думаю надо при отправке каких то запросов с majordomo на включение чего то или установки каких то параметров, сделать полный перехват работы сервера и выполнение пришедшего задания. А потом доделка сервером начатого. Так сказать датчики с параметрами немного подождут. А до этого ставилась задача в очередь.
-
- Сообщения: 73
- Зарегистрирован: Ср авг 31, 2016 7:54 am
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Но самое я считаю незаменимое это то что мне помог реализовать nick7zmail. Сейчас такой запрос решает кучу проблем и не надо городить огород.
- mazahaka7sk
- Сообщения: 54
- Зарегистрирован: Сб фев 20, 2016 8:46 am
- Откуда: Усть-Каменогорс
- Благодарил (а): 8 раз
- Поблагодарили: 10 раз
- Контактная информация:
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Собрал у всех по кусочкам и ЗАРАБОТАЛО)
кому нужно вот скетч
кому нужно вот скетч
СпойлерПоказать
int cycle_counter=0;
char val = 0;
int old_SensorSpalnaD=0;
int old_SensorZalD=0;
int old_SensorKyxnaD=0;
int old_SensorKoridorD=0;
int old_SensorTyaletD=0;
int old_Sensorvodityalet=0;
#include "DHT.h"
#define DHTPIN 12 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
unsigned int sensorValue = 0;
char buf[80];
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
}
void setup()
{
Serial.println("DHTxx test!");
dht.begin();
pinMode(2, INPUT); // Датчик движение спальня 2 пин
old_SensorSpalnaD=digitalRead(2);
pinMode(3, INPUT); // Датчик движение зал 3 пин
old_SensorZalD=digitalRead(3);
pinMode(4, INPUT); // Датчик движение кухня 4 пин
old_SensorKyxnaD=digitalRead(4);
pinMode(5, INPUT); // Датчик движение коридор 5 пин
old_SensorKoridorD=digitalRead(5);
pinMode(6, INPUT); // Датчик движение туалет 6 пин
old_SensorTyaletD=digitalRead(6);
pinMode(7, OUTPUT); // реле света спальня 7 пин
pinMode(8, OUTPUT); // реле подсветки кухня 8 пин
pinMode(9, OUTPUT); // реле лазер охрана 9 пин
pinMode(10, INPUT); // сенсор воды туалет 10 пин
old_Sensorvodityalet=digitalRead(10);
pinMode(11, OUTPUT); // реле звука туалет 11 пин
//pinMode(12, OUTPUT); // реле 12пин температура
pinMode(13, OUTPUT); // реле 13 пин
Serial.begin(115200); // Скорость консольного порта 9600 (пригодится для отладки)
}
void loop()
{
{
if (Serial.available() > 0) {
val = Serial.read();
if (val=='B') digitalWrite(7,HIGH); // выключить свет
if (val=='V') digitalWrite(7,LOW); // включить свет
if (val=='Z') digitalWrite(8,HIGH); // выключить свет
if (val=='X') digitalWrite(8,LOW); // включить свет
if (val=='S') digitalWrite(12,HIGH); // выключить свет
if (val=='D') digitalWrite(12,LOW); // включить свет
if (val=='F') digitalWrite(13,HIGH); // выключить свет
if (val=='G') digitalWrite(13,LOW); // включить свет
if (val=='K') digitalWrite(9,HIGH); // выключить свет
if (val=='L') digitalWrite(9,LOW); // включить свет
}
}
int valid_sensor=0;
delay(1000); // задержка в 0.1 сек.
cycle_counter++;
if (cycle_counter>600) {
cycle_counter=0;
}
//движение спальня
Serial.println("G");
int current_SensorSpalnaD=digitalRead(2);
//Serial.println(current_SensorSpalnaD);
if (current_SensorSpalnaD!=(int)old_SensorSpalnaD) {
old_SensorSpalnaD=(int)current_SensorSpalnaD;
sprintf(buf, "GET /objects/?object=SensorSpalnaD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorSpalnaD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("H");
int current_SensorZalD=digitalRead(3);
//Serial.println(current_SensorZalD);
if (current_SensorZalD!=(int)old_SensorZalD) {
old_SensorZalD=(int)current_SensorZalD;
sprintf(buf, "GET /objects/?object=SensorZalD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorZalD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("T");
int current_SensorKyxnaD=digitalRead(4);
//Serial.println(current_SensorKyxnaD);
if (current_SensorKyxnaD!=(int)old_SensorKyxnaD) {
old_SensorKyxnaD=(int)current_SensorKyxnaD;
sprintf(buf, "GET /objects/?object=SensorKyxnaD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorKyxnaD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("N");
int current_SensorKoridorD=digitalRead(5);
//Serial.println(current_SensorKoridorD);
if (current_SensorKoridorD!=(int)old_SensorKoridorD) {
old_SensorKoridorD=(int)current_SensorKoridorD;
sprintf(buf, "GET /objects/?object=SensorKoridorD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorKoridorD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("O");
int current_SensorTyaletD=digitalRead(6);
//Serial.println(current_SensorTyaletD);
if (current_SensorTyaletD!=(int)old_SensorTyaletD) {
old_SensorTyaletD=(int)current_SensorTyaletD;
sprintf(buf, "GET /objects/?object=SensorTyaletD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorTyaletD);
sendHTTPRequest();
}
//Сенсор воды туалет
// Serial.println("P");
// int current_Sensorvodityalet=digitalRead(10);
//Serial.println(current_Sensorvodityalet);
// if (current_Sensorvodityalet!=(int)old_Sensorvodityalet) {
// old_Sensorvodityalet=(int)current_Sensorvodityalet;
// sprintf(buf, "GET /objects/?object=Sensorvodityalet&op=m&m=statusChanged&status=%t HTTP/1.0", (int)current_Sensorvodityalet);
// sendHTTPRequest();
//}
// DHT
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
int h2 = (h - (int)h) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=humSensor01&op=m&m=humChanged&h=%0d.%d", (int)h, abs(h2));
sendHTTPRequest();
int t2 = (t - (int)t) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=TempSensor01&op=m&m=tempChanged&t=%0d.%d", (int)t, abs(t2));
sendHTTPRequest();
// end DHT
}
}
char val = 0;
int old_SensorSpalnaD=0;
int old_SensorZalD=0;
int old_SensorKyxnaD=0;
int old_SensorKoridorD=0;
int old_SensorTyaletD=0;
int old_Sensorvodityalet=0;
#include "DHT.h"
#define DHTPIN 12 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
unsigned int sensorValue = 0;
char buf[80];
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
}
void setup()
{
Serial.println("DHTxx test!");
dht.begin();
pinMode(2, INPUT); // Датчик движение спальня 2 пин
old_SensorSpalnaD=digitalRead(2);
pinMode(3, INPUT); // Датчик движение зал 3 пин
old_SensorZalD=digitalRead(3);
pinMode(4, INPUT); // Датчик движение кухня 4 пин
old_SensorKyxnaD=digitalRead(4);
pinMode(5, INPUT); // Датчик движение коридор 5 пин
old_SensorKoridorD=digitalRead(5);
pinMode(6, INPUT); // Датчик движение туалет 6 пин
old_SensorTyaletD=digitalRead(6);
pinMode(7, OUTPUT); // реле света спальня 7 пин
pinMode(8, OUTPUT); // реле подсветки кухня 8 пин
pinMode(9, OUTPUT); // реле лазер охрана 9 пин
pinMode(10, INPUT); // сенсор воды туалет 10 пин
old_Sensorvodityalet=digitalRead(10);
pinMode(11, OUTPUT); // реле звука туалет 11 пин
//pinMode(12, OUTPUT); // реле 12пин температура
pinMode(13, OUTPUT); // реле 13 пин
Serial.begin(115200); // Скорость консольного порта 9600 (пригодится для отладки)
}
void loop()
{
{
if (Serial.available() > 0) {
val = Serial.read();
if (val=='B') digitalWrite(7,HIGH); // выключить свет
if (val=='V') digitalWrite(7,LOW); // включить свет
if (val=='Z') digitalWrite(8,HIGH); // выключить свет
if (val=='X') digitalWrite(8,LOW); // включить свет
if (val=='S') digitalWrite(12,HIGH); // выключить свет
if (val=='D') digitalWrite(12,LOW); // включить свет
if (val=='F') digitalWrite(13,HIGH); // выключить свет
if (val=='G') digitalWrite(13,LOW); // включить свет
if (val=='K') digitalWrite(9,HIGH); // выключить свет
if (val=='L') digitalWrite(9,LOW); // включить свет
}
}
int valid_sensor=0;
delay(1000); // задержка в 0.1 сек.
cycle_counter++;
if (cycle_counter>600) {
cycle_counter=0;
}
//движение спальня
Serial.println("G");
int current_SensorSpalnaD=digitalRead(2);
//Serial.println(current_SensorSpalnaD);
if (current_SensorSpalnaD!=(int)old_SensorSpalnaD) {
old_SensorSpalnaD=(int)current_SensorSpalnaD;
sprintf(buf, "GET /objects/?object=SensorSpalnaD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorSpalnaD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("H");
int current_SensorZalD=digitalRead(3);
//Serial.println(current_SensorZalD);
if (current_SensorZalD!=(int)old_SensorZalD) {
old_SensorZalD=(int)current_SensorZalD;
sprintf(buf, "GET /objects/?object=SensorZalD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorZalD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("T");
int current_SensorKyxnaD=digitalRead(4);
//Serial.println(current_SensorKyxnaD);
if (current_SensorKyxnaD!=(int)old_SensorKyxnaD) {
old_SensorKyxnaD=(int)current_SensorKyxnaD;
sprintf(buf, "GET /objects/?object=SensorKyxnaD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorKyxnaD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("N");
int current_SensorKoridorD=digitalRead(5);
//Serial.println(current_SensorKoridorD);
if (current_SensorKoridorD!=(int)old_SensorKoridorD) {
old_SensorKoridorD=(int)current_SensorKoridorD;
sprintf(buf, "GET /objects/?object=SensorKoridorD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorKoridorD);
sendHTTPRequest();
}
//GARAGE GATES SENSOR
Serial.println("O");
int current_SensorTyaletD=digitalRead(6);
//Serial.println(current_SensorTyaletD);
if (current_SensorTyaletD!=(int)old_SensorTyaletD) {
old_SensorTyaletD=(int)current_SensorTyaletD;
sprintf(buf, "GET /objects/?object=SensorTyaletD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorTyaletD);
sendHTTPRequest();
}
//Сенсор воды туалет
// Serial.println("P");
// int current_Sensorvodityalet=digitalRead(10);
//Serial.println(current_Sensorvodityalet);
// if (current_Sensorvodityalet!=(int)old_Sensorvodityalet) {
// old_Sensorvodityalet=(int)current_Sensorvodityalet;
// sprintf(buf, "GET /objects/?object=Sensorvodityalet&op=m&m=statusChanged&status=%t HTTP/1.0", (int)current_Sensorvodityalet);
// sendHTTPRequest();
//}
// DHT
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
int h2 = (h - (int)h) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=humSensor01&op=m&m=humChanged&h=%0d.%d", (int)h, abs(h2));
sendHTTPRequest();
int t2 = (t - (int)t) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=TempSensor01&op=m&m=tempChanged&t=%0d.%d", (int)t, abs(t2));
sendHTTPRequest();
// end DHT
}
}
CONNECT |Группа в VK| ЮТУБ КАНАЛ
Система стоит на Raspberry pi 3b v3.31
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
Система стоит на Raspberry pi 3b v3.31
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".