У меня трудное время для передачи метки RFID №. в базу данных MySQL. Когда я компилирую данный код сервера, он подключается и печатает RFID нет. и также говорит, что данные отправляются на сервер, но когда я открываю свой php-файл (также mysql), данные не сохраняются. Что я делаю неправильно!! Прошу прощения за мой плохой английский.
#include <Ethernet.h>
#include <SPI.h>
#include <Client.h>
#include<SoftwareSerial.h>
SoftwareSerial RFID(2,3);
int i;
int rfid;
char newtag[14];// = {2,49,51,48,48,57,69,66,48,51,57,48,52,3};
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte subnet[] = {255,255,255,0};
//IPAddress gateway(192,168,1,1);
//IPAddress DBserver(192, 168, 1, 2);
IPAddress server(192,168,1,7);
//char server[] = "localhost/te";
IPAddress ip(192,168,1,2);
EthernetClient client;
void setup()
{
Serial.begin(9600);
RFID.begin(9600);
delay (1000);
Serial.print("*********Initializing Ethernet*********n");
if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
//Ethernet.begin(mac, server, gateway);
delay(1000);
Serial.println("connecting...");
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()
{
// while(1)
{
if (client.connect(server, 80))
{
Serial.print("Connected to server:");
Serial.println(Ethernet.dnsServerIP());
while(1)
{
if (RFID.available() > 0)
{
Serial.println("reading rfid tags");
delay(100);
for (i=0; i < 14; i++)
{
rfid = RFID.read();
newtag[i]=rfid;
}
RFID.flush();
Serial.print("rfid tag no:");
Serial.print(newtag);
Serial.println("Sending to Server...");
client.println("GET 192.168.1.7/te/add_data.php?sensor=2323 HTTP/1.1");
client.print(newtag);
client.println(" HTTP/1.1");
client.println("Host: 192.168.1.7/te/");
client.println("User-Agent: Arduino");
client.println("Accept: text/html");
Serial.println("data sent to server");
}
}
}
else
{
Serial.println("Cannot connect to Server");
}
}
и мой PHP-код
<?php
// Start MySQL Connection
include('dbconnect.php');
?>
<html>
<head>
<title> 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 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">RFID tag</td>
</tr>
<?php
// Retrieve all records and display them
$result = mysql_query("SELECT * FROM FYP 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["tag"].'</td>';
echo '</tr>';
}
?>
</table>
</body>
</html>
Вы реализуете HTTP построчно в своей C ++ программе. Возможно, для вашего обучения полезно поискать соответствующие RFC, даже если они немного сложны для чтения. http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5
Учитывая запрос GET, который вы нам показали, ваш add_data.php
Программа должна принять $_REQUEST['sensor']
параметр. Я не могу найти, где ты это делаешь.
Ваша клиентская программа HTTP на вашем Arduino должна отправлять блоки такого типа на ваш веб-сервер, на котором запущена ваша php-программа. Сначала он открывает соединение с сервером. Вы, кажется, сделали это правильно на порту 80. Затем он отправляет что-то вроде этого.
GET /te/add_data.php?sensor=2323 HTTP/1.1\r\n
Host: 192.168.1.7\r\n
User-Agent: Arduino\r\n
Accept: text/html\r\n
\r\n
Обратите внимание на две вещи.
Ваш код C ++ — ваш client.println()
код — похоже, не делает этого. В частности, значение newtag
будет неуместен в вашем блоке запросов.
Также обратите внимание, что единственным элементом данных, который вы отправляете в программу php, является «датчик», и вы отправляете ему жестко закодированное значение. 2323
, Я не могу сказать из вашей программы, что именно вы пытаетесь сделать. Но то, что вы делаете, не очень интересно, так что, возможно, это тест, чтобы все заработало.
Надеюсь, это поможет. Когда вы заработаете, вы внедрили достаточно сложную систему.
Других решений пока нет …