CategoryProjects

Omia projekteja sekä projekteja joissa olen ollut mukana.

MySQL ja transaktiot

MySQL transaktioita tehdessäni vastaan tuli ongelma, jossa transaktiot eivät toimineet. MySQL:ssä oletus moottorina on MyISAM. MyISAM:lla on omat hyvät puolensa, jonka takia se on valittu oletus moottoriksi, mutta huonona puolena on, että se ei tue transaktioita. Jos haluat käyttää transaktioita on taulussa vaihdettava moottori InnoDB:seen. MyISAM:n ja InnoDB:n hyvistä ja huonoista puolista löytyy paljon artikkeleita googlettamalla esim. “MySQL MyISAM vs InnoDB”. Transaktiot ovat kuitenkin sen verran hyödyllisiä, että niiden takia on järkevämpää käyttää InnoDB:tä.

Oma prototyyppi, Hellemittari!

Suunnittelimme ja rakensimme luokkakaveri Samuelin kanssa oman prototyypin kurssin lopputyönä. Näin kesän alkussa on tarvetta laittaa kuntoon oma Hellemittari!

Hellemittari mittaa LM35 lämpömittarisensorilla ilman lämpötilaa. Me puolestaan loimme siihen visuaalisen näyttötavan sekä mittaria on mahdollista lukea myös etänä. Kun teimme proton yhteistyöllä niin sovimme, että minä hoidan mittauspuolen eli mittaan ilman lämpötilan ja syötän sen tietokantaamme. Samuel taas puolestaan hoitaa lämpötilan hakemisen sekä yhteis työllä työstimme visuaalisen lämpötilan näyttötavan.

Kun lähdetään paremmin tarkastelemaan itse lämpötila mittaria se näyttänee tältä:

2012-05-14-077

Ylläoleva piiri kertoo ilman lämpötilan, kun sitä siltä kysytään. Lähdekoodit löytyvät alta:

/**
 * Niko Kiuru
 * License: GPL version 2 or later
 */
float tempc = 0; // Celsius
int readPin = 0;
char variable = 0;
void setup() {
Serial.begin(9600); // bit/s
pinMode(13, OUTPUT);
}

void loop() {
variable = Serial.read();
if (variable == 's') {
tempc = analogRead(readPin);
tempc = (5.0 * tempc * 100.0)/1024.0;
Serial.print(tempc);
variable = 0;
delay(100);
}
}

Kyseistä Arduinoa ohjataan meidän tekemällä python ohjelmalla, joka lähettää tietyn väliajoin pyyntöjä Arduinolle ilman lämpötilasta. Alta löytyy lähdekoodit:

## Niko Kiuru
## License: GPL version 2 or later
import serial
import urllib2
import time

ser = None

def main():
global ser
ser = serial.Serial("/dev/ttyACM1")
print("Temperature Server Starting...")
while (ser):
print("Serial port " + ser.portstr + " opened.")
ch = 's'
print("Sending...")
ser.write(ch)
degree = ser.read(5)
print degree
# url = osoite johon otetaan yhteyttä degree parametrilla
# Esimerkki urli:
url = 'www.esimerkkidomain.com?degree=%s' % degree
urllib2.urlopen(url)
time.sleep(5)

print("Temperature Server shutdown")

if __name__ == "__main__":
main()

Tietokanta puoli toteutettiin php:n get parametreilla, jotka se vie mysql tietokantaan. Lähdekoodit alla:

/**
 * Niko Kiuru
 * License: GPL version 2 or later
 */
 $result["degree"], "time" => $result["datetime"]);
$degree_r = $result["degree"];
}

//$degreeList = json_encode($degreeList);
//print_r($degreeList);
echo $degree_r;
}

mysql_close($connect);
?>

Ylläolevan koodin saa helposti muokattua json-rajapintaa nuodattavaksi, mutta ajan loputtua emme ehtineet saamaan python ohjelman json-dekooderia toimimaan kunnolla jotta olisimme voineet käyttää sitä. Loput vaiheista toteutti Samuel, ja hän käy lävitse tekovaiheita omassa blogi postauksessaan. Linkki Samuelin blogi postaukseen: http://kontsu.wordpress.com/2012/05/14/arduino-remote-thermometer/

Ja lopuksi vielä kuva valmiista protosta:

Demovideo:

© 2017 Niko Kiuru

Theme by Anders NorenUp ↑