INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MySQL Beispielcode verstehen
16.10.2016, 17:09 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2016 17:16 von RonSH.)
Beitrag #1
MySQL Beispielcode verstehen
Hallo, für mein Vorhaben Hier im Forum möchte ich eine Datenbank nutzen. (Lesen/Schreiben)
Ich habe mir ein Beispielcode gesucht, um erstmal das ganze zu verstehen.
Code:
// Example: Hello, MySQL!

#include "SPI.h"
#include "Ethernet.h"
#include "sha1.h"
#include "mysql.h"

/* Setup for Ethernet Library */
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(127, 0, 0, 1);

/* Setup for the Connector/Arduino */
Connector my_conn; // The Connector/Arduino reference

char user[] = "ardu";
char password[] = "648259";
char INSERT_SQL[] = "INSERT INTO test_arduino.hello VALUES ('Hello, MySQL!', NULL)";

void setup() {
  Ethernet.begin(mac_addr);
  Serial.begin(9600);
  delay(1000);
  Serial.println("Connecting...");
  if (my_conn.mysql_connect(server_addr, 3306, user, password))
  {
    delay(500);
     /* Write Hello, World to MySQL table test_arduino.hello */
     my_conn.cmd_query(INSERT_SQL);
     Serial.println("Query Success!");
  }
  else
    Serial.println("Connection failed.");
}

void loop() {
}

Ich habe oben meine Daten eingefügt und eine Datenbank erstellt.

So, wie ich das verstanden habe, muss die Datenbank "test_arduino.hello" heißen und ein table mit der selben Bezeichnung erstellt werden.

Nach dem ich alles eingerichtet habe, wird mir natürlich nichts angezeigt.
Weder der Serielle Monitor noch die Datenbank gibt was wieder.

Kann mir jemand das Beispiel erklären?

Lg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 17:30 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2016 19:00 von Tommy56.)
Beitrag #2
RE: MySQL Beispielcode verstehen
Fangen wir mal bei den Grundlagen an.

Wir haben einen Server, auf dem die MySQL-Datenbank läuft.
Das muss eine Adresse in deinem lokalen Netz sein, nicht die 127.0.0.1! Die fängt meistens mit 192.168. an.
Das ist die IP von dem Rechner wo Du Dein XAMPP installiert hast.
Die bekommst Du über den Befehl ipconfig raus.

Die 127.0.0.1 ist immer die lokale IP des jeweiligen Rechners. Wenn Du auf dem PC die 127.0.0.1 aufrufst, bist Du auf dem PC, wenn Du das vom Arduino aus tust, auf dem Arduino.

Code:
#include <SPI.h> // SPI für EthernetShield
#include <Ethernet.h> // Ethernet
#include <mysql.h> // MySql Connector
#include <sha1.h> // sha Crypto

static IPAddress dbAdresse(192, 168, 178, 5); // IP-Adresse MySQL Server

EthernetClient client; // EthernetClient - Instanz erstellen
static char user[] = "arduino"; // SQL-Nutzer
static char password[] = "ardu"; // SQL Kennwort
static char db[] = "ardutest";
static char TEST_SELECT_QUERY[] = "SELECT 1 FROM dual LIMIT 1"; // MySQL Query
static IPAddress dbAdresse(192, 168, 178, 5); // IP-Adresse MySQL Server
static byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x9B, 0xC1 }; // MAC-Adresse des Arduino
Connector my_conn; // Connector - Instanz erstellen

void setup() {
  Serial.begin(9600);
  Serial.println("Start");
  Ethernet.begin(mac); // EthernetClient starten DHCP
  delay(1000);  // 1 Sekunde warten
  Serial.print("Meine IP ist ");
  Serial.println(Ethernet.localIP());
  Serial.print("Server IP: ");
  Serial.println(dbAdresse);
  if (my_conn.mysql_connect(dbAdresse, 3306, user, password)) {
    delay(1000);
  }
  else {
    Serial.println("Connection failed.");
  }
}

Du hast wohl schon ein Ethernet Shield oder ein Ethernet Modul angeschlossen (welches?)

Wie Deine Datenbank heißt ist egal, ebenso wie Deine Tabellen heißen. Du solltest es vermeiden, beides gleich zu benennen.

Dann brauchst Du noch einen Benutzer, den Du in Deiner Datenbank anlegst (nicht root benutzen) und dem Du für den Zugriff alle Hosts (*) gibst.

Dann musst Du Deine Tabelle anlegen. Mit Create Table.
Die Tabellenstruktur schreibst Du dann hier rein und dann gehen wir den nächsten Schritt.

Gruß Tommy

Edit: my_conn ergänzt
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 19:19 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2016 19:42 von RonSH.)
Beitrag #3
RE: MySQL Beispielcode verstehen
Ich habe das W5100 Ethernet Shield. Momentan benutze ich ein Uno R3 Board. Ich habe aber auch ein Mega liegen.

Ich habe ein Bild angehängt wo die Tabellenstruktur zu erkennen ist.
Benutzer: arduino
pw: ardu

Datentypen:
id = int(11)
name = text
guthaben = int(11)
datum = date

Ich habe versucht, die Grundlagen aus dem Buch "Die elektronische Welt mit Arduino" zu erlernen. Ich habe auch ein paar Projekte probiert. Aber der Lernerfolg bleibt irgendwie aus. Ich könnte jetzt so aus dem stehgreif kein eigenes Projekt umsetzen.
Wie geht ihr vor?
Sollte man sich mehr mit C beschäftigen?

folgende Ausgabe sehe ich jetzt auf dem seriellen Monitor

Start
Meine IP ist 0.0.0.0
Server IP: 192.168.1.20
Connection failed.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 20:14
Beitrag #4
RE: MySQL Beispielcode verstehen
(16.10.2016 19:19)RonSH schrieb:  Ich habe das W5100 Ethernet Shield. Momentan benutze ich ein Uno R3 Board. Ich habe aber auch ein Mega liegen.

Ich habe ein Bild angehängt wo die Tabellenstruktur zu erkennen ist.
Benutzer: arduino
pw: ardu

Datentypen:
id = int(11)
name = text
guthaben = int(11)
datum = date

Ich habe versucht, die Grundlagen aus dem Buch "Die elektronische Welt mit Arduino" zu erlernen. Ich habe auch ein paar Projekte probiert. Aber der Lernerfolg bleibt irgendwie aus. Ich könnte jetzt so aus dem stehgreif kein eigenes Projekt umsetzen.
Wie geht ihr vor?
Sollte man sich mehr mit C beschäftigen?

folgende Ausgabe sehe ich jetzt auf dem seriellen Monitor

Start
Meine IP ist 0.0.0.0
Server IP: 192.168.1.20
Connection failed.

1. erstmal würde ich prüfen ob das auch wirklich die richtige adresse ist !
2. ist der mysql server überhaupt gestartet??
ohne dass er gestartet ist kann man in nicht connecten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 21:06 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2016 22:04 von RonSH.)
Beitrag #5
RE: MySQL Beispielcode verstehen
Die IP habe ich der Lan Verbindung zugewiesen.
Die XAMPP Dienste laufen beide.

Ich habe die IP-Adresse des LanAdapters jetzt auf 192.168.178.5 geändert.
XAMPP erreiche ich jetzt auch über diese Adresse.

Trotzdem bekomme ich keine Verbindung.

Start
Meine IP ist 0.0.0.0
Server IP: 192.168.178.5
Connection failed.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 21:24
Beitrag #6
RE: MySQL Beispielcode verstehen
(16.10.2016 21:06)RonSH schrieb:  Die IP habe ich der Lan Verbindung zugewiesen.
Die XAMPP Dienste laufen beide.

" if (my_conn.mysql_connect(dbAdresse, 3306, user, password))"

user und passwort müssen auch eingerichtet sein.

was xampp macht weiss ich net, meine db's connecte ich direkt zu mysql
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 22:16 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2016 22:47 von RonSH.)
Beitrag #7
RE: MySQL Beispielcode verstehen
So, ich bin weiter gekommen. Ich habe alles erneut aufgesetzt und zusätzlich Regeln in die Firewall geschrieben. Dann habe ich den Code noch um eine Zeile ergänzt.
Code:
static byte ip[] = {192, 168, 178, 10 };

Start
Meine IP ist 192.168.178.10
Server IP: 192.168.178.5
Connected to server version 5.5.5-10.1.16-MariaDB


Ich freue mich schon auf das weitere Vorgehen. Das war schon mal ein kleiner Erfolg für mich. Dank euch
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.10.2016, 12:00
Beitrag #8
RE: MySQL Beispielcode verstehen
(16.10.2016 22:16)RonSH schrieb:  Start
Meine IP ist 192.168.178.10
Server IP: 192.168.178.5
Connected to server version 5.5.5-10.1.16-MariaDB

Ich freue mich schon auf das weitere Vorgehen. Das war schon mal ein kleiner Erfolg für mich. Dank euch
Prima, das ist schon die halbe Miete.

Bei der Tabelle würde ich noch mehr die Dienste der Datenbank nutzen, um Fehler un Deinen SQL-Statements schneller zu finden.

Spalte ID sollte Primärschlüssel und autoincrement sein, da brauchst Du Dich damit nicht auf dem Arduino zu beschäftigen. Die anderen Felder sollten "not null" sein, damit Du was rein schreiben musst und die Datenbank meckert, wennn es leer ist.

Beim Datum kommt es darauf an, was Du damit machen willst. Wenn Du es nur als internen Indikator nehmen willst, wann das letzt Mal der Datensatrz angefasst wurde, dann sollte es Timestamp sein.
Irgendwo musst Du auch noch die RFID abspeichern. Die würde ich nicht als Zahl, sondern als Zeichenkettte nehmen, falls führende Nullen vorhanden sind.

Ich würde die Tabelle so anlegen:
Code:
-- alte Tabelle löschen
DROP TABLE ardu_tabelle;
-- Tabelle anlegen
CREATE TABLE IF NOT EXISTS `ardu_tabelle` (
`id` int(11) NOT NULL,
  `name` text COLLATE utf8_german2_ci NOT NULL,
  `guthaben` int(11) NOT NULL,
  `rfid` varchar(20) COLLATE utf8_german2_ci NOT NULL,
  `datum` timestamp NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_german2_ci;

-- id als Primärschlüssel, rfid als unique key
ALTER TABLE `ardu_tabelle`
ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `rfid` (`rfid`);

-- id als autoincrement
ALTER TABLE `ardu_tabelle`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Wie bekommen wir nun Daten in die Tabelle?

Code:
-- wir schreiben die id nicht
INSERT INTO ardu_tabelle (name, guthaben, rfid, datum) VALUES ('Meier',100, '12345678' ,now())
Dabei ist wichtig, dass Du den Inhalt der Felder name und rfid immer in einfache Anführungszeichen setzt. Lege Dir ein paar Leute an.

Wie können wir das Guthaben ermitteln?
Code:
SELECT id,name, rfid, guthaben FROM ardu_tabelle WHERE rfid = '12345678'
Die id merken, da Du mit der direkt zugreifen kannst.

Das Guthaben verringern/ vergrößern:
Code:
UPDATE ardu_tabelle SET guthaben = guthaben -1 WHERE id = 1;

UPDATE ardu_tabelle SET guthaben = guthaben + 20 WHERE id = 1;

Wenn diese Sachen im PHPMyAdmin funktionieren, dann gehts an den Arduino.

In den Examples ist das Auslesen eines Select ziemlich gut beschrieben. Versuche mal, ob Du es schaffst. Ansonsten wieder melden.

Schaue vorher mal in Deiner mysql.h nach, ob in Zeile 42 steht
Code:
#define WITH_SELECT

oder

//#define WITH_SELECT
Bei der 2. Variante kannst Du keine SELECT-Statements absetzen, bei Dir muss also die 1. Variante stehen.

Noch was zur Auswahl der Datenbank. Auf einem Datenbankserver können unter der gleichen IP viele Datenbanken liegen.
Du hast jetzt 2 Möglichkeiten.
1. Du schreibst den Datenbanknamen immer vor den Tabellennamen.
Code:
ardutest.ardu_tabelle
2. Du selektierst am Anfang die Datenbank:
Code:
myConn.cmd_query("use ardutest");
und kannst dann einfach mit den Tabellennamen arbeiten.

Erst mal bis hierher und wir schauen mal, was funktioniert.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Daten an mysql diode1990 24 1.303 31.07.2016 10:29
Letzter Beitrag: Gandalf
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 181 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Sensordaten in MYSQL speichern rieders 3 693 02.03.2016 19:58
Letzter Beitrag: rieders
Sad Arduino Shield Verbindung bricht ab (PHP Skript,Mysql Datenbank) julius858 12 3.295 19.02.2016 11:26
Letzter Beitrag: IBES1410
  Arduino RF Transceiver und MySQL via PHP 420greenbrain 2 1.077 27.04.2015 22:50
Letzter Beitrag: 420greenbrain
  MYSQL Connector String dossidr 0 430 24.03.2015 22:44
Letzter Beitrag: dossidr
  Arduino SOLL-Werte von MySql abfragen sepro 5 1.861 01.08.2014 18:44
Letzter Beitrag: rkuehle

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste