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