Если поправить руками файл в который передаються данные с ардуины то ошибка с сайта уходит
Warning: fread(): Length parameter must be greater than 0 in /storage/ssd2/421/5620421/public_html/transfer/hum-1.php on line 4
Потому и подумал что данные с ардуины не передаються на сервер
Очевидно, что нужно заменить toInt() на toFloat()!!! - вот за такой ответ было бы Вам большое спасибо)
Странная позиция. То, как Вам ответили, показывает уважение к разумному человеку, который ошибся. Разумеется, спрашивающий разумен и сам в состоянии разобраться, но "глаз замылен", и нужен небольшой толчок, который Вам и дали. Ответ же, за который от Вас "было бы спасибо", предполагает отвечание ребёнку или идиоту. Вы действительно хотите, чтобы к Вам так относились?
ну правильно выдает -- выдает значение кнопки (вкл 1, выкл 0), если посмотрите на вебку значение должны измениться на темпер 1, тем2 323 и влажность 707. если все так, то надо коврять дальше код ардуины
получилось, даные теперь отображаються , но перестал включатель срабатывать , буфер не меняет свое состояние на 1 при включении. строки не сдвинулись вроди
delay() нужен в лучшем случае после последнего закидывания данных перед стопом, чтобы был шанс их передать. И flush() в Ethernet.h ровным счетом ничего не делает. Абсолютно. На самом нижнем уровне в функции находится одна закомментированная строчка "TODO".
И вообще - вы с этим дилеями в лупе имеете неиллюзорный шанс отреджектить половину входящих коннектов.
Добавил еще одну кнопку на сервере но не могу до конца понять как мне в коде ардуины написать , в мониторе порта результат нажатия второй кнопки отображаеться сразу следующим символом после первой
Понимаю возможно тупо написал но я только учусь
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT11
#define ONE_WIRE_BUS 2
DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };
byte i, startRead, buff1 ; // новая строка
byte data_string_num =3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная )
byte a, startRead2, buff2;
byte data_string_num2 =3;
EthernetClient client;
char server[] = "KKKKKK ;//имя вашего сервера
const int led=5;
const int led1=4;
int h; // Значение температуры
int t;
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac);
sensors.begin();
pinMode( led, OUTPUT);
digitalWrite(led, LOW);
pinMode( led1, OUTPUT);
digitalWrite(led1, LOW);
}
void loop()
{
h = dht.readHumidity();
t = dht.readTemperature();
sensors.requestTemperatures();
if (client.connect(server, 80))
{
client.print( "GET /add_data.php?");
client.print("temperature=");
client.print( sensors.getTempCByIndex(0) );
client.print("&");
client.print("&");
client.print("temperature1=");
client.print( sensors.getTempCByIndex(1) );
client.print("&");
client.print("&");
client.print("humidity=");
client.print(h);
client.print("&");
client.print("&");
client.println( " HTTP/1.1");
client.print( "Host: " );
client.println(server);
client.println( "Connection: close" );
client.println();
client.println();
Serial.print("hum= ");
Serial.println(h);
delay(200);
while (client.available())
{
char c = client.read();
Serial.print(c);
if (c == '\r') continue;
if (c == '\n') { // найден конец строки
if ((startRead == 0) && (i == 0)) // если строка пустая - служебный заголовок закончился
{startRead = 1; continue;} // начинаем отсчитывать строки данных
if (startRead > 0) // очередная строка данных
{startRead++; continue;}
i=0; continue;
}
i++;
if (startRead == data_string_num) { // если номер строки данных равен заданному
if ( c=='1') buff1=1; // извлекаем параметр из первого символа строки
if ( c=='0') buff1=0;
startRead++;
}
}
Serial.print("buff1 = ");
Serial.println(buff1);
client.stop();
client.flush();
delay(1000);
}
if ( buff1==1)
{
digitalWrite (led, HIGH);
}
else
{
digitalWrite(led, LOW);
}
while (client.available())
{
char c = client.read();
Serial.print(c);
if (c == '\r') continue;
if (c == '\n') { // найден конец строки
if ((startRead2 == 0) && (a == 0)) // если строка пустая - служебный заголовок закончился
{startRead2 = 1; continue;} // начинаем отсчитывать строки данных
if (startRead2 > 0) // очередная строка данных
{startRead2++; continue;}
a=0; continue;
}
a++;
if (startRead2 == data_string_num2) { // если номер строки данных равен заданному
if ( c=='2') buff2=2; // извлекаем параметр со второго символа строки
if ( c=='0') buff2=0;
startRead2++;
}
}
Serial.print("buff2 = ");
Serial.println(buff2);
client.stop();
client.flush();
delay(100);
if ( buff2==1)
{
digitalWrite (led1, HIGH);
}
else
{
digitalWrite(led1, LOW);
}
delay(100);
}
HTTP/1.1 200 OK
Date: Sun, 27 May 2018 20:19:24 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Server: awex
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Request-ID: fe2a94dd3f784bbaff51d691e240d99b
4
11 // тут значение кнопок друг за другом идут
0
buff1 = 1
buff2 = 0
hum= 39
Уважаемые форумчане, всех с наступающим Новым годом! Пусть пусть он будет лучше уходящего !
Ранее уже писал в этой ветке по своей проблеме и мне помогли тогда за что и большое спаибо.
Тогда подзабросил этот проект т.к. небыло свободного времени, вот решил вернуться все весело клацает данные с датчиков передаються.
Решил задействовать в пилотной експлуатации и столкнулся с такой проблемой, состояние реле самопроизвольно меняеться на высокий уровень и больше arduino не реагирует на кнопки в браузере. Помагает только рестарт.
Закономерности когда она перестает реагировать не наблюдаю, как правило через час может перестать а когда и больше.
Заметил что только при длительной работе перестает выводиться служебный заголовок, и насколько понял после этого перестает ардуино реагировать
Хотя при проверке реакции нули (последняя строка) успешно меняют свой статус на 1 1 (в зависимости какое положение тумблера на страничке, две кнопки на страничке)
Notice: Undefined index: temperature in /storage/ssd2/421/5620421/public_html/add_data.php on line 3
Notice: Undefined index: humidity in /storage/ssd2/421/5620421/public_html/add_data.php on line 9
Notice: Undefined index: temperature1 in /storage/ssd2/421/5620421/public_html/add_data.php on line 15
00
Прошу по возможности подсказать почему дуня отказывается реагировать на запросы ?
Заранее всем благодарен
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT11
#define ONE_WIRE_BUS 17
DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };
byte i, startRead, buff ; // новая строка
byte data_string_num =3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная )
EthernetClient client;
char server[] = "ХХХХХХХХХХХХХХХХХХ.com" ;
const int led=5;
int h; // Значение температуры
int t;
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac);
sensors.begin();
pinMode( led, OUTPUT);
digitalWrite(led, LOW);
}
void loop()
{
h = dht.readHumidity();
t = dht.readTemperature();
sensors.requestTemperatures();
if (client.connect(server, 80))
{
client.print( "GET /add_data.php?");
client.print("temperature=");
client.print( sensors.getTempCByIndex(0) );
client.print("&");
client.print("&");
client.print("temperature1=");
client.print( sensors.getTempCByIndex(1) );
client.print("&");
client.print("&");
client.print("humidity=");
client.print(h);
client.print("&");
client.print("&");
client.println( " HTTP/1.1");
client.print( "Host: " );
client.println(server);
client.println( "Connection: close" );
client.println();
client.println();
Serial.print("hum= ");
Serial.println(h);
delay(200);
while (client.available())
{
char c = client.read();
Serial.print(c);
if (c == '\r') continue;
if (c == '\n') { // найден конец строки
if ((startRead == 0) && (i == 0)) // если строка пустая - служебный заголовок закончился
{startRead = 1; continue;} // начинаем отсчитывать строки данных
if (startRead > 0) // очередная строка данных
{startRead++; continue;}
i=0; continue;
}
i++;
if (startRead == data_string_num) { // если номер строки данных равен заданному
if ( c=='1') buff=1; // извлекаем параметр из первого символа строки
if ( c=='0') buff=0;
startRead++;
}
}
Serial.print("buff = ");
Serial.println(buff);
client.stop();
client.flush();
delay(1000);
}
if ( buff==1)
{
digitalWrite (led, HIGH);
}
else
{
digitalWrite(led, LOW);
}
delay(100);
}
Спасибо, за подсказку, у меня ардуино мега 2560 и шилд питаються от юсб входа импульсной зарядкой от телефона на 700ма. Попробую запитать от другого разьема 7-12вольт. По результатам отпишусь
Запитал плату мега 2560 и шилд от внешнего блока 12вольт но результата не получил, наоборот еще больше глюков ( Буду читаь форум и попробую может золотую середину 7 вольт
Запитал плату мега 2560 и шилд от внешнего блока 12вольт но результата не получил, наоборот еще больше глюков ( Буду читаь форум и попробую может золотую середину 7 вольт
Спасибо за комментарий, буду смотреть, я можно сказать ” чайник " в этом деле, потому пока не совсем понимаю занулить, всмысле флеш если прошел первый конект?
Ну вот и все, дописывай что должно происходить при buff=0 и 1, и по задержке отпиши что получиться
aleksandr777
b 707
большое Вам человеческое спасибо и плюс в карму за терпение и потраченое время
По задержке секунд 5 на включение и 20 на выключение
Получилось. Можно спокойно ложиться спать ) останеться настроить частоту обновления хотя это не критично.
Пока настраивал перелопатил кучу инфо и так понял что все таки это не лучший вариант реализации MQTT более продвинут
Каково Ваше мнение как экспертов ?
Если еще актуально, по совету b707 можно сделать еще так:
while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); if (line.indexOf("releON") != -1){buff=1; Serial.println("vkl");} if (line.indexOf("releOFF") != -1){buff=0; Serial.println("otkl");} } } }в файле index.php поменяйте строчки:
задержка должна уйти
благодарю
попробую еще так сделать
Решил добавить еще показания датчика влажности DHT 11 серверную часть сделал в вот код ардуино не отправляет инфо на сервер
Где-то косяк в коде ардуино Сериал выдает такое сообщение
Может сможете натолкныть на мысль
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Adafruit_Sensor.h> #include "DHT.h" #define ONE_WIRE_BUS 2 #define DHTPIN 7 #define DHTTYPE DHT11 // DHT 11 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DHT dht(DHTPIN, DHTTYPE); byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 }; byte i, startRead, buff ; // новая строка byte data_string_num =3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная ) unsigned long int timeConn = millis(); float h; // Значение температуры float t; EthernetClient client; char server[] = "мой сервер"; const int led=5; void setup() { Serial.begin(9600); Ethernet.begin(mac); sensors.begin(); pinMode( led, OUTPUT); digitalWrite(led, LOW); dht.begin(); } void loop() { h = dht.readHumidity(); // Read temperature as Celsius (the default) t = dht.readTemperature(); float hic = dht.computeHeatIndex(t, h, false); sensors.requestTemperatures(); if (client.connect(server, 80)) { client.print( "GET /add_data.php?"); client.print("temperature="); client.print( sensors.getTempCByIndex(0) ); client.print("&"); client.print("&"); client.print("temperature1="); client.print( sensors.getTempCByIndex(1) ); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); delay(900); while (client.available()) { char c = client.read(); Serial.print(c); if (c == '\r') continue; if (c == '\n') { // найден конец строки if ((startRead == 0) && (i == 0)) // если строка пустая - служебный заголовок закончился {startRead = 1; continue;} // начинаем отсчитывать строки данных if (startRead > 0) // очередная строка данных {startRead++; continue;} i=0; continue; } i++; if (startRead == data_string_num) { // если номер строки данных равен заданному if ( c=='1') buff=1; // извлекаем параметр из первого символа строки if ( c=='0') buff=0; startRead++; } } Serial.print("buff= "); Serial.println(buff); client.flush(); client.stop(); delay(100); } if ( buff==1) { digitalWrite (led, HIGH); } else { digitalWrite(led, LOW); } delay(100); { // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } Serial.print("Humidity: "); Serial.println(h); // Serial.print(" %\t"); Serial.println("Temperature: "); Serial.print(t); Serial.println(" *C "); // Serial.print(f); //Serial.print(" *F\t"); //Serial.print("Heat index: "); //Serial.print(hic); //Serial.print(" *C "); //Serial.print(hif); // Serial.println(" *F"); } } void sendData(float h) { client.print( "GET /add_data.php?"); client.print("Humidity"); client.print(h); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); }Для проверки сервера используйте браузер
твойсервер/add_data.php?temperature=1&&temperature1=1
Ток поправьте в зависимости от того что серверу шлете
риал выдает такое сообщение
Читать умеете? Сообщение о неопределённом индексе в php, а косяк почему-то в ардуино.
может подскажет кто...
шлем в ардуину
HTTP/1.1 200 OK Date: Wed, 09 May 2018 20:05:53 GMT Server: Apache/2.4.18 (Ubuntu) Content-Length: 32 Connection: close Content-Type: text/html; charset=UTF-8 2 4 {21.2/22.5/555.6} 7 10нужно выловить {21.2/22.5/555.6}, ловим следующим образом:
while (client.available()) { char d = client.read(); Serial.print(d); float a,b,c; char *pch; char buf[60]; String var; if (d == '{' ) { String line = client.readStringUntil('}'); Serial.println(line); line.toCharArray(buf,60); pch = strtok(buf,"/"); var = (String)pch; a = var.toInt(); // Преобразовывает строку (String) в целое число pch = strtok(NULL,"/"); var = (String)pch; b = var.toInt(); pch = strtok(NULL,"/"); var = (String)pch; c = var.toInt(); Serial.println(a); Serial.println(b); Serial.println(c); } }по итогу возвращает целые числа. как сделать чтоб возвращала дробные числа?
Очевидно, что нужно заменить toInt() на что-то более подходящее задаче.
Если поправить руками файл в который передаються данные с ардуины то ошибка с сайта уходит
Warning: fread(): Length parameter must be greater than 0 in /storage/ssd2/421/5620421/public_html/transfer/hum-1.php on line 4
Потому и подумал что данные с ардуины не передаються на сервер
ошибка PHP, в ответе указаны и строки в каких ошибка.
для приема add_data
<?php $S1 = $_GET['temperature']; $myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1, 'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S2 = $_GET['temperature1']; $myFile2 = "txt/in-3.txt"; $fh2 = fopen($myFile2, 'w') or die("can't open file"); fwrite($fh2, $S2); fclose($fh2); $S3 = $_GET['temperature1']; $myFile3 = "txt/in-2.txt"; $fh3 = fopen($myFile3, 'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData; ?>для вывода на индекс файл hum-1.php
проверте создался ли текстовый файл
ну и в индексе тоже поправить надо....
Очевидно, что нужно заменить toInt() на что-то более подходящее задаче.
Очевидно, что нужно заменить toInt() на toFloat()!!! - вот за такой ответ было бы Вам большое спасибо)
Очевидно, что нужно заменить toInt() на toFloat()!!! - вот за такой ответ было бы Вам большое спасибо)
Странная позиция. То, как Вам ответили, показывает уважение к разумному человеку, который ошибся. Разумеется, спрашивающий разумен и сам в состоянии разобраться, но "глаз замылен", и нужен небольшой толчок, который Вам и дали. Ответ же, за который от Вас "было бы спасибо", предполагает отвечание ребёнку или идиоту. Вы действительно хотите, чтобы к Вам так относились?
[quote=aleksandr777]
для приема add_data
Спасибо Я использую такой файл
<?php $S1 = $_GET['temperature']; $myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1, 'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S3 = $_GET['temperature1']; $myFile3 = "txt/in-2.txt"; $fh3 = fopen($myFile3, 'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $S4 = $_GET['humidity']; $myFile4 = "txt/in-3.txt"; $fh4 = fopen($myFile4, 'w') or die("can't open file"); fwrite($fh4, $S4); fclose($fh4); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData; ?>вот файл трансфер
для приема add_data
<?php $S1 = $_GET['temperature']; $myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1, 'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S2 = $_GET['humidity']; $myFile2 = "txt/in-3.txt"; $fh2 = fopen($myFile2, 'w') or die("can't open file"); fwrite($fh2, $S2); fclose($fh2); $S3 = $_GET['temperature1']; $myFile3 = "txt/in-2.txt"; $fh3 = fopen($myFile3, 'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData; ?>для вывода на индекс файл hum-1.php
проверте создался ли текстовый файл
ну и в индексе тоже поправить надо....
была ошибка выше поправил на humidity
и в ардуине бы сформировать 1 строку с гет запросом на сервер со всеми параметрами, а не слать 2 отдельных запроса
хотя и с 2 запросами должно работать
add.data <?шphp $S1 = $_GET['temperature']; $myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1, 'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S2 = $_GET['temperature1']; $myFile2 = "txt/in-2.txt"; $fh2 = fopen($myFile2, 'w') or die("can't open file"); fwrite($fh2, $S2); fclose($fh2); $S3= $_GET['humidity']; $myFile3 = "txt/in-3.txt"; $fh3 = fopen($myFile3, 'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData; ?>transfer
index
<html> <head> <title>HOME</title> <style> body { background-image: url(images/smart_fone_house.png); /* Путь к фоновому изображению */ background-color: #c7b39b; /* Цвет фона */ -webkit-background-size: cover; /* Safari 3.1+ и Chrome 4.0+ */ background-size: 100%; }</style> <meta http-equiv="Content-Type" content="text/html; charset=utf-8 <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> <script> function show() { $.ajax({ url: "transfer/temp-1.php", cache: false, success: function(html){ $("#content").html(html); } }); $.ajax({ url: "transfer/temp-2.php", cache: false, success: function(html){ $("#content-1").html(html); } }); $.ajax({ url: "transfer/hum-1.php", cache: false, success: function(html){ $("#content-2").html(html); } }); $.ajax({ url: "transfer/ledstate.php", cache: false, success: function(html){ $("#content-3").html(html); } }); } $(document).ready(function(){ show(); setInterval('show()',20000); }); function AjaxFormRequest(result_id,led,url) { jQuery.ajax({ url: url, type: "POST", dataType: "html", data: jQuery("#"+led).serialize(), }); } </script> </head> <body> <div class="r"> <p class="r1">Температура дома</p> <div class="r2" style="display:inline-block;"> <div class="r3" id="content"></div> <div class="r3"> C<sup>o</sup></div> </div> </div> <div class="r"> <p class="r1">Температура W5100</p> <div class="r2" > <div class="r3" id="content-1"></div> <div class="r3"> C<sup>o</sup></div> </div> </div> <div class="r"> <p class="r1">Влажность</p> <div class="r2" > <div class="r3" id="content-2"></div> </div> </div> <div class="r"> <p class="r1">Remote control</p> </div> <div class="r"> <div class="rl"> <p class="r1">Выключатель</p> <div class="r2" style="font-size:35px" > <form id="led" action="" method="post" > <label><input type="radio" name="status" value="1"> ON </label> <label><input type="radio" name="status" value="0"> OFF </label> <br> <input class="submitButton" type="submit" value="Отправить" onclick="AjaxFormRequest('messegeResult', 'led', 'transfer/led.php')" > </form> </div> </div> <div class="rr"> <p class="r1">Состояние</p> <div class="r2"style="font-size:35px" > <div class="r3" id="content-3"></div> </div> </div> </div> </body> </html>файл создаеться in-3
держи рабочий серв:
add_data
<?php $S1 = $_GET['tem']; $myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1, 'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S2 = $_GET['hum']; $myFile2 = "txt/in-3.txt"; $fh2 = fopen($myFile2, 'w') or die("can't open file"); fwrite($fh2, $S2); fclose($fh2); $S3 = $_GET['tem1']; $myFile3 = "txt/in-2.txt"; $fh3 = fopen($myFile3, 'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData; ?>transfer/hum.php
index
<html> <head> <title>HOME</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> <script> function show() { $.ajax({ url: "transfer/temp-1.php", cache: false, success: function(html){ $("#content").html(html); } }); $.ajax({ url: "transfer/temp-2.php", cache: false, success: function(html){ $("#content-1").html(html); } }); $.ajax({ url: "transfer/hum.php", cache: false, success: function(html){ $("#content-2").html(html); } }); $.ajax({ url: "transfer/ledstate.php", cache: false, success: function(html){ $("#content-3").html(html); } }); } $(document).ready(function(){ show(); setInterval('show()',500); }); function AjaxFormRequest(result_id,led,url) { jQuery.ajax({ url: url, type: "POST", dataType: "html", data: jQuery("#"+led).serialize(), }); } </script> </head> <body> <div class="r"> <p class="r1">Температура РґРѕРјР°</p> <div class="r2" style="display:inline-block;"> <div class="r3" id="content"></div> <div class="r3"> C<sup>o</sup></div> </div> </div> <div class="r"> <p class="r1">Температура W5100</p> <div class="r2" > <div class="r3" id="content-1"></div> <div class="r3"> C<sup>o</sup></div> </div> </div> <div class="r"> <p class="r1">влажность W5100</p> <div class="r2" > <div class="r3" id="content-2"></div> <div class="r3"> C<sup>o</sup></div> </div> </div> <div class="r"> <div class="rl"> <p class="r1">Выключатель</p> <div class="r2" style="font-size:35px" > <form id="led" action="" method="post" > <label><input type="radio" name="status" value="1"> ON </label> <label><input type="radio" name="status" value="0"> OFF </label> <br> <input class="submitButton" type="submit" value="Отправить" onclick="AjaxFormRequest('messegeResult', 'led', 'transfer/led.php')" > </form> </div> </div> <div class="rr"> <p class="r1">Состояние</p> <div class="r2"style="font-size:35px" > <div class="r3" id="content-3"></div> </div> </div> </div> </body> </html>для проверки в браузер http://твой сервер/add_data.php?tem=1&&hum=707=&&tem1=323
aleksandr, Вы мега человек ) Благодарю. Я не совсем понимаю по какому принципу мы присваиваем цифру вот тут $the date ?
не нужна там цифра, по запарке ткнул. заработало?
держи рабочий серв:
для проверки в браузер http://твой сервер/add_data.php?tem=1&&hum=707=&&tem1=323
Выдает "0"
по ссылке выше
в сериале срока не пропала эта строка
<?php $S1 = $_GET['temperature']; $myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1, 'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S2= $_GET['humidity']; $myFile2 = "txt/in-3.txt"; $fh2 = fopen($myFile2, 'w') or die("can't open file"); fwrite($fh2, $S2); fclose($fh2); $S3 = $_GET['temperature1']; $myFile3 = "txt/in-2.txt"; $fh3 = fopen($myFile3, 'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData; ?>http://твой сервер/add_data.php?temperature=1&&humidity=707=&&temperature1=323 а так что выдает
выдает - 1
ну правильно выдает -- выдает значение кнопки (вкл 1, выкл 0), если посмотрите на вебку значение должны измениться на темпер 1, тем2 323 и влажность 707. если все так, то надо коврять дальше код ардуины
залей этот скетч ток сервер поправь
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Adafruit_Sensor.h> #include "DHT.h" #define ONE_WIRE_BUS 2 #define DHTPIN 7 #define DHTTYPE DHT11 // DHT 11 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DHT dht(DHTPIN, DHTTYPE); byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 }; byte i, startRead, buff ; // новая строка byte data_string_num =3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная ) unsigned long int timeConn = millis(); float h; // Значение температуры float t; EthernetClient client; char server[] = "мой сервер"; const int led=5; void setup() { Serial.begin(9600); Ethernet.begin(mac); sensors.begin(); pinMode( led, OUTPUT); digitalWrite(led, LOW); dht.begin(); } void loop() { h = dht.readHumidity(); // Read temperature as Celsius (the default) t = dht.readTemperature(); float hic = dht.computeHeatIndex(t, h, false); sensors.requestTemperatures(); if (client.connect(server, 80)) { client.print( "GET /add_data.php?"); client.print("temperature="); client.print( sensors.getTempCByIndex(0) ); client.print("&"); client.print("&"); client.print("temperature1="); client.print( sensors.getTempCByIndex(1) ); client.print("&"); client.print("&"); client.print("Humidity"); client.print(h); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); delay(900); while (client.available()) { char c = client.read(); Serial.print(c); if (c == '\r') continue; if (c == '\n') { // найден конец строки if ((startRead == 0) && (i == 0)) // если строка пустая - служебный заголовок закончился {startRead = 1; continue;} // начинаем отсчитывать строки данных if (startRead > 0) // очередная строка данных {startRead++; continue;} i=0; continue; } i++; if (startRead == data_string_num) { // если номер строки данных равен заданному if ( c=='1') buff=1; // извлекаем параметр из первого символа строки if ( c=='0') buff=0; startRead++; } } Serial.print("buff= "); Serial.println(buff); client.flush(); client.stop(); delay(100); } if ( buff==1) { digitalWrite (led, HIGH); } else { digitalWrite(led, LOW); } delay(100); }вот сейчас это и пытаюсь делать
переделал код теперь ошибка <br />
<b>Notice</b>: Undefined index: humidity in <b>/storage/ssd2/421/5620421/public_html/add_data.php</b> on line <b>9</b><br />не вылазит
И в созданый файл записались данные но на страничке их нет
Вот такое в мониторе порта
чет не понял
вот сейчас это и пытаюсь делать
переделал код теперь ошибка <br />
<b>Notice</b>: Undefined index: humidity in <b>/storage/ssd2/421/5620421/public_html/add_data.php</b> on line <b>9</b><br />не вылазит
есть ошибка или нет
контроль трезвости не прошел , сплю уже на ходу ))
ошибки в порте нет данные передаються и записываються в блокнот in-3
но на сайте пусто
получилось, даные теперь отображаються , но перестал включатель срабатывать , буфер не меняет свое состояние на 1 при включении. строки не сдвинулись вроди
Если еще актуально, по совету b707 можно сделать еще так:
while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); if (line.indexOf("releON") != -1){buff=1; Serial.println("vkl");} if (line.indexOf("releOFF") != -1){buff=0; Serial.println("otkl");} } } }в файле index.php поменяйте строчки:
задержка должна уйти
Если еще актуально, по совету b707 можно сделать еще так:
while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); if (line.indexOf("releON") != -1){buff=1; Serial.println("vkl");} if (line.indexOf("releOFF") != -1){buff=0; Serial.println("otkl");} } } }в файле index.php поменяйте строчки:
задержка должна уйти
Не работает ( в файле запись происходит но светодиод не загораеться
+ нужно обновить файл трансфер положения он офф
<?php $myFile = "../txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); if ( $theData == 1) { echo " <p class='on'>ON</p>"; } if ( $theData == 0) { echo "<p class='off'>OFF</p>"; } ?>#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include "DHT.h" #define DHTPIN 7 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 }; byte i, startRead, buff ; // новая строка byte data_string_num =3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная ) EthernetClient client; char server[] = "ХХХХХХХ"; // ; имя вашего сервера const int led=5; int h; // Значение температуры int t; void setup() { Serial.begin(9600); Ethernet.begin(mac); sensors.begin(); pinMode(led, OUTPUT); digitalWrite(led, LOW); } void loop() { h = dht.readHumidity(); t = dht.readTemperature(); sensors.requestTemperatures(); if (client.connect(server, 80)) { client.print( "GET /add_data.php?"); client.print("temperature="); client.print( sensors.getTempCByIndex(0) ); client.print("&"); client.print("&"); client.print("temperature1="); client.print( sensors.getTempCByIndex(1) ); client.print("&"); client.print("&"); client.print("humidity="); client.print(h); client.print("&"); client.print("&"); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); Serial.print("hum= "); Serial.println(h); delay(200); while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); if (line.indexOf("releON") != -1){buff=1; Serial.println("vkl");} if (line.indexOf("releOFF") != -1){buff=0; Serial.println("otkl");} } } if ( buff==1) { digitalWrite (led, HIGH); } else { digitalWrite(led, LOW); } delay(100); }С таким кодом в порте только буфер и тоже его значение не меняеться при переключении
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Adafruit_Sensor.h> #include "DHT.h" #define ONE_WIRE_BUS 2 #define DHTPIN 7 #define DHTTYPE DHT11 // DHT 11 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DHT dht(DHTPIN, DHTTYPE); byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 }; byte i, startRead, buff ; // новая строка byte data_string_num=3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная ) unsigned long int timeConn = millis(); float h; // Значение температуры float t; EthernetClient client; char server[] = "ХХХХХХХХ"; const int led=5; void setup() { Serial.begin(9600); Ethernet.begin(mac); sensors.begin(); pinMode( led, OUTPUT); digitalWrite(led, LOW); dht.begin(); } void loop() { h = dht.readHumidity(); // Read temperature as Celsius (the default) t = dht.readTemperature(); float hic = dht.computeHeatIndex(t, h, false); sensors.requestTemperatures(); if (client.connect(server, 80)) { client.print( "GET /add_data.php?"); client.print("temperature="); client.print( sensors.getTempCByIndex(0) ); client.print("&"); client.print("&"); client.print("temperature1="); client.print( sensors.getTempCByIndex(1) ); client.print("&"); client.print("&"); client.print("Humidity"); client.print(h); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); delay(900); while (client.available()) { char c = client.read(); Serial.print(c); if (c == '\r') continue; if (c == '\n') { // найден конец строки if ((startRead == 0) && (i == 0)) // если строка пустая - служебный заголовок закончился {startRead = 1; continue;} // начинаем отсчитывать строки данных if (startRead > 0) // очередная строка данных {startRead++; continue;} i=0; continue; } i++; if (startRead == data_string_num) { // если номер строки данных равен заданному if ( c=='1') buff=1; // извлекаем параметр из первого символа строки if ( c=='0') buff=0; startRead++; } } Serial.print("buff= "); Serial.println(buff); client.flush(); client.stop(); delay(100); } if ( buff==1) { digitalWrite (led, HIGH); } else { digitalWrite(led, LOW); } delay(100); }71 строчку удали,
073while(client.available())074{075charc = client.read();076Serial.print(c);}}}
077078И смотри что получаешь в ответ...
Зачем вы делаете delay() после client.stop()?
delay() нужен в лучшем случае после последнего закидывания данных перед стопом, чтобы был шанс их передать. И flush() в Ethernet.h ровным счетом ничего не делает. Абсолютно. На самом нижнем уровне в функции находится одна закомментированная строчка "TODO".
И вообще - вы с этим дилеями в лупе имеете неиллюзорный шанс отреджектить половину входящих коннектов.
073while(client.available())074{075charc = client.read();076Serial.print(c);}}}
077078удалил delay
код ардуины
while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); if (line.indexOf("releON") != -1){buff=1;}// Serial.println("vkl");} if (line.indexOf("releOFF") != -1){buff=0;}// Serial.println("otkl");} } } if ( buff==1) { digitalWrite (led, HIGH); Serial.println("vkl"); } else { digitalWrite(led, LOW); Serial.println("otkl"); } }Я хз чем еще помоч....
переписал заново код ардуины и перезалил файлы на серв и все заработало
Добавил еще одну кнопку на сервере но не могу до конца понять как мне в коде ардуины написать , в мониторе порта результат нажатия второй кнопки отображаеться сразу следующим символом после первой
Понимаю возможно тупо написал но я только учусь
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include "DHT.h" #define DHTPIN 7 #define DHTTYPE DHT11 #define ONE_WIRE_BUS 2 DHT dht(DHTPIN, DHTTYPE); OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 }; byte i, startRead, buff1 ; // новая строка byte data_string_num =3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная ) byte a, startRead2, buff2; byte data_string_num2 =3; EthernetClient client; char server[] = "KKKKKK ;//имя вашего сервера const int led=5; const int led1=4; int h; // Значение температуры int t; void setup() { Serial.begin(9600); Ethernet.begin(mac); sensors.begin(); pinMode( led, OUTPUT); digitalWrite(led, LOW); pinMode( led1, OUTPUT); digitalWrite(led1, LOW); } void loop() { h = dht.readHumidity(); t = dht.readTemperature(); sensors.requestTemperatures(); if (client.connect(server, 80)) { client.print( "GET /add_data.php?"); client.print("temperature="); client.print( sensors.getTempCByIndex(0) ); client.print("&"); client.print("&"); client.print("temperature1="); client.print( sensors.getTempCByIndex(1) ); client.print("&"); client.print("&"); client.print("humidity="); client.print(h); client.print("&"); client.print("&"); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); Serial.print("hum= "); Serial.println(h); delay(200); while (client.available()) { char c = client.read(); Serial.print(c); if (c == '\r') continue; if (c == '\n') { // найден конец строки if ((startRead == 0) && (i == 0)) // если строка пустая - служебный заголовок закончился {startRead = 1; continue;} // начинаем отсчитывать строки данных if (startRead > 0) // очередная строка данных {startRead++; continue;} i=0; continue; } i++; if (startRead == data_string_num) { // если номер строки данных равен заданному if ( c=='1') buff1=1; // извлекаем параметр из первого символа строки if ( c=='0') buff1=0; startRead++; } } Serial.print("buff1 = "); Serial.println(buff1); client.stop(); client.flush(); delay(1000); } if ( buff1==1) { digitalWrite (led, HIGH); } else { digitalWrite(led, LOW); } while (client.available()) { char c = client.read(); Serial.print(c); if (c == '\r') continue; if (c == '\n') { // найден конец строки if ((startRead2 == 0) && (a == 0)) // если строка пустая - служебный заголовок закончился {startRead2 = 1; continue;} // начинаем отсчитывать строки данных if (startRead2 > 0) // очередная строка данных {startRead2++; continue;} a=0; continue; } a++; if (startRead2 == data_string_num2) { // если номер строки данных равен заданному if ( c=='2') buff2=2; // извлекаем параметр со второго символа строки if ( c=='0') buff2=0; startRead2++; } } Serial.print("buff2 = "); Serial.println(buff2); client.stop(); client.flush(); delay(100); if ( buff2==1) { digitalWrite (led1, HIGH); } else { digitalWrite(led1, LOW); } delay(100); }buff2 не принимает значение 1
Уважаемые форумчане, всех с наступающим Новым годом! Пусть пусть он будет лучше уходящего !
Ранее уже писал в этой ветке по своей проблеме и мне помогли тогда за что и большое спаибо.
Тогда подзабросил этот проект т.к. небыло свободного времени, вот решил вернуться все весело клацает данные с датчиков передаються.
Решил задействовать в пилотной експлуатации и столкнулся с такой проблемой, состояние реле самопроизвольно меняеться на высокий уровень и больше arduino не реагирует на кнопки в браузере. Помагает только рестарт.
Закономерности когда она перестает реагировать не наблюдаю, как правило через час может перестать а когда и больше.
Заметил что только при длительной работе перестает выводиться служебный заголовок, и насколько понял после этого перестает ардуино реагировать
Хотя при проверке реакции нули (последняя строка) успешно меняют свой статус на 1 1 (в зависимости какое положение тумблера на страничке, две кнопки на страничке)
Notice: Undefined index: temperature in /storage/ssd2/421/5620421/public_html/add_data.php on line 3
Notice: Undefined index: humidity in /storage/ssd2/421/5620421/public_html/add_data.php on line 9
Notice: Undefined index: temperature1 in /storage/ssd2/421/5620421/public_html/add_data.php on line 15
00
Прошу по возможности подсказать почему дуня отказывается реагировать на запросы ?
Заранее всем благодарен
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include "DHT.h" #define DHTPIN 7 #define DHTTYPE DHT11 #define ONE_WIRE_BUS 17 DHT dht(DHTPIN, DHTTYPE); OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 }; byte i, startRead, buff ; // новая строка byte data_string_num =3; // номер строки данных, откуда извлекается ответ сервера (новая строка переменная ) EthernetClient client; char server[] = "ХХХХХХХХХХХХХХХХХХ.com" ; const int led=5; int h; // Значение температуры int t; void setup() { Serial.begin(9600); Ethernet.begin(mac); sensors.begin(); pinMode( led, OUTPUT); digitalWrite(led, LOW); } void loop() { h = dht.readHumidity(); t = dht.readTemperature(); sensors.requestTemperatures(); if (client.connect(server, 80)) { client.print( "GET /add_data.php?"); client.print("temperature="); client.print( sensors.getTempCByIndex(0) ); client.print("&"); client.print("&"); client.print("temperature1="); client.print( sensors.getTempCByIndex(1) ); client.print("&"); client.print("&"); client.print("humidity="); client.print(h); client.print("&"); client.print("&"); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); Serial.print("hum= "); Serial.println(h); delay(200); while (client.available()) { char c = client.read(); Serial.print(c); if (c == '\r') continue; if (c == '\n') { // найден конец строки if ((startRead == 0) && (i == 0)) // если строка пустая - служебный заголовок закончился {startRead = 1; continue;} // начинаем отсчитывать строки данных if (startRead > 0) // очередная строка данных {startRead++; continue;} i=0; continue; } i++; if (startRead == data_string_num) { // если номер строки данных равен заданному if ( c=='1') buff=1; // извлекаем параметр из первого символа строки if ( c=='0') buff=0; startRead++; } } Serial.print("buff = "); Serial.println(buff); client.stop(); client.flush(); delay(1000); } if ( buff==1) { digitalWrite (led, HIGH); } else { digitalWrite(led, LOW); } delay(100); }В дополнение в мониторе порта наблюдаю следующее:
Когда все ок идет такого вормата вывод
Когда ардуина зависает значение buff становится 0 и больше не реагирует на нажатие кнопки на странице
Изменния происходя только в строке которая обведена краснім при єтом буфер больше не меняет свое значение. до передергивания
99% - проблемы с питанием. Здесь по форуму поиском поройтесь, тем много было.
Спасибо, за подсказку, у меня ардуино мега 2560 и шилд питаються от юсб входа импульсной зарядкой от телефона на 700ма. Попробую запитать от другого разьема 7-12вольт. По результатам отпишусь
Запитал плату мега 2560 и шилд от внешнего блока 12вольт но результата не получил, наоборот еще больше глюков ( Буду читаь форум и попробую может золотую середину 7 вольт
Схема чего именно, блока питания или включения всей схемы ? Блок питания импульсный 12 вольт
Так схема-то ладно. В коде все завязано на переменную startRead, которая нигде не нулится после первого коннекта (во всяком случае я не вижу).
Спасибо за комментарий, буду смотреть, я можно сказать ” чайник " в этом деле, потому пока не совсем понимаю занулить, всмысле флеш если прошел первый конект?
В смысле - значение переменной. Но, если вы не понимаете что это за переменная и зачем она...
if(digitalRead(5)==HIGH&&buff==0) // и перемення buff равна 0 , то ... { digitalWrite(5,!digitalRead(5)); led=1; } if(digitalRead(5)==LOW&&buff==1) //и buff равна - 1 ,то ... { led=0;//обнуляем переменную led }Типа такого ? Или то чтоя написал это бред? Спасибо за подсказки