Прошу помощи новичку по датчику DHT11

Andrei83
Offline
Зарегистрирован: 25.03.2014
Добрый день всем! Решил попробовать подключить датчик DHT11 к Ардуино и передать с него данные с помощью Ethernet шилда на комп, но вот беда - не получилось, поэтому обращаюсь с просьбой помочь "Новичку".
Попробую объяснить где застрял: Датчик подключил, скетч залил, в мониторе порта получил строку следующего вида: GET dht/dhts.php?h=48&t=24 далее куча вопросов: Что такое IP адрес сервера который будет собирать статистику, где его взять (в сетях не разбераюсь)? Я правильно понимаю, если у меня стоит Apache, то это 127.0.0.1?  Далее в папке www создал папку с именем dht, через браузер захожу в нее так: localhost/dht В этой папке лежит файл dhts.php следующего содержания:
 
<?php

if (isset($_GET['t'])) {$thermometerid=$_GET['t'];}
if (isset($_GET['h'])) {$value=$_GET['h'];}

if (!isset($thermometerid) && !isset($value))
{
echo "Переменные не существуют";
}
echo $thermometerid;
echo $value;
?>
Когда его запускаю localhost/dht/dhts.php то получаю строку "Переменные не существуют".
Вот не могу понять, GET запрос формируется, как видно в мониторе портов, но в php файл не передается.
Помогите пожалуйста разобраться
Скетч:
#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
#include <string.h>
#include <Wire.h>

//************************************************************

byte mac[] = { 0x50, 0xA2, 0xDA, 0x00, 0x5C, 0xFB };
byte ip[] = { 192, 168, 0, 103 };
//IP адрес сервера который будет собирать статистику
byte server[] = { 127, 0, 0, 1 };
char buffer[256];
EthernetClient client;

//************************ DHT22 ****************************

//Контакт к которому подключен датчик температуры и влажности
#define  DHTPIN 13 
#define DHTTYPE DHT11   // для DHT 11
DHT dht(DHTPIN, DHTTYPE);
int volt=12;

//***********************************************************

void setup()
{    
  Ethernet.begin(mac, ip);
   Serial.begin(9600);
   pinMode(volt, OUTPUT);
   digitalWrite(volt, HIGH);
   
  dht.begin();
  delay(1000);
 }

void loop()
{

//************************ DHT22 ****************************
int h = dht.readHumidity();
int t = dht.readTemperature();
//***********************************************************

Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");

String msg = "GET dht/dhts.php?h="+ String(h) + "&t="+String(t);

// Для отладки включим отправку данных в COM порт
Serial.println(msg);
    
EthernetClient connect();
if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println(msg);
    client.println();
  } else {
    Serial.println("connection failed");
  }

rclient.stop();

//Данные будут отправляться каждые 5сек.
 delay (5000);
 
}

Да, еще в мониторе портов появляется строка "connection failed", тоесть нет подключения client.connect(server, 80).

Помогите пожалуйста разобраться...

inspiritus
Offline
Зарегистрирован: 17.12.2012

Я бы запускал на стороне ардуины не клиента, а сервер, который по запросу скрипта на php от компа отдавал бы строку. На компе линух с лампом. Скрипт запускается компом по крону с необходимой периодичностью, скрипт складывает в мискл. На компе работает апач, который в любой браузер отдает страницу, сформированную традиционно с применением данных из мискла.

Andrei83
Offline
Зарегистрирован: 25.03.2014

Я совсем новичек, немного знаю html, php и mysql, пытаюсь разобраться с Arduino. Да, правда, читал что именно так наиболее правильно, но не нашел примеров на которые смог бы опереться, если есть возможность поэтапно разъяснить, буду очень благодарен. А пока пытаюсь протестировать что нашел и де ошибка - непонятно

Andrei83
Offline
Зарегистрирован: 25.03.2014

По рекомендациям в cmd запустил команду ipconfig получил:

Ipv4 192168.0.100

Маска 255.255.255.0

Основной шлюз 192.168.0.1 (это роутер)

Такие настройки у меня забиты в свойствах сетевой.

Поэтому зизменил IP сервера с 127.0.0.1 на 192.168.0.100 но ничего не изменилось, строка "connection failed" в мониторе порта не пропала

inspiritus
Offline
Зарегистрирован: 17.12.2012

Как я понимаю проблема в общей логике.

Арда, как клиент пытается приконнектиться к апачу, по предположим правильному ip на 80 порт. А апач слушает этот порт? И если слушает, то что делает в ответ на поступающие в случае коннекта данные?

Что делает php скрипт,  и от какого ip пытается получить данные непонятно.

Andrei83
Offline
Зарегистрирован: 25.03.2014

inspiritus пишет:

Как я понимаю проблема в общей логике.

Полностью согласен.

Именно с этим и пытаюсь разобраться, реализовуя небольшие примеры. Пример взят отсюда http://smartliving.ru/forum/viewtopic.php?f=8&t=1412&start=10

Здесь данны записываются в базу, но я пока хочу их увидеть, поэтому изменил php и вставил строки вывода данных:

echo $thermometerid;
echo $value;

а по поводу  Цитата: А апач слушает этот порт?

А как это узнать, слушает или нет? Я установил Open Server и никаких настроек в апаче не менял

leshak
Offline
Зарегистрирован: 29.09.2011

Не, ну а как можно "писать клиент-серверное решение" и при этом предварительно не разобравшись "что такое IP" и т.п.
Ну ну понятно, что написать "помогите новичку" и "в сетях не разбираюсь" - это проще.  Не разбираетесь, так разберитесь. Хотя-бы поверхностно. ЧТо такое сервер, что такое клиент, что такое IP, как такое протокол http, заголовки,DNS,MAC и т.п. Благо в интернете мануалов и учебников - навалом. Откуда, как вы думаете "те кто знают" что-то знают? А вот так: гуглили, искали, читали разбирались.

Тем более что тут не нужные глубокие "сетевые знания". Достаточно поверхностно-домашне-админские. 

Извинете, это больше похоже не на "помогите мне", а "сделайте для меня".

Ну не поверю, что гугл не дает узнать что такое localhost и 127.0.0.1

Кстати непонимание этого и есть причина ваших проблем. Как по вашему ардуина должна узнать на какой именно компьютер нужно слать данные? И в интернете миллиарды...  На каком компьютере крутится ваш апач с dhts.php?

Попробуйте, для начала, достучатся браузером до свогое dhts.php, только с ДРУГОГО компьютера. Не с того где у вас апач.

Кстати, попробуйте за одно узнать что это за магическая цифра 80-ть в client.connect(server, 80). Почему 80-т, а не 95?

Почему "GET dht/.....", а не скажем "SEND dht/..."?

Вообщем без хотя-бы самых базовых понятий о том как устроены TCP/IP сети, и протокол HTTP - не возможно, ни вопрос задать, ни ответ понять. Хотя-бы понятия разобрать, "словарик предметной области".

Иначе можно дать ответ: напишите правильный адресс сервера куда вы шлете данные.... как минимум. возможно и другие причины. Но чем вам такой ответ поможет?

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Вначале разберитесь что у вас всё реботает без ардуины - вдруг там фаервол или роутер отключил обмен между портами, или апач только локальный адрес слушает.

Andrei83
Offline
Зарегистрирован: 25.03.2014

leshak пишет:

Не, ну а как можно "писать клиент-серверное решение" и при этом предварительно не разобравшись "что такое IP" и т.п.
Ну ну понятно, что написать "помогите новичку" и "в сетях не разбираюсь" - это проще.  Не разбираетесь, так разберитесь. Хотя-бы поверхностно. ЧТо такое сервер, что такое клиент, что такое IP, как такое протокол http, заголовки,DNS,MAC и т.п. Благо в интернете мануалов и учебников - навалом. Откуда, как вы думаете "те кто знают" что-то знают? А вот так: гуглили, искали, читали разбирались.

Тем более что тут не нужные глубокие "сетевые знания". Достаточно поверхностно-домашне-админские. 

Извинете, это больше похоже не на "помогите мне", а "сделайте для меня".

Ну не поверю, что гугл не дает узнать что такое localhost и 127.0.0.1

Кстати непонимание этого и есть причина ваших проблем. Как по вашему ардуина должна узнать на какой именно компьютер нужно слать данные? И в интернете миллиарды...  На каком компьютере крутится ваш апач с dhts.php?

Попробуйте, для начала, достучатся браузером до свогое dhts.php, только с ДРУГОГО компьютера. Не с того где у вас апач.

Кстати, попробуйте за одно узнать что это за магическая цифра 80-ть в client.connect(server, 80). Почему 80-т, а не 95?

Почему "GET dht/.....", а не скажем "SEND dht/..."?

Вообщем без хотя-бы самых базовых понятий о том как устроены TCP/IP сети, и протокол HTTP - не возможно, ни вопрос задать, ни ответ понять. Хотя-бы понятия разобрать, "словарик предметной области".

Иначе можно дать ответ: напишите правильный адресс сервера куда вы шлете данные.... как минимум. возможно и другие причины. Но чем вам такой ответ поможет?

 

С некоторыми высказываниями согласен, но неполностью, почему 80 порт я понимаю, потому как в httpd.config прописан именно он и с методами GET и POST знаком и IP 127.0.0.1 это на самом деле практически одно и тоже что и IP компа, localhost - это витруальный хост IP 127.0.0.1. Базовые понятия есть, на php написал не один сайт (средней сложности). Но вот с внешними устройствами не работал, вот в этом и проблема.

И действительно с другого компа в этойже сети (ноут по wifi) я открыть в браузере свой php не могу, ну не могу я понять как к нему достучаться.

И прежде чем просить помощи на форуме я пвтался, да и пытаюсь решить проблему самостоятельно с помощью гугла. Нет желания помочь, я ведь не требую...

inspiritus
Offline
Зарегистрирован: 17.12.2012

Вот как можно поднять web сервер на арде http://www.freeduino.ru/arduino/sample_WEB.html там все очень подробно и с комментами.

теперь осталось только обращаться к нему не браузером, а пхп-скриптом, аналогичным к примеру скрипту, читающему онлайновую инфу для Вашего сайла с другого сайта, например погодного...

если не сможете скрипт осилить, я через пару дней кину пример скрипта, ловящего строку из подобного мк-web-server. 

Если осилите кидайте сюда, посмотрим. 

leshak
Offline
Зарегистрирован: 29.09.2011

>, почему 80 порт я понимаю, потому как в httpd.config прописан именно 

А почему прописан именно он? Почему не 8080?

Я вот, когда в браузере набираю какой-то адресс, вроде никаких цифр типа 80-ть, не набираю и при этом все работает.

Andrei83 пишет:

 IP 127.0.0.1 это на самом деле практически одно и тоже что и IP компа,

Ну так ключевой вопрос КАКОГО КОМПЬЮТЕРА? Вашего, моего?  Стационарного? Настольного?

Предположим у вас дома есть три компьютера:

1. Компьютер А.
2. Компьютер Б.
3. Компьютер С.

Теперь, на компьтере Б. мы делаем, с помощью браузера запрос на http://127.0.0.1/some.php

На какой компьютер отправится этот запрос? Кто дожен его обработать? 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Гыыы ... Уполномоченная организация обнаружила по ip 127.0.0.1 море запрещенной информации и подала в соответствующие органы требование заблокировать это по ip...

leshak
Offline
Зарегистрирован: 29.09.2011

inspiritus пишет:

Гыыы ... Уполномоченная организация обнаружила по ip 127.0.0.1 море запрещенной информации и подала в соответствующие органы требование заблокировать это по ip...

Вообщем-то по этому поводу был очень старый анекдот:

ОНО: народ, я новый нюк нашел, ща всех поубиваю!!!
ОНО: дайте ай-пи какого-нить лоха!!!
Кто-то: 127.0.0.1
ОНО: пасиба!
ОНО: щас он подохнет
* ОНО вышло из чата

Andrei83
Offline
Зарегистрирован: 25.03.2014

leshak пишет:

>, почему 80 порт я понимаю, потому как в httpd.config прописан именно 

А почему прописан именно он? Почему не 8080?

Я вот, когда в браузере набираю какой-то адресс, вроде никаких цифр типа 80-ть, не набираю и при этом все работает.

Andrei83 пишет:

 IP 127.0.0.1 это на самом деле практически одно и тоже что и IP компа,

Ну так ключевой вопрос КАКОГО КОМПЬЮТЕРА? Вашего, моего?  Стационарного? Настольного?

Предположим у вас дома есть три компьютера:

1. Компьютер А.
2. Компьютер Б.
3. Компьютер С.

Теперь, на компьтере Б. мы делаем, с помощью браузера запрос на http://127.0.0.1/some.php

На какой компьютер отправится этот запрос? Кто дожен его обработать? 

127.0.0.1 - это другими словами IP текущего компа 

Да, этого я не понимаю!( поэтому и написал что в сетях не разбираюсь. Порт вроде нужен чтобы зайти на комп из вне, если я не ошибаюсь

На компе А IP 192.168.0.100 На компе Б в браузере и пытаюсь достучаться к php, который на компе А, таким способом: 192.168.0.100:80/dht/dhts.php     , но ничего не выходит. Получается что-то блокирует? Брендмаузер выключил, Avast остановил, остается только роутер?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Достучаться можно к серверу, который на своём внешнем (не локалхост)  ip адресе слушает порт.

К php скрипту , однократно запускаемому в интерпретаторе достучаться нельзя, достучаться куда-либо можно им.

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

На компе А IP 192.168.0.100 На компе Б в браузере и пытаюсь достучаться к php, который на компе А, таким способом: 192.168.0.100:80/dht/dhts.php  

Ну вот это больше похоже на правду.... единственно что :80, добавлять не обязательно. так как это стандартный порт для http. Если вы его не указали, то браузер сам его "додумает". И именно 80. Потому что так прописано в стандартах.

А вот когда вы пишите код на ардуино, то тут уже "помошника" в виде браузера нет. Поэтому нужно самому озаботитися и указать нужный порт (то есть 80).

Ладно, это теоретическое отступление.

Теперь осталось выяснить, почему вы решили что ваш компьютер А, имеет адресс 192.168.0.100

Особенно, в свете того что фраза "Поэтому зизменил IP сервера с 127.0.0.1 на 192.168.0.100" выглядит очень подозрительно.

Если перевести ее "бытовой язык", то она звучит: я сменил адресс своей квартиры с ЭТА-КВАРТИРА (127.0.0.1) на арресс Улица XXX, кв. YYY  (при этом физически вы остались там же где и были).

Любой компьютер имет адресс 127.0.0.1, это синоним слова ЭТОТ компьютер. Используется когда вам нужно обратится с комьютера на него же самого. Поэтому как вы смогли это поменять - существенная загадка.

Кстати, а у вас интернет, после этого, на этом компе нормально работает?

Ладно. Возвращаемся, к баранам. Где и как вы "сменили IP сервера"?

Далее, запускаем cmd. И набираем

ping 192.168.0.100

Делаем это и на компе A и на компе Б. Сообщаем результаты.

P.S. Заодно гуглим что такое ping, что такое traceroute. Читаем хелм по ним. Пытаемся играть с параметрами...

P.S. Так же гуглим и читаем "как узнать ip компьютера в сети". Можно первую же ссылку.

leshak
Offline
Зарегистрирован: 29.09.2011

inspiritus пишет:

К php скрипту , однократно запускаемому в интерпретаторе достучаться нельзя, достучаться куда-либо можно им.

Выше писалось, что имеется апач. И через localhost достучатся к скрипту получается.

Andrei83
Offline
Зарегистрирован: 25.03.2014

получается На компе Б нельзя в браузере открыть php файл?

Проверил на сайте http://2ip.ru    80-й порт - пишет закрыт. Это значит, что этот порт не доступен, тоесть его что-то блокирует? 

Andrei83
Offline
Зарегистрирован: 25.03.2014

Выражение изменил IP сервера означает изменил IP сервера в скетче для ардуино

комп А 192.168.0.100

комп Б 192.168.0.101

пингуются оба и с компа А и с компа Б

ipconfig на компе А показывает:

Ipv4 192.168.0.100

Маска  255.255.255.0

Основной шлюз   192.168.0.1 (это роутер)

Именно такие настройки статически забиты в свойствах сетевой на компе А.

На компе Б все один в один только IP 192.168.0.101

На компе А установлен Open server с Apache, php и mysql

На компе Б отдельно поднимал Apache, php и mysql

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

получается На компе Б нельзя в браузере открыть php файл?

php-файл - конечно нет. Когда вы даете в браузере даете "запрос". То апач его принимает, находит php файл, ЗАПУСКАЕТ его. И РЕЗУЛЬТАТ его работы отдает браузеру. Сам файл, его исходный код, естественно никому за пределами компьютера не виден (и не должен быть виден).

Andrei83 пишет:

Проверил на сайте http://2ip.ru    80-й порт - пишет закрыт. 

И слава богу. Это вы узнали ВНЕШНИЙ адресс своего роутера. Он вам потребуется если будете пытатся достучатся арудиной находящийся в оффисе на домашний комп.

А вам нужно узнать "внутрений адресс".

Тут аналогия примерно такая: Есть ведомственная АТС. У нее есть общий городской номер (это внешний IP). Позвонив на него вы попадаете на злобную телефонистку (роутер), которая старается послать вас нафиг (если вашего звонка не ждут). А есть внутрени телефонные номера. И абоненты внутри здания могут звонить друг-другу, просто зная внутрений номер. К ним телефонистка - лояльна. Соединяет без вопросов. Просто говоришь "кто тебе нужен". Но опять-таки лояльная она только для звонков поступивших "с внутрених адресов".

"На глаз", внутрении адреса опознаются просто: Если адресс начинается на 192.168 - это внутрений.
Если на что-то другое - это внешний.

Вам нужен внутрений.

Кстати я вам говорил, что читать желательно первую ссылку, а вы взяли вторую :) . Как узнать ip адрес компьютера - Программистан - Narod.ru

 

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

Выражение изменил IP сервера означает изменил IP сервера в скетче для ардуино

Вы простите, я не занудствую, но не могли бы показать измененную строчку? Просто что-бы убедится что поменяли там где нужно.

Andrei83 пишет:

комп А 192.168.0.100

комп Б 192.168.0.101

пингуются оба и с компа А и с компа Б

ipconfig на компе А показывает:

Ipv4 192.168.0.100

Маска  255.255.255.0

Основной шлюз   192.168.0.1 (это роутер)

Именно такие настройки статически забиты в свойствах сетевой на компе А.

На компе Б все один в один только IP 192.168.0.101

На компе А установлен Open server с Apache, php и mysql

На компе Б отдельно поднимал Apache, php и mysql

Чудно, исчерпывающие и на первый глаз правильно.

Теперь давайте убедимся, что правильно вас понял.

На компе A, ссылка http://localhost/dht/dhts.php открывается нормально, а на компе Б, ссылка http://192.168.0.100/dht/dhts.php не открывается. Верно?

leshak
Offline
Зарегистрирован: 29.09.2011

И еще, такое подозрение возникло. 

Когда с компа Б, вы проверяете доступность скрипта.

Вы сразу http://192.168.0.100/dhts/dhts.php открываете, или вначале пытаетесь открыть папку http://192.168.0.100/dhts и потом надеятесь найти файлы dhts.php и ткнуть в него?

Andrei83
Offline
Зарегистрирован: 25.03.2014

1. По поводу занудства, я наоборот благодарен за помощь.

2. По поводу где изменил IP: в скетче для Arduino была строка "byte server[] = { 127, 0, 0, 1 };"  я ее изменил на "byte server[] = { 192, 168, 0, 100 };"

3. По поводу открытия скрипта, все верно - На компе A, ссылка http://localhost/dht/dhts.php открывается нормально, а на компе Б, ссылкаhttp://192.168.0.100/dht/dhts.php не открывается

Andrei83
Offline
Зарегистрирован: 25.03.2014

leshak пишет:

И еще, такое подозрение возникло. 

Когда с компа Б, вы проверяете доступность скрипта.

Вы сразу http://192.168.0.100/dhts/dhts.php открываете, или вначале пытаетесь открыть папку http://192.168.0.100/dhts и потом надеятесь найти файлы dhts.php и ткнуть в него?

Я напрямую обращаюсь к dhts.php дабы увидеть результат его выполнения. Вот так:   http://192.168.0.100/dhts/dhts.php

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

3. По поводу открытия скрипта, все верно - На компе A, ссылка http://localhost/dht/dhts.php открывается нормально, а на компе Б, ссылкаhttp://192.168.0.100/dht/dhts.php не открывается

Тут редактор немного портит ссылки. Убедитесь, что во второй ссылке, котора 192.168.0.100/dht/dhts.php

Не потерялось имя папки dht. А то при редактировании ее видно, а как запостишь - исчезает.

Потом проверте, как работает эта же ссылка, 192.168.... с компа А. На котором через localhost работает.

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

Я напрямую обращаюсь к dhts.php дабы увидеть результат его выполнения. Вот так:   http://192.168.0.100/dhts/dhts.php

Ага. Чудно. А если открыть эту ссылку на компе A?

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

 

2. По поводу где изменил IP: в скетче для Arduino была строка "byte server[] = { 127, 0, 0, 1 };"  я ее изменил на "byte server[] = { 192, 168, 0, 100 };"

Да, вроде все верно. Но пока мы не смогли достучатся "с компа на комп", мучать арудину особо смысла нет.

Andrei83
Offline
Зарегистрирован: 25.03.2014

На компе А где IP 192.168.0.100

ссылка  localhost/dht/dhts.php  работает, а вот

192.168.0.100/dht/dhts.ph   не работает

Andrei83
Offline
Зарегистрирован: 25.03.2014

мне самому кажется, что какаято фигня происходит, по идее все правильно делаю, но ничего не работает, склоняюсь к мысли что что-то гдето блокирует

Andrei83
Offline
Зарегистрирован: 25.03.2014

набираю localhost - получаю стартовую страницу "Добро пожаловать в Open server", а набираю 192.168.0.100 показывает что Google Chrome не может открыть данную страницу

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

набираю localhost - получаю стартовую страницу "Добро пожаловать в Open server", а набираю 192.168.0.100 показывает что Google Chrome не может открыть данную страницу

Это на компе A? Верно? У которого Ipconfig конфиг говорит что он 192.168.0.100 правильно?

Перепроверте, еще раз, что вы на ЭТОМ компе действительно отключили файервол....

Andrei83
Offline
Зарегистрирован: 25.03.2014

все верно. Брендмаузер - вообще вырубил службу и аваст отключил

Видимо Open server кривой, пересел за комп Б на нем Apache поднимал вручную, он работает по wifi, его IP 192.168.0.101 

Итак на нем: localhost/dht/dhts.php - работает

                     192.168.0.101/dht/dhts.php - работает

И с компа А набираю    192.168.0.101/dht/dhts.php - работает

тоесть удаленно с компа А захожу на комп Б

leshak
Offline
Зарегистрирован: 29.09.2011

И еще, ищите в настройках свого Open Server адресс сервера. Там должно быть что-то типа DropDown и в нем будет ваш 192.168.0.100

Вообщем ему самуму еще нужно сказать "обращение к какому IP-шнику нужно слушать". В доке

http://open-server.ru/docs.html

Косвенно упоминается, что такая настройка существует:

бедитесь что IP адрес, заданный в настройках, существует (кроме [*]). Так же убедитесь что все другие настройки программы корректны."

Вообщем найдите эту настройку, и впришите туда свой IP. Или зведочку попробуйте. Подозреваю что там сейчас стоит старый IP, который был при установке.

 

 

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

Ну значит у вас есть два варианта:

1. Донастраивать Open Server
2. Забить на компьютер А, и мучать апач на комьютере Б.

Что выбираете?

Andrei83
Offline
Зарегистрирован: 25.03.2014

с Open server разберусь позже, Будем мучать комп Б

leshak
Offline
Зарегистрирован: 29.09.2011

Andrei83 пишет:

с Open server разберусь позже,

Кстати скайп может пакостить. Если стартовал раньше сервера, может захватить 80-тый порт. У него в настройках можно снять галку "использовать 80 и 443 порты".

Andrei83 пишет:

Будем мучать комп Б

Ну тогда скопируйте на него свой .php скрипт.

Не забудете, в скетче опять сменить IP-шник сервера.

Если не заработает. то поменяйте 

String msg = "GET dht/dhts.php?h="+ String(h) + "&t="+String(t);

На

String msg = "GET /dht/dhts.php?h="+ String(h) + "&t="+String(t);

P.S. Сорри, я на сегодня наверное уже все. Домашние уже шипят :)

Andrei83
Offline
Зарегистрирован: 25.03.2014

ок, попробую, отпишусь. Огромное спасибо за помощь!

Andrei83
Offline
Зарегистрирован: 25.03.2014

Пока дело не в формированиее GET запроса, я сделал проверку подключения к серверу

if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println(msg);
    client.println();
  } else {
    Serial.println("connection failed");
  }

И вот попробовал и получил фразу "connection failed"

leshak
Offline
Зарегистрирован: 29.09.2011

А если выкинуть все что отностися к DHT? И програмну и особенно, железную часть?

Arduino - Ethernet

Arduino communicates with the shield using the SPI bus. This is on digital pins 11, 12, and 13

#define  DHTPIN 13

 

Andrei83
Offline
Зарегистрирован: 25.03.2014

выкинул, вот что оставил:

#include <Ethernet.h>
#include <SPI.h>
#include <string.h>

//************************************************************

byte mac[] = { 0x50, 0xA2, 0xDA, 0x00, 0x5C, 0xFB };
byte ip[] = { 192, 168, 0, 103 };
//IP адрес сервера который будет собирать статистику
byte server[] = { 192, 168, 0, 101 };
char buffer[256];
EthernetClient client;


void setup()
{    
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
 }

void loop()
{ 
//EthernetClient connect();
if (client.connect(server, 80)) {
    Serial.println("connected");
  } else {
    Serial.println("connection failed");
  }

client.stop();
 delay (5000);
 
}

Получил "connection failed"

Andrei83
Offline
Зарегистрирован: 25.03.2014

Есть, получил фразу "connected". В предыдущем коде раскомментировал //EthernetClient connect(); Видать да, DHT на 12 и 13 пинах мешал.

Еще раз огромное спасибо

Andrei83
Offline
Зарегистрирован: 25.03.2014

Переподключил DHT на другие пины и в мониторе портов получил строки:

GET /dht/dhts.php?h=48&t=24

connected

Тоесть есть соединение с сервером и есть сформированный GET запрос, но php его не видит, попытка прочитать значения переменных при запуске localhost/dht/dhts.php привела к фразе "Переменные не существуют"

Скрипт dhts.php

<?php
if (isset($_GET['t'])) {$thermometerid=$_GET['t'];}
if (isset($_GET['h'])) {$value=$_GET['h'];}

if (!isset($thermometerid) && !isset($value))
{
echo "Переменные не существуют";
}
echo $thermometerid;
echo $value;
?>

 

com
Offline
Зарегистрирован: 06.09.2013

я что-то не понял, вы вроде с апачем разбирались сначала - разобрались? без всякой ардуины с другого компьютера запрос вида xxx.xxx.xxx.xxx/dht/dhts.php работает?

Andrei83
Offline
Зарегистрирован: 25.03.2014

com пишет:

я что-то не понял, вы вроде с апачем разбирались сначала - разобрались? без всякой ардуины с другого компьютера запрос вида xxx.xxx.xxx.xxx/dht/dhts.php работает?

да, если запустить скрипт 192.168.0.101/dht/dhts.php выводится строка "Переменные не существуют". Тоесть никакие переменные не передаются. Хотя в мониторе портов ардуино есть сформирован GET запрос вида "GET dht/dhts.php?h=48&t=24" и есть подтверждение соединения с сервером. Если скопировать   dht/dhts.php?h=48&t=24   ивставить после 192.168.0.101/  - выводятся значения 48 и 24, тоесть если переменные передаются, то php работает

com
Offline
Зарегистрирован: 06.09.2013

мухи отдельно, котлеты отдельно.

есть сервер, который обрабатывает GET-запросы (апач, к примеру). и серверу абсолютно пофиг, кто этот запрос сформировал - хоть ардуина, хоть соседний компьютер, хоть сотовый телефон через браузер.  то есть если у вас с соседнего компьютера выводится строка ПЕРЕМЕННЫЕ НЕ СУЩЕСТВУЮТ, то ардуина не причем.

восстановите состояние, когда было вот так

Andrei83 пишет:

Видимо Open server кривой, пересел за комп Б на нем Apache поднимал вручную, он работает по wifi, его IP 192.168.0.101 

Итак на нем: localhost/dht/dhts.php - работает

                     192.168.0.101/dht/dhts.php - работает

И с компа А набираю    192.168.0.101/dht/dhts.php - работает

тоесть удаленно с компа А захожу на комп Б

и тогда, и только тогда, когда вы будете видеть правильный ответ сервера, а это будет означать, что апач умеет обрабатывать запросы и выдавать правильные ответы, пытайтесь в качестве клиента использовать ардуино.

com
Offline
Зарегистрирован: 06.09.2013

что-то я запутался.

а зачем вы вызываете 192.168.0.101/dht/dhts.php без параметров?

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

Насколько я понимаю, вы пытаетесь передать параметры (переменные) с ардуины скрипту php - у вас это получается... Ну или почти получается (не видев всего кода ардуины сложно судить), а потом пытаетесь обратиться с компа к этому скрипту но уже без параметров, полагая что он выведет вам значения переданных переменных с ардуино (надеюсь, я неправильно понял)? Тогда конечно - переменных уже не будет существовать.

Для того чтоб оценить дошли ли данные с ардуино, если вы используете код из этого поста (хотя, опять-таки, код не полный - нет передачи вообще - есть соединение, но передачи нет) добавьте в строку №30 код:

while (client.available())
{
    char c = client.read();
    Serial.print(c);
}
В результате в терминале вы сможете увидеть страницу (заголовки, код), которую отдаст сервер (php-скрипт) с только что переданными переменными
Andrei83
Offline
Зарегистрирован: 25.03.2014

192.168.0.101/dht/dhts отрабатывает как на текущем компе, так и с соседнего, который в одной сети

com пишет:

что-то я запутался.

а зачем вы вызываете 192.168.0.101/dht/dhts.php без параметров?

Вот в этом и загвоздка, не могу понять мой php просто выводит в браузер значения параметров из запроса, переданного ардуинкой. Так куда обращаться браузером, чтобы увидеть эти значения в нем?

Andrei83
Offline
Зарегистрирован: 25.03.2014

Вот полный скет с передачей GET запроса:

#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
#include <string.h>
#include <Wire.h>

//************************************************************

byte mac[] = { 0x50, 0xA2, 0xDA, 0x00, 0x5C, 0xFB };
byte ip[] = { 192, 168, 0, 103 };
//IP адрес сервера который будет собирать статистику
byte server[] = { 192, 168, 0, 101 };
char buffer[256];
EthernetClient client;

//************************ DHT22 ****************************

//Контакт к которому подключен датчик температуры и влажности
#define  DHTPIN 6 
#define DHTTYPE DHT11   // для DHT 11
DHT dht(DHTPIN, DHTTYPE);
int volt=5;

//***********************************************************

void setup()
{    
  Ethernet.begin(mac, ip);
   Serial.begin(9600);
   pinMode(volt, OUTPUT);
   digitalWrite(volt, HIGH);
   
  dht.begin();
  delay(1000);
 }

void loop()
{

//************************ DHT22 ****************************
int h = dht.readHumidity();
int t = dht.readTemperature();
//***********************************************************

Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");

String msg = "GET dht/dhts.php?h="+ String(h) + "&t="+String(t);

// Для отладки включим отправку данных в COM порт
Serial.println(msg);
    
EthernetClient connect();
if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println(msg);
    client.println();
  } else {
    Serial.println("connection failed");
  }

client.stop();

//Данные будут отправляться каждые 5сек.
 delay (5000);
 
}

 

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

Andrei83 пишет:

...Так куда обращаться браузером, чтобы увидеть эти значения в нем?

... Я понял правильно :(

Никуда! Переменная будет доступна только во время выполнения скрипта (читай - формирования страницы).

Обратились с браузера, передав параметрами h=48&t=24 - эти две переменные $thermometerid и $value будут доступны только до строчки

echo $value;

?>

При обращении с ардуино - нужно передавать свои параметры заново - в этом и есть смысл php - формировать html-страницу. Все. После сформированной и отданной страницы скрипт прекращает свой жизненный цикл и память отведенная под переменные очищается.

Попробуйте вот этот код - он выведет ответ от скрипта php в терминал:

#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
#include <string.h>
#include <Wire.h>

//************************************************************

byte mac[] = { 0x50, 0xA2, 0xDA, 0x00, 0x5C, 0xFB };
byte ip[] = { 192, 168, 0, 103 };
//IP адрес сервера который будет собирать статистику
byte server[] = { 192, 168, 0, 101 };
char buffer[256];
EthernetClient client;

//************************ DHT22 ****************************

//Контакт к которому подключен датчик температуры и влажности
#define  DHTPIN 6 
#define DHTTYPE DHT11   // для DHT 11
DHT dht(DHTPIN, DHTTYPE);
int volt=5;

//***********************************************************

void setup()
{    
  Ethernet.begin(mac, ip);
   Serial.begin(9600);
   pinMode(volt, OUTPUT);
   digitalWrite(volt, HIGH);
   
  dht.begin();
  delay(1000);
 }

void loop()
{

//************************ DHT22 ****************************
int h = dht.readHumidity();
int t = dht.readTemperature();
//***********************************************************

Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");

String msg = "GET dht/dhts.php?h="+ String(h) + "&t="+String(t);

// Для отладки включим отправку данных в COM порт
Serial.println(msg);
    
EthernetClient connect();
if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println(msg);
    client.println();
  } else {
    Serial.println("connection failed");
  }
  
// Подождем ответа сервера
delay(10);

// Выводим ответ от сервера
while (client.available())
{
    char c = client.read();
    Serial.print(c);
}

client.stop();

//Данные будут отправляться каждые 5сек.
 delay (5000);
 
}

P.S. Вот здесь, надеюсь понятно в очень общих чертах про жизнь переменных. Вдумчиво читать последний абзац!

Andrei83
Offline
Зарегистрирован: 25.03.2014

Тоесть правильно ли я тебя понял: если я в этом php скрипте допишу код записи значений этих переменных в mysql, то с заданной в ардуине задержкой ардуина формирует запрос к скрипту, который в свою очередь будет писать данные в базу? И только другим php скриптом я могу вытаскивать данные с базы и выводить их в браузер. Так?