Прблемы с ENC28J60 + Freehosting+PHP+MySQL
- Войдите на сайт для отправки комментариев
Добрового времени суток, друзья! Совсем недавно начал работать с платформой и уже вдоволь наигравшись всем чем только можно решил скидывать данные с Ардуино в базу на сервере. Но так как я мало разбираюсь в серверной части, то появились вопросы.
1) Установка php-скриптов на сервере:
Загрузил в кореневую папку на сервере 3 файла с расширением php -
add_data.php - для считывания информации с датчика и отправки на сервер
Код:
?php
// Connect to MySQL
include("dbconnect.php");
// Prepare the SQL statement
$SQL = "INSERT INTO test.temperature (sensor ,celsius) VALUES ('".$_GET["serial"]."', '".$_GET["temperature"]."')";
// Execute SQL statement
mysql_query($SQL);
// Go to the review_data.php (optional)
header("Location: review_data.php");
?>
dbconnect.php - собственно подключаемся к базе
<?php
$MyUsername = "Имя_базы"; // enter your username for mysql
$MyPassword = "Пароль"; // enter your password for mysql
$MyHostname = "Хост"; // this is usually "localhost" unless your database resides on a different server
$dbh = mysql_pconnect($MyHostname , $MyUsername, $MyPassword);
$selected = mysql_select_db("test",$dbh);
?>
review_data.php - создает таблицу и отображает значения с датчиков
<?php
// Start MySQL Connection
include('dbconnect.php');
?>
<html>
<head>
<title>Arduino Temperature Log</title>
<style type="text/css">
.table_titles, .table_cells_odd, .table_cells_even {
padding-right: 20px;
padding-left: 20px;
color: #000;
}
.table_titles {
color: #FFF;
background-color: #666;
}
.table_cells_odd {
background-color: #CCC;
}
.table_cells_even {
background-color: #FAFAFA;
}
table {
border: 2px solid #333;
}
body { font-family: "Trebuchet MS", Arial; }
</style>
</head>
<body>
<h1>Arduino Temperature Log</h1>
<table border="0" cellspacing="0" cellpadding="4">
<tr>
<td class="table_titles">ID</td>
<td class="table_titles">Date and Time</td>
<td class="table_titles">Sensor Serial</td>
<td class="table_titles">Temperature in Celsius</td>
</tr>
<?php
// Retrieve all records and display them
$result = mysql_query("SELECT * FROM temperature ORDER BY id ASC");
// Used for row color toggle
$oddrow = true;
// process every record
while( $row = mysql_fetch_array($result) )
{
if ($oddrow)
{
$css_class=' class="table_cells_odd"';
}
else
{
$css_class=' class="table_cells_even"';
}
$oddrow = !$oddrow;
echo '<tr>';
echo ' <td'.$css_class.'>'.$row["id"].'</td>';
echo ' <td'.$css_class.'>'.$row["event"].'</td>';
echo ' <td'.$css_class.'>'.$row["sensor"].'</td>';
echo ' <td'.$css_class.'>'.$row["celsius"].'</td>';
echo '</tr>';
}
?>
</table>
</body>
</html>
Все это настроил под себя и загрузил на сервер. Через PHPMyAdmin создал базу
CREATE TABLE `test`.`temperature` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'unique ID', `event` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Event Date and Time', `sensor` VARCHAR( 30 ) NOT NULL COMMENT 'Unique ID of the sensor', `celsius` VARCHAR( 10 ) NOT NULL COMMENT 'Measured Temperature in Celsius', INDEX ( `event` , `sensor` ) ) ENGINE = InnoDB;
Вот только на бесплатном хостинге, доступны лишь несколько типов ENGINE
CSV storage engine,
MyISAM storage engine, /dev/null storage engine (anything you write to it disappears) - выбрал этот тип
MEMORY Hash based, stored in memory, useful for temporary tables,
MRG_MYISAM Collection of identical MyISAM tables
ARCHIVE Archive storage engine
2) Затем залил вот такой скетч:
Хотел для начала передать в базу свои значения температуры и проверить, будут ли они отображаться. Но ничего не отображается, хотя в мониторинге порта показывает, что соединение "Connected"
#include <UIPEthernet.h> // Used for Ethernet
// Arduino Uno pins: 10 = CS, 11 = MOSI, 12 = MISO, 13 = SCK
byte mac[] = { 0x54, 0xF4, 0xE2, 0x31, 0x30, 0xD5 };
EthernetClient client;
char server[] = "***.byethost5.com"; // адресс сервера
int interval = 5000;
void setup() {
Serial.begin(9600);
Ethernet.begin(mac);
Serial.println("Hello!");
Serial.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
Serial.print("IP Address : ");
Serial.println(Ethernet.localIP());
Serial.print("Subnet Mask : ");
Serial.println(Ethernet.subnetMask());
Serial.print("Default Gateway IP: ");
Serial.println(Ethernet.gatewayIP());
Serial.print("DNS Server IP : ");
Serial.println(Ethernet.dnsServerIP());
}
void loop() {
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println("-> Connected");
// Make a HTTP request:
client.print( "GET /htdocs/add_data.php?");
client.print("serial=");
client.print( "288884820500006X" );
client.print("&&");
client.print("temperature=");
client.print( "12.3" );
client.println( " HTTP/1.1");
client.print( "Host: " );
client.println(server);
client.println( "Connection: close" );
client.println();
client.println();
client.stop();
}
else {
// you didn't get a connection to the server:
Serial.println("--> connection failed/n");
}
delay(interval);
}
В чем может быть проблема? Почему ардуина не передает значения или они не записываются в базу?
Возможно дело в моей рукожопости, не исключаю. 3 день ищу проблему, перерыр кучу статей, но так и не нашел решение. Помогите, кто разбирается!
Ты пытаешься решить уравнение с двумя неизвестными. Закинь на халявный сервак html страничку с формой, которая будет генерить точно такой же запрос, проверь работу сервака и своих скриптов сначала.
Если честно, я не знаю как теперь все это перекинуть на html. Если не трудно, можно подробнее объяснить?
Тебе нужно создать такой запрос: GET /htdocs/add_data.php?serial=288884820500006X&temperature=12.3
В html это выглядит примерно так:
Убедись, что php скрипты работают как надо.
То есть мне нужно создать html файл и загрузить в корень вместе с php? Что Вы имели ввиду
Да, создать file.html и положить там же, где лежит add_data.php
Затем открыть file.html в браузере и отправить форму, проверить как выглядит запрос, убедиться что php скрипты работают правильно.
Вот открыл в браузере загруженный на сервер html:
При нажатии кнопки "Отправить" (хоть она и отображается криво), выходит вот это:
Что это значит?
Вот, представь дуина получает это.... Судя по листингу у тебя не хватает угловой скобки < в первой строке. должно быть <?php
Ой, точно. Не заметил даже.
Ну хорошо, это я исправил и попробовал отправить с html. Но открылась моя таблица, которая лежит в
review_data.php. По идее должны данные отражаться в этой таблице, но что-то не работает.
Вот:
Что может быть не так?