Wenn Du meinst.
Dann kann ich mich ja ausklinken.
Und Tschüß
Gruß Tommy
Wenn Du meinst.
Dann kann ich mich ja ausklinken.
Und Tschüß
Gruß Tommy
Moin, hat soweit geklappt, die Verbindung steht und hat auch funktioniert. Wie soll ich nun fortfahren. Tut mir leid das ich so ein Idiot bin in dem Thema. Bin relativ neu im arduino game
Danke dafür, kann man auch human erklären und nicht direkt so passiv-aggressiv werden. Tut mir leid das ich neu in dem gebiet bin und wenig erfahrung habe.
So,
das heisst, Du hast jetzt das webclient-Example und bekommst auf dem seriellen Monitor die Ausgaben vom XAMPP-Server?
Zeig mal die Ausgaben, bis zur Antwort, damit ich ein paar Zahlen sehe.
Dann schau ich mal, was ich Dir bauen kann.
Moin, vielen dank hier einmal der Bearbeitete Web-Client code:
/*
Web client
This sketch connects to a website (http://www.google.com)
using an Arduino WIZnet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe, based on work by Adrian McEwen
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(192,168,1,176); // numeric IP for Google (no DNS)
//char server[] = "192.168.1.176"; // name address for Google (using DNS)
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 1, 177);
//IPAddress myDns(192, 168, 1, 1);
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
// Variables to measure the speed
unsigned long beginMicros, endMicros;
unsigned long byteCount = 0;
bool printWebData = true; // set to false for better speed measurement
void setup() {
// You can use Ethernet.init(pin) to configure the CS pin
Ethernet.init(10); // Most Arduino shields
//Ethernet.init(5); // MKR ETH Shield
//Ethernet.init(0); // Teensy 2.0
//Ethernet.init(20); // Teensy++ 2.0
//Ethernet.init(15); // ESP8266 with Adafruit FeatherWing Ethernet
//Ethernet.init(33); // ESP32 with Adafruit FeatherWing Ethernet
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start the Ethernet connection:
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// try to configure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
} else {
Serial.print(" DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.print("connecting to ");
Serial.print(server);
Serial.println("...");
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.print("connected to ");
Serial.println(client.remoteIP());
// Make a HTTP request:
client.println("GET /datenbank_projekt/Code.html HTTP/1.1");
client.println("Host: 192.168.1.176");
client.println("Connection: close");
client.println();
} else {
// if you didn't get a connection to the server:
Serial.println("Connection successfull");
}
beginMicros = micros();
}
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
int len = client.available();
if (len > 0) {
byte buffer[80];
if (len > 80) len = 80;
client.read(buffer, len);
if (printWebData) {
Serial.write(buffer, len); // show in the serial monitor (slows some boards)
}
byteCount = byteCount + len;
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
endMicros = micros();
Serial.println();
Serial.println("disconnecting.");
client.stop();
Serial.print("Received ");
Serial.print(byteCount);
Serial.print(" bytes in ");
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
Serial.print(seconds, 4);
float rate = (float)byteCount / seconds / 1000.0;
Serial.print(", rate = ");
Serial.print(rate);
Serial.print(" kbytes/second");
Serial.println();
// do nothing forevermore:
while (true) {
delay(1);
}
}
}
und hier einmal die ausgabe im Seriellen Monitor, der zugriff ist hier auf eine Html seite im gleichen Verzeichnis wie der PHP code. Wie du sehen kannst ist die nur der einfach zugriff auf die Daten, und das auslesen. habe bereits an meinem eigentlichen problem gesessen und habe dazu leider auch sonst nichts gefunden. Vielen dank aufjedenfall für deine Mühe und deine Hilfe sehr freundlich
connecting to 192.168.1.176...
connected to 192.168.1.176
HTTP/1.1 200 OK
Date: Wed, 29 Mar 2023 09:38:07 GMT
Server: Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/8.0.25
Last-Modified: Fri, 24 Mar 2023 08:47:25 GMT
ETag: "98-5f7a17141798c"
Accept-Ranges: bytes
Content-Length: 152
Connection: close
Content-Type: text/html
Der folgende Code muss ein Connect bringen.
Entweder direkt mit der Datenbank oder mit dem Webservice.
Dann gehts weiter.
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>
byte mac[] = { 0xA8, 0x61, 0x0A, 0xAE, 0x94, 0xC9 }; //Setting MAC Address
IPAddress server(192, 168, 1, 176);
IPAddress ip(192, 168, 1, 177);
const byte SSPin = 10;
EthernetClient client;
SoftwareSerial RFID(9, 8); // RX, TX
void setup()
{
Serial.begin(9600);
Serial.println(F("Start..."));
RFID.begin(9600);
Ethernet.init(SSPin);
Ethernet.begin(mac, ip);
delay(1500); // Wait for initiale NetworkShield
Serial.println(F("Los gehts..."));
if (client.connect(server, 3306))
{
Serial.println("connected to database");
}
else
{
if (client.connect(server, 80))
{
Serial.println("connected via Webservice");
}
}
client.stop();
}
void loop()
{
}
ich würde sagen, halberfolgreich. Da hats entweder etwas mit deinem PHP am Webserver oder wie diese Seite aufgebaut ist, denn du darfst keinen PHP code sehen am Client, das muss am Server ausgeführt werden BEVOR es zum Client gesandt wird.
benenne mal am Webserver deine code.html auf code.php um
und rufe im Arduino die code.php auf
Zeige den neuen Arduino Code und die neue Ausgabe am Serial Monitor (ich will da eine echte Uhrzeit sehen um sicher zu gehen, das php läuft und richtig angesprochen wird).
Jo danke dir, hab die ausgabe connected to database bekommen. Was soll ich jetzt tun?
Initialize Ethernet with DHCP:
Failed to configure Ethernet using DHCP
connecting to 192.168.1.176...
connected to 192.168.1.176
HTTP/1.1 200 OK
Date: Wed, 29 Mar 2023 10:55:45 GMT
Server: Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/8.0.25
X-Powered-By: PHP/8.0.25
Content-Length: 124
Connection: close
Content-Type: text/html; charset=UTF-8
Folgende ausgabe kam, php code hat funktioniert
Jetzt kannst Du Dich entscheiden, ob Du direkt in die Datenbank schreiben möchtest oder mittels PHP-Script und Webservice.
Direkt schreiben ist auch damit verbunden, das Du eine zusätzliche lib brauchst, die den MySQL-Connect und das insert macht.
Benötigt natürlich auch noch Speicher.
Du hast mit dem Öffnen der Firewall für Port 3306 aber auch einen Angriffsvector aufgemacht.
In Deinem unbedarften Fall - und das meine ich genau so - halte ich einen offenen Datenbankport für nicht zielführend.
Von daher alles via /GET und gut ist.
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>
byte mac[] = { 0xA8, 0x61, 0x0A, 0xAE, 0x94, 0xC9 }; //Setting MAC Address
IPAddress server(192, 168, 1, 176);
IPAddress ip(192, 168, 1, 177);
const byte SSPin = 10;
EthernetClient client;
SoftwareSerial RFID(9, 8); // RX, TX
uint32_t tagData = 1234567890;
void setup()
{
Serial.begin(9600);
Serial.println(F("Start..."));
RFID.begin(9600);
Ethernet.init(SSPin);
Ethernet.begin(mac, ip);
delay(1500); // Wait for initiale NetworkShield
Serial.println(F("Los gehts..."));
if (client.connect(server, 80))
{
Serial.println(F("connected to Webservice"));
client.print("GET /datenbank_projekt/rfid.php?tag=");
client.print(tagData);
client.print(" HTTP/1.1\r\n");
client.print("Host: Arduino\r\n"); //!!!!!!!!!!!!!!!!!!!!!!
client.print("Connection: close\r\n");
client.print("\r\n");
while (client.connected())
{
if (client.available())
{
Serial.print(client.read());
}
}
client.stop();
}
}
void loop()
{
}
Du bekommst - hoffentlich - eine Antwort auf dem Sermon.
ja hat auch geklappt, die variable tagdata also 1234567890 wird nun auch in die datenbank eingetragen, wie verknüpfe ich da nun am besten den rfid? Tut mir leid das ich das alles so abverlange aber habe sehr angst etwas falsch zu machen und verzweifele schon sehr
Na bitte.
Dann sind wir doch schon fertig.
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>
byte mac[] = { 0xA8, 0x61, 0x0A, 0xAE, 0x94, 0xC9 }; //Setting MAC Address
IPAddress server(192, 168, 1, 176);
IPAddress ip(192, 168, 1, 177);
const byte SSPin = 10;
EthernetClient client;
SoftwareSerial RFID(9, 8); // RX, TX
void setup()
{
Serial.begin(9600);
Serial.println(F("Start..."));
RFID.begin(9600);
Ethernet.init(SSPin);
Ethernet.begin(mac, ip);
delay(1500); // Wait for initiale NetworkShield
Serial.println(F("Los gehts..."));
}
void loop()
{
uint32_t data = readTag();
if (data)
{ insertTag(data); }
}
uint32_t readTag()
{
char tagChar[15] = {'\0'};
byte idx = 0;
while (RFID.available() > 0)
{
tagChar[idx] = char(RFID.read());
idx++;
}
return atoi(tagChar);
}
void insertTag(const uint32_t tagData)
{
if (client.connect(server, 80))
{
Serial.println(F("connected to Webservice"));
client.print("GET /datenbank_projekt/rfid.php?tag=");
client.print(tagData);
client.print(" HTTP/1.1\r\n");
client.print("Host: Arduino\r\n"); //!!!!!!!!!!!!!!!!!!!!!!
client.print("Connection: close\r\n");
client.print("\r\n");
while (client.connected())
{
if (client.available())
{
Serial.print(client.read());
}
}
}
client.stop();
}
Aber Achtung: Es gibt keine Garantie, das der TAG vollständig gelesen wurde.
Da gehört noch ein wenig drumrum. Du könntest u.a. noch Vergleiche mit einer Liste machen, oder die tatsächliche Länge prüfen etc. pp... Oder eine lib nehmen, die Dir das alles abnimmt...
Macht "atoi" tatsächlich ein uint_32 ?
Nö, macht es nicht. steht ja da to i (und int ist auf den 8 Bit AVR halt 16 Bit signed). Besser wäre strtoul(...).
Gruß Tommy
Das ist eine Gemeinschaftsaufgabe, an der sich mehrere beteiligen.
Ich erwarte einfach auch, das, wenn ich schon die Aufgabe als solche löse, sich dann ggfls damit befasst oder zumindest bei Fragen diese gestellt werden.
Wie zu sehen ist, hat es @grauhalz und @buny42 ausgereicht, denn sonst wären in den letzten Stunden noch irgendwelche Reaktionen gekommen.
Hello, habe mich tatsächlich damit auseinander gesetzt und versucht alles genau zu verstehen, zusätzlich dazu habe ich den php Code auch bearbeitet sodass erstmal alles läuft, arbeite aktuell daran gleich mehrere Daten in die Datenbank zu schreiben. Ich danke dir wirklich sehr für deine Hilfe und mit dem Missverständnis mit Buny42 tut mir das sehr leid. Ich schätze deine hilfe wirklich sehr und ich wollte nicht das es so wirkt das ich einfach den code will und mehr nicht. Mir macht das wirklich sehr spaß und finde es toll dass das Forum auch so aktiv ist. Gibt es möglichkeiten von einem Privatchat hier? Habe ein paar fragen die ich dir gerne stellen würde aber das den thread meiner meinung nach echt zu müllen würde. Arbeite aktuell nur morgens daran dementsprechend morgen früh auch wieder. Tut mir wirklich leid wenn das scheisse gewirkt hat, wollte dich aber in keinem fall bloß ausnutzen
Kurzer Zwischenruf: Nein ich habe absichtlich mein Profil so eingerichtet, das eine direkte Kontaktmöglichkeit nicht gegeben ist.
Das aus gutem Grund.
Wenn Du Fragen hast, dann frag.
Wenn ich nicht antworte, dann tun es andere.
Das Forum lebt davon.
Und ja, manchmal sind die Antworten auch nicht zu verstehen - aber das geht mir genauso.
Von daher: Wenn Dein "Problem" gelöst ist, dann markier die Lösung. Die Suchfunktion des Forum nutzt das nämlich auch Und für alles andere findet sich schon was...
Ich versuche in meinem Projekt RFID Daten per Arduino auszulesen, die dann in der mysql Datenbank gespeichert werden. Anbei ist mein Arduino Code. Mir wird im Serial Monitor ausgegeben:
...trying...
...got: 0 retrying...
...trying...
...got: 0 retrying...
...trying...
...got: 0 retrying...
Fehler beim Verbinden mit MySQL-Server
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <MFRC522.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#define SS_PIN 8
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
byte mac[] = {0xA8, 0x61, 0x0A, 0xAE, 0x96, 0x50}; // MAC-Adresse des Ethernet-Shields
IPAddress ip(169, 254, 243, 37); // IP-Adresse des Arduino-Boards
IPAddress server_addr(127, 0, 0, 1); // IP-Adresse des MySQL-Servers (localhost)
char user[] = "root"; // Benutzername des MySQL-Servers
char password[] = " "; // Passwort des MySQL-Servers
char INSERT_SQL[] = "INSERT INTO rfid_datenbank (Nummer, RFID_Tag, Bezeichnung, Zeitpunkt) VALUES ('1', '%s', 'Beispielbezeichnung', NOW())";
EthernetClient client;
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);
delay(1000);
SPI.begin();
mfrc522.PCD_Init();
if (conn.connect(server_addr, 80, user, password)) {
Serial.println("Erfolgreich verbunden mit MySQL-Server");
}
else {
Serial.println("Fehler beim Verbinden mit MySQL-Server");
}
}
void loop() {
if (mfrc522.PICC_IsNewCardPresent()) {
if (mfrc522.PICC_ReadCardSerial()) {
String content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ""));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
content.toUpperCase();
char query[128];
sprintf(query, INSERT_SQL, content.c_str());
Serial.println(query);
MySQL_Cursor *cursor = new MySQL_Cursor(&conn);
cursor->execute(query);
delete cursor;
Serial.println("RFID-Tag erfolgreich in die Datenbank eingefügt");
}
}
delay(100);
}
Das ist mein php skript für die Datenbankanbindung (phpmyadmin) auf dem Webserver(XAMPP Apache)
<?php
class rfid_datenbank{
public $link='';
function __construct($Nummer, $RFID_Tag, $Bezeichnung, $Zeitpunkt){
$this->connect();
$this->storeInDB($Nummer, $RFID_Tag, $Bezeichnung, $Zeitpunkt);
}
function connect(){
$this->link = mysqli_connect('localhost','root','') or die('Cannot connect to the DB');
mysqli_select_db($this->link,'rfid') or die('Cannot select the DB');
}
function storeInDB($Nummer, $RFID_Tag, $Bezeichnung, $Zeitpunkt){
$query = "INSERT INTO `rfid_datenbank` SET Nummer='".$Nummer."', RFID_Tag='".$RFID_Tag."', Bezeichnung='".$Bezeichnung."', Zeitpunkt='".$Zeitpunkt."'";
$result = mysqli_query($this->link, $query) or die('Errant query: '.$query);
}
}
if(isset($_GET['Nummer']) && isset($_GET['RFID_Tag']) && isset($_GET['Bezeichnung']) && isset($_GET['Zeitpunkt'])){
error_reporting(0);
$rfid_datenbank = new rfid_datenbank($_GET['Nummer'], $_GET['RFID_Tag'], $_GET['Bezeichnung'], $_GET['Zeitpunkt']);
echo "Data stored successfully.";
} else {
echo "Please provide Nummer, RFID_Tag, Bezeichnung and Zeitpunkt parameters.";
}
?>
Ich habe alle Firewalleinstellungen vorgenommen und die jeweiligen Ports freigegben. Kann es eventuell auch sein das mein php skript überarbeitet werden muss ?
Vielleicht solltest Du Dich mit @grauhalz zusammentun.
Der hat das selbe Verständnisproblem.
Wir sitzen gemeinsam am selben Projekt. Wenn das nur ein Verständnisproblem ist, kannst du es ja mit Sicherheit lösen