Не выполняется GET, POST запросы на локальном сервере
- Войдите на сайт для отправки комментариев
Вс, 17/04/2016 - 17:43
Вот обычный скетч:
#include <SPI.h> #include <Ethernet.h> #include "DHT.h" //Константы #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес EthernetClient client; //Переменные unsigned long int timeConn = millis(); // Частота отправки данных о t/h на сервер float h; // Значение температуры float t; // Значение влажности char server[] = "localhost"; /*-------------------------------------------------------------- Необходимые настройки --------------------------------------------------------------*/ void setup() { //Старт Serial.begin(9600); Ethernet.begin(mac); dht.begin(); } /*-------------------------------------------------------------- Основное тело программы --------------------------------------------------------------*/ void loop() { h = dht.readHumidity(); t = dht.readTemperature(); if (millis() - timeConn > 2000) { sendData(t,h); timeConn = millis(); Serial.println("CONNECT SERVER: Send temp/hum"); } } /*-------------------------------------------------------------- Функция отправляет данные о температуре и влажности на WEB сервер. --------------------------------------------------------------*/ void sendData(float t, float h) { client.connect(server, 80); client.print( "GET /add.php?"); client.print("t="); client.print(t); client.print("&"); client.print("h="); client.print(h); client.println(" HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); client.stop(); client.flush(); /* Для тестирование текст запроса вывел в сериал порт */ Serial.print( "GET /add.php?"); Serial.print("t="); Serial.print(t); Serial.print("&"); Serial.print("h="); Serial.print(h); Serial.println(" HTTP/1.1"); Serial.print( "Host: " ); Serial.println(server); Serial.println( "Connection: close" ); }
В мониторе порта текст запроса выводится нормально:
GET /add.php?t=25.10&h=53.30 HTTP/1.1
Host: localhost
Connection: close
Но данные не добавляются в базу, то есть GET запрос не поступает к серверу. Если в браузере набрать:
http://localhost/add.php?t=25.10&h=53.30 - то данные добавляются в базу, то есть файл add.php работает как надо.
Сервер как вы поняли локальный. Может быть езернет шилд не умеет отправлять GET запросы локальному серверу, а работает только с сервером с которым можно соединится только через интернет? Если так, то можно ли как то обойти или может есть решение чтобы ардуино с езернет шилдом работал с локальным сервером?
Так дуина сама к себе обращается. У тебя только клиент поднят, а где сервер?
localhost - это альяс имени сервера, поднятого на локальной железке. Т.е. вы обращаетесь не к компьютеру, а к себе. Для того, чтобы всё заработало - надо вместо localhost подставить IP-адрес компьютера, на котором поднят веб-сервер, и всё должно быть нормально.
Так дуина сама к себе обращается. У тебя только клиент поднят, а где сервер?
Сервер то на локалной машине поднят или надо и в ардуине поднимать?
localhost - это альяс имени сервера, поднятого на локальной железке. Т.е. вы обращаетесь не к компьютеру, а к себе. Для того, чтобы всё заработало - надо вместо localhost подставить IP-адрес компьютера, на котором поднят веб-сервер, и всё должно быть нормально.
Если поставить ip 127.0.0.1 то все равно не заработал. Создал хост например mysite.ru, перевел туда add.php. Изменил localhost на mysite.ru, но все равно не заработал. Может ip надо какой нибудь 192.168.1.10 прописать и изменить на этот айпи?
Заработал! Как и писал создал другой хост, на который можно зайти по айпи 192.168.1.10. Сервер указал этот айпи.
P.S. По идеи должен был заработать и с mysite.ru , оказывается тут я сам накосячил в настройках и mysite.ru тоже открывал файлы localhost'a.
Заработал! Как и писал создал другой хост, на который можно зайти по айпи 192.168.1.10. Сервер указал этот айпи.
P.S. По идеи должен был заработать и с mysite.ru , оказывается тут я сам накосячил в настройках и mysite.ru тоже открывал файлы localhost'a.
Здравствуйте, а можете выложить полный рабочий код скетча и ПХП код, тот что на локальном сервере. А то уже 2 дня мучаюсь с записью в БД. Я так понимаю вы через денвер работаете?
Вспомнилось...:
- кУлЦхАкЕр: дайте какой-нить айпишник ломануть
- на 127.0.0.1
кУлЦхАкЕр ротерял связб сервером...
Здравствуйте, а можете выложить полный рабочий код скетча и ПХП код, тот что на локальном сервере. А то уже 2 дня мучаюсь с записью в БД. Я так понимаю вы через денвер работаете?
Нет, не денвер. Веб сервер apache поднят на debian 8.2. Но никаких проблем с денвером не должно быть. Просто создаете сайт на денвере например mysite.ru, и в скетче который указан в первой сообщении надо изменить
на
Содержимое файлы add.php:
Нет, не денвер. Веб сервер apache поднят на debian 8.2. Но никаких проблем с денвером не должно быть. Просто создаете сайт на денвере например mysite.ru, и в скетче который указан в первой сообщении надо изменить
на
Содержимое файлы add.php:
Ваш код я переделал под себя. Я имею датчик температуры ds18b20, хочу брать с него температуру и заносить в БД mysql посредством денвер.
библиотеку использую UIPEthernet.h, модуль использую ENC28j60
Вот код
Монитор порта показывает
т.е. всё как надо.
На стороне компьютера (ip 192.168.1.47) установлен денвер, там в папке сайта test4.ru в самой дериктории, в файле .htaccess прописал
т.е. при вводе в браузере 192.168.1.47 запускается index.php в корне папки test4.ru, в самом index.php прописал для начала код без передачи его БД, хотябы чтобы увидеть передаются ли значения температуры, но так ничего и не увидел. Куда копать дальше?
или все таки надо прописывать код вставки в БД? Сам же браузер я так понимаю дожен быть постоянно включен и октрыта страница
papakaplo, если наберете в браузере например: http://192.168.1.47/index.php?t=25.60 что выводится?
Если 25.60 значит все работает и можете вставлять код добавление в базу. Если пусто, то не лучше ли изменить 192.168.1.47 на test4.ru?
И еще один момент. Если хотите получать температуру в целых числах, то на 11-строке скетча
тоже желательно изменить на int. Если же хотите получать в дробных числах (точнее), 11-строку не меняете но на 43-строке int надо поменять на float и в базе тип поля temp тоже надо изменить с int на
float
float
.P.S. Для DS18B20 у меня был более компактный код/скетч. Вдобавок можно сразу получать данные с двух и более датчиков. Скину вечером когда буду дома.
papakaplo, если наберете в браузере например: http://192.168.1.47/index.php?t=25.60 что выводится?
Если 25.60 значит все работает и можете вставлять код добавление в базу. Если пусто, то не лучше ли изменить 192.168.1.47 на test4.ru?
И еще один момент. Если хотите получать температуру в целых числах, то на 11-строке скетча
тоже желательно изменить на int. Если же хотите получать в дробных числах (точнее), 11-строку не меняете но на 43-строке int надо поменять на float и в базе тип поля temp тоже надо изменить с int на
float
float
.P.S. Для DS18B20 у меня был более компактный код/скетч. Вдобавок можно сразу получать данные с двух и более датчиков. Скину вечером когда буду дома.
Да оно выведется, это я понимаю, ведь если я вставлю в браузере http://192.168.1.47/index.php?t=25.60, то выведется значение 25.60 которую я сам же и ввел и которой равна переменная t. А как мне вывести то, что измеряет сам датчик, ведь он сам не ввставит эту строчку в браузер и не запишется значение в базу, ведь нужен POST запрос с самой страницы (допустим кнопка).
Да тут и так все по минимуму взято для этого датчика. Пока в наличии только один. Интересно было б взгялнуть на ваш пример. А с переменной я в курсе, до неё ещё дойдут руки, это не суть) суть автоматически добавлять в базу значение этой переменной))
Поставьте условие if(client.connect(server, 80)){}, чтобы узнать есть ли коннект с сервером:
void sendData(float t) {
ком порт выдает
В базе данной при обновлении страиницы в поле sensor_temp появляются 0.000
Не вижу у вас самого запроса в пхп на ардуино, в моём понимании сервер делает запрос к клиенту и получает данные, и так циклично
Кароч все само заработало, перезагрузил дуино, и в БД значения пошли писаться. Спасибо Шерзод!
Заменив int на float компилятор стал ругаться на строку t = t»4;
Заменив int на float компилятор стал ругаться на строку t = t»4;
И правильно сделал.
А что, собсnвенно, Вы хотели добиться от t = t»4; ?
Не вижу у вас самого запроса в пхп на ардуино, в моём понимании сервер делает запрос к клиенту и получает данные, и так циклично
Наоборот. Клиент (в нашем случае - ардуино) делает запрос, а сервер обрабатывает и отвечает клиенту.
Заменив int на float компилятор стал ругаться на строку t = t»4;
Честно говоря, я не силен в синтаксисе языка для ардуино. Думаю лучше убрать эту строчку. А вообще ниже я приведу скетч, который обещал
Кароч все само заработало, перезагрузил дуино, и в БД значения пошли писаться. Спасибо Шерзод!
Всегда пожалуйста :)
Скетч №1 - Для определение уникального адреса датчика DS18B20
Загрузите скетч и смотрите монитор порта. Сколько у вас датчиков подключено столько и появится со своими уникальными адресами. Скопируйте адреса куда нибудь в текстовой файл. Дальше в скетча №2 замените эти адреса в HEX формате. Если например адрес датчика 2866AD03000080B4, то перед каждым 2 символа добавляете "0x" и получится 0x28, 0x66, 0xAD, 0x03, 0x00, 0x00, 0x80, 0xB4
Скетч №2 - Получаем показание датчиков DS18B20
P.S. Возможно вам потребуется скачать библиотеку DallasTemperature. Если не найдете могу вам на почту отправить. Сюда вроде загрузить не получится.
Спасибо Sherzod, библиотека да далас установлена, кстати про адресацию датчиков в другой ветке вопрос задавал, а вы тут ответили без вопроса :) , домой приеду окончательно код выложу рабочего решения: скетч, код php, и бд.
Ещё возник вопрос, вроде все работает добавляется, но в какой-то момент показания перестают добавляться в БД, и дуина молчит, как будто засыпает. Мб необходимо её дёргать в течении каждого цикла?
Рабочий код для связки ардуино + enc28j60 + виртуальный сервер денвер
Скетч
Настройки сервера в файлике .httaccess
Обработчик index.php
Код для создания БД
Ребята вы с такими пхп скриптами не забываите о безопасности, посмотрите например "SQL injection" , а то злые хакеры не дремлют :)
Ребята вы с такими пхп скриптами не забываите о безопасности, посмотрите например "SQL injection" , а то злые хакеры не дремлют :)
Понавешать защит и проверок не долго. Просто все внутри домашней сети вертится. Да и особо ценной информации это не представляет.
Привет всем! Уже третий день медитирую над вышеизложенным. Шлю с Arduino значения 6 дальномеров на локальный сервер.
Имею следующую головную боль - значения не добавляются в базу данных.
При вводе в адресной строке "http://192.168.1.5/index.php?v1=1&v2=2&v3=3&v4=4&v5=5&v6=6;" и нажатии Enter в базе данных появлется новая строка с соответствующими значениями.
В мониторе COM-порта вижу:
"Connected" и "GET /index.php?v1=1&v2=2&v3=3&v4=4&v5=5&v6=6 HTTP/1.1"
Код index.php:
Скетч:
Т.е. данные ушли, но не дошли.
Вопрос. Где же они? Помогите, пожалуйста, разобраться.
Чтот я не заметил где в вашем скетче вы передаете ВЕРНЫЙ http запрос.
В частности нет обязательных строк client.println();client.println();