Здравствуйте уважаемые форумчание! Очень прошу Вашей помощи! Очеень хочу научится получать данные о температуре и влажности на локальном сервере ( на ноутбуке - Open Server 5/2/2) используя ардуино как вебКлиент. Сервер есть, связь настроил, но есть одно НО. В базе данных, в которую записываются значения о темп. и влажн. полученные от ардуино - записываются нули. Уже не знаю что и думать и куда смотреть... ВСе файлы прилагаю. sketch^ Код (C++): #include <SPI.h> #include <Ethernet.h> #include "DHT.h" //Константы #define DHTPIN 2 #define DHTTYPE DHT11 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; // Значение влажности IPAddress server(192,168,1,2); /*-------------------------------------------------------------- Необходимые настройки --------------------------------------------------------------*/ void setup() { //Старт Serial.begin(9600); Ethernet.begin(mac); dht.begin(); } /*-------------------------------------------------------------- Основное тело программы --------------------------------------------------------------*/ void loop() { h = dht.readHumidity(); t = dht.readTemperature(); if (millis() - timeConn > 2000) { sendData(); timeConn = millis(); } } /*-------------------------------------------------------------- Функция отправляет данные о температуре и влажности на WEB сервер. --------------------------------------------------------------*/ void sendData() { client.connect(server, 80); client.print( "GET /parser.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(); } parser.php PHP: <?php ini_set("display_errors",1); error_reporting(E_ALL); $db_host = "192.168.1.2"; $db_user = "alex"; $db_pass = "Mc19bR73"; $db_name = "home"; define('DB_HOST',$db_host); define('DB_USER',$db_user); define('DB_PASS',$db_pass); define('DB_NAME',$db_name); $link = mysql_connect(DB_HOST, DB_USER, DB_PASS); if(!$link) die ("Невозможно подключиться к базе данных!"); mysql_select_db(DB_NAME); $temp=$_GET['t']; $hum=$_GET['h']; $query = "INSERT INTO `room` (`time`, `temp`, `hum`) VALUES ('".time()."', '".$temp."','".$hum."')"; if(!mysql_query($query)) echo "ошибка при записи в БД!"; mysql_close($link); ?> Таблица в бд куда все записывается: Код (Text): -- -- Структура таблицы `room` -- CREATE TABLE IF NOT EXISTS `room` ( `id` mediumint(9) NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `temp` float NOT NULL, `hum` float NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=396 DEFAULT CHARSET=utf8; Очень надеюсь на Вашу помощь!
С SQL так нельзя работать. Это ошибочный код, который ведет к уязвимости приложения и битой базе данных. Используйте движок sql, поддерживающий подстановки, Например mysqli с mysqli->prepare()->bind_param()
Есть некоторый шанс, что кто-то знает и Ардуино и php и mysql одновременно и к этому захочет въезжать в ваше творение. И пока этот кто-то здесь объяаится, вот что посоветую. Ваша задача состоит из трех элементов. Найдите сами хотя бы в каком элементе затык. Двигайтесь от конца к началу. 1. Убедитесь, что база данных настроена правильно и из консоли данные в нее заходят правильными запросами. Запомните эти запросы. Научитесь работать с mysql через консоль ( если не умеете) 2. Убедитесь, что php страница правильно формирует такие запросы - сделайте входящие от get запроса переменные константами и просто вызывайте эту страницу. 3. Убедитесь, что правильный get запрос обрабатывается правильно - сформируйте его не от ардуино, а через браузер. 4. Если все правильно - ищите что не так отправляет ардуино и отправляет ли что то. Используйте сериал для контроля. Это общий ход мыслей. Глубже думать не умею в отличие от предыдущего выступающего.
1) попробуйте вместо time() использовать date("Y-m-d H:i:s"); $time = date("Y-m-d H:i:s"); 2) Для проверки того, что "долетает" до скрипта добавьте: echo $time."\n"; echo $temp."\n"; echo $hum."\n"; 3) Как php стоит на сервере? Если меньше 4.1, то проблема может быть в том, что раньше переменные через get запрос обрабатывались не через массив _GET, а напрямую т.е. в вашем случае $t и $h.