Прблемы с ENC28J60 + Freehosting+PHP+MySQL

egor-kartop
Offline
Зарегистрирован: 30.01.2016

Добрового времени суток, друзья! Совсем недавно начал работать с платформой и уже вдоволь наигравшись всем чем только можно решил скидывать данные с Ардуино в базу на сервере. Но так как я мало разбираюсь в серверной части, то появились вопросы. 

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 день ищу проблему, перерыр кучу статей, но так и не нашел решение. Помогите, кто разбирается! 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Ты пытаешься решить уравнение с двумя неизвестными. Закинь на халявный сервак html страничку с формой, которая будет генерить точно такой же запрос, проверь работу сервака и своих скриптов сначала.

egor-kartop
Offline
Зарегистрирован: 30.01.2016

Если честно, я не знаю как теперь все это перекинуть на html. Если не трудно, можно подробнее объяснить? 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Тебе нужно создать такой запрос: GET /htdocs/add_data.php?serial=288884820500006X&temperature=12.3

В html это выглядит примерно так:

<form action="add_data.php">
<input  type="text" name="serial" value="288884820500006X">
<input  type="text" name="temperature" value="12.3">
<input type="submit" value="Отправить">
</form>

Убедись, что php скрипты работают как надо.

egor-kartop
Offline
Зарегистрирован: 30.01.2016

То есть мне нужно создать html файл и загрузить в корень вместе с php? Что Вы имели ввиду

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Да, создать file.html и положить там же, где лежит add_data.php

Затем открыть file.html в браузере и отправить форму, проверить как выглядит запрос, убедиться что php скрипты работают правильно.

egor-kartop
Offline
Зарегистрирован: 30.01.2016

Вот открыл в браузере загруженный на сервер html:

При нажатии кнопки "Отправить" (хоть она и отображается криво), выходит вот это:

Что это значит? 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Вот, представь дуина получает это.... Судя по листингу у тебя не хватает угловой скобки < в первой строке. должно быть <?php

egor-kartop
Offline
Зарегистрирован: 30.01.2016

Ой, точно. Не заметил даже. 

Ну хорошо, это я исправил и попробовал отправить с html. Но открылась моя таблица, которая лежит в 

review_data.php. По идее должны данные отражаться в этой таблице, но что-то не работает. 

Вот: 

Что может быть не так?