Lagre informasjon fra Arduino i SQL database ved hjelp av php POST


Reklame - Artikkelen inneholder annonselenker

Etter mange timer med feilsøking og lesing om Arduino og php, har jeg endelig fått til å oppdatere serveren med informasjon fra Arduinoen. I fjor sommer hadde jeg live-oppdatering på bloggen med informasjon fra dammen, men etter en Harddiskkrasj mistet jeg kildekoden.

En av årsakene til at jeg må bruke php til å oppdatere SQL server er at One.com (som er min server eier) ikke tillater direkte pålogging på SQL server utenfor deres server.

Det man i utgangspunktet trenger er en SQL server (for eksempel hos One.com*), en Arduino*, et Ethernet kort* eller Wifi kort til Arduino.

Så for å hjelpe meg selv og andre til å forstå oppbyggingen legger jeg ut kodene her.

Steg 1

Steg 1 er å opprette en tabell i databasen som skal benyttes. Jeg har gitt tabellen navnet test. Kolonne 1 er ID (Atuo Inc og unik) og Kolonne 2 heter tall

Steg 2

Første fil man må lage er Connect.php. Denne gjør selveste påloggingen på server. Denne filen lagres på serveren. I mitt tenkte tilfelle blir da adressen til filen https://www.hushagehobby.no/testkode/Connect.php

Connect.php

<?php

//Database informasjon
$username="brukernavn"; //brukernavnet i databasen
$password="passord"; //passordet til databasen
$dbname="databasenavn";
$servername = "servernavn"; 

//Selve oppkoblingen
$db = new mysqli($servername,$username,$password,$dbname);

// Sjekker tilkobling
 if ($db->connect_error) {
    die("Feil med database, feilkode:" . $db->connect_error);
}

?>

Steg 3

Den andre filen er test.php. Lagres på samme plass som Connect.php

test.php    

<?php

error_reporting(0); //for ikke å vise feilmelding ved evt. feil
require 'connect.php';

$tallet=$_POST["test1"];

$sql = "INSERT INTO `test` (`tall`)
   VALUES ('".$tallet."')";

if ($db->query($sql) === TRUE) {
echo "Ny linje skrevet til database med verdi:" ;
echo $tallet;
echo "n";} 
else {
echo "Error: " . $sql . "<br>" . $db->error;
}
$db->close();

?>

Steg 4

Last opp kildekode til Arduino. (Jeg har brukt WebClient skissen til Arduino som utgangspunk)

/* www.hushagehobby.no 
 * Enkelt SQL PHP testprogram for Ethernetkort
 * 25/4-2017
 *  
 * Test Arduino Mega - Luxorparts Ethernet-shield 
 */

#include <SPI.h>  // Serial Peripheral Interface (SPI) kommunikasjon mellom to mikrokontrollere
#include <Ethernet.h> // Ethernet kommunikasjon

byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 }; // MAC Addressen til kortet. Finn på en selv dersom det ikke står på kortet. NB! Må være unik på nettverket


char server[] = "www.hushagehobby.no"; // Adressen til serveren (NB! uten http://)

IPAddress ip(192, 168, 0, 177); // I tilfelle problem med DHCP server

EthernetClient client; //Forteller at Ethernet client-biblioteket skal startes 

void setup() {
  
  Serial.begin(9600);

//Starter Ethernet tilkobling
if (Ethernet.begin(mac) == 0) {
    Serial.println("Feil med DHCP");
   // forøsker å starte med IP adresse i stedet for DHCP:
    Ethernet.begin(mac, ip);
  }

//gir litt tid til Ethernet kortet å stare opp
delay(1000);
Serial.println("kobler opp...");

if (client.connect(server, 80)) {
    Serial.println("Tilkoblet");
client.println("POST /test.php HTTP/1.1"); 
client.println("Host: www.hushagehobby.no"); //Server adresse uten http:// pass på formange mellomrom skaper problemer 
client.println("Content-Type: application/x-www-form-urlencoded;");
client.println("Content-Length: 7"); // tallet byttes ut i forhold til lengden på det som sendes. Alternativt kan det telles automatisk, men droppet det i denne test koden.
client.println("");
client.println("test1=9"); // test1 er identifikator til php kode, og 9 er tallet som skal havne i SQL tabell
client.println();
}
}

void loop(){

// dersom det er innkommende info fra server, skrives disse i "Seriell Overvåker"
  
if (client.available()) {
 char c = client.read();
 Serial.print(c);
 }

// dersom server er ferdig, stop klienten:
  if (!client.connected()) {
    Serial.println();
    Serial.println("kobler fra...");
    client.stop();
Serial.println("frakoblet");
//gjør ingen ting mer:
while(true);
}
}

Steg 5

Så nå gjenstår den store testen.. Åpne Seriell Overvåker og kryss fingrene. Dersom alt virker som det skal, vil den se slik ut:

SQL server tabell vil da se slik ut:

Dersom det er noe som er uklart eller feil i koden, så skriv gjerne en kommentar

 

* Affilate link

 



Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *