torstai 19. huhtikuuta 2018

Uusi microbit projekti

Dataa syntyy ja se menee säilöön.

Micro:bit http://microbit.org/ lähettää aika ajoin dataa.
Raspberry lukee dataa ja tallentaa ne sql-tietokantaan.

Nettisivulla näytetään ne tiedot.



Testataan Raspberryllä, minicom-ohjelmalla
sudo minicom -b 11520 -D /dev/ttyACM0

Toimii, tulee V:30


Sitten tein tietokannan  Raspberryyn


sqlite3 asennettu.
tietokanta.db
taulu
-avain, valo kaikki NUMERIC
Lisäsin yhden tietueen.

SQL-tietokanta


Kokeilin tietokannan lukua:
from serial import *
import time
import sqlite3

conn = sqlite3.connect('tietokanta.db')
print("tietokanta avattu")
c = conn.cursor()

c.execute("SELECT * FROM taulu")

conn.commit()

for row in c:
   print ("Aika ",row[0])

conn.close()

print("loppu")

Toimii.
Sitten koodataan lisää.
Ohjelma lukee sarjaporttia ja kirjoittaa sql-tietokantaan tietueita.

#! /usr/bin/python3
# -*- coding: utf-8 -*-
"""
Copyright (c) 2018 Jani Mantynen & Ville Heikkiniemi
Sirpa Mazarakis
Sarjaportin luku Janin ja VIllen ohjelmasta
Permission is granted to copy, distribute and/or modify this document under
the terms of the GNU Free Documentation License, Version 1.3 or any later
version published by the Free Software Foundation; with no Invariant Sections,
no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be
found online at http://www.fsf.org/licensing/licenses/fdl.txt

Ohjelma lukee sarjaportista rivin ja tekee siitä tietueen tietokantaan
"""
from serial import *
import time
import sqlite3

def Tapahtuma(data):
   #print("data ",data)
   if len(data) > 2:  
       try:
           conn = sqlite3.connect('tietokanta.db')
           #print("tietokanta avattu")
       except Exception:
           print("tietokantaa ei avattu")
           sys.exit()
           
       c = conn.cursor()
       aika = int(time.time())
       #print(aika)
       valo = int(data[2:len(data)])
       #print(valo)
       c.execute("INSERT INTO taulu VALUES (?, ?)", (aika, valo))
       conn.commit()
       conn.close()
       
def main():
   # Yritetään luoda sarjaportti
   try:
       microbit = Serial(port='/dev/ttyACM0', baudrate=115200, timeout=2)
   except Exception:
       print("tarkista portti")
   while True:
       try:
           Tapahtuma(microbit.readline().decode()) # luetaan rivi
       except KeyboardInterrupt:
           print("keskeytetään")
           sys.exit()
if __name__ == "__main__":
   main()

Paitsi että kun syöte jää puskuriin, niin sama aikaleima tulee useaan tapahtumaan. Microbitin pitäisi lähettää se aika..eiku muuttamaan.
Tai olkoot.

Sitten tätä dataa pitäisi saada nettisivulle näkyviin.

Ei kommentteja:

Lähetä kommentti