ramen79 Ответов: 1

Arduino + sim900a сохранение данных в таблицу mysql


Я использую Arduino Uno R3 и SIMCOM900A, протестировал SMS ok. Теперь мне нужно вставить данные в таблицу Mypsql.Кто-нибудь может мне помочь... никакие данные не вставляются в таблицу Mysql.
Заранее спасибо..

Что я уже пробовал:

coding in Arduino terminal:

AT

OK
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CIPSTART="TCP","122.160.112.220","80"

OK

CONNECT OK
AT+CIPSEND

> GET/122.160.112.220/gprs_data.php?v1=2.3&v2=2.6 /HTTP 1.1 (ctrl+m)(ctrl+j)
HOST:122.160.112.220 (ctrl+m)(ctrl+j) (ctrl+j)

SEND OK


Получение этого:
HTTP/1.1 408 Request Time-out
Date: Tue, 18 Apr 2017 09:14:19 GMT
Server: Apache/2.2.22 (Win32) PHP/5.2.4
Content-Length: 223
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>408 Request Time-out</title>
</head><body>
<h1>Request Time-out</h1>
<p>Server timeout waiting for the HTTP request from the client.</p>
</body></html>

CLOSED
⸮⸮⸮⸮




gprs_data.php код:

<? php

$val1 = $_GET['v1'];

$val2 = $_GET['v2'];

//insert record
mysql_query("LOCK TABLES gprs_data WRITE;");
$sql="INSERT INTO gprs_data (val1,val2)
VALUES
('$val1','$val1')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
  
 mysql_query("UNLOCK TABLES;"); 


?>

1 Ответов

Рейтинг:
0

Jochen Arndt

Для блокировки и разблокировки вы звоните mysql_query без передачи идентификатора ссылки, возвращаемого вызовом connect. Затем он будет использовать последнюю открытую ссылку или создаст соединение по умолчанию (localhost:3306 с именем пользователя и паролем по умолчанию). Но вы не проверяете возвращаемое значение, чтобы получить информацию о том, удалось ли создать соединение.

Но с помощью команды insert вы передаете идентификатор ссылки $con который нигде не определен. Это должно позволить сценарию завершиться с ошибкой.

Вы должны разделить свою работу на несколько задач и протестировать каждую из них. Первая задача здесь-хранение данных в базе данных. Для этого выполните PHP-скрипт из оболочки (без использования веб-сервера). Затем исправьте сообщенные ошибки и проверьте возвращаемые функции.

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

На самом деле вы получаете ответ 408 / time out. Это происходит потому, что ваш PHP-скрипт не генерирует никаких выходных данных HTML. PHP-скрипт, вызываемый через веб-браузер, должен выводить допустимую HTML-страницу.


ramen79

К сожалению, я не могу упомянуть, что у меня есть config.php включено в gprs_data.php который имеет учетные данные подключения MySQL.

Jochen Arndt

Но вам все равно нужно проверить, успешен ли первый запрос (соединение установлено), а переменная $con все еще не инициализирована.

Поэтому удалите опущенную передачу $con с помощью запроса INSERT или подключите сначала назначение $con.

ramen79

$con-это переменная, фактически содержащая учетные данные подключения MySQL
с Mysql_db_connect ("dbname",$con);

Jochen Arndt

Что такое Mysql_db_connect?
Это не стандартная функция PHP.

Но опять же:
Проверьте возвращаемое значение функций (особенно первый вызов mysql_query).
Он скажет вам, если была ошибка.

ramen79

Извините, это Mysql_select_db ("dbname",$con);
Далее я попробую в командной строке windows и сообщу вам результат..
Спасибо....

ramen79

Я тестировал в командной строке, она выбрасывала ошибку: файл в каталоге не найден==> & gt; ошибка была для config.php тогда я упомянул правильный путь для config.php и назначенное значение для val1 и val2, теперь, когда я запускаю один и тот же набор AT-команд, он выдает ту же ошибку тайм-аута 408, но также вставляет назначенные значения в таблицу базы данных MySQL. Но когда я попытался передать значение из GPRS по команде ничего не вставил, только бросил ошибку!!!
Почему-то я не могу понять, в чем проблема...
Спасибо....

Jochen Arndt

Ошибка тайм-аута:
Уже объяснено в моем решении. При вызове скрипта с веб-страницы скрипт должен генерировать допустимый HTML-код, который отправляется в ответ на запрос GET.

Как вы пытаетесь передать значения из команды AT?
Вы использовали терминал и запросили веб-страницу вручную, передав значения, набрав их.