Прблемы с 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. По идее должны данные отражаться в этой таблице, но что-то не работает.
Вот:
Что может быть не так?