keskiviikko 25. huhtikuuta 2018

tiistai 24. huhtikuuta 2018

Voi jummi

No kestipäs hieman saada näin yksinkertainen ohjelma toimimaan, hah hah. Kaikkea sitä oppii.
No nyt pelittää, tästä se lähtee.

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.

torstai 12. huhtikuuta 2018

Tää toimii

Kyllä koodaaminen on kuin syömään rupeais 😊

Testasin ensin Python-ohjelman toiminnan Raspberryn työpöydällä. Kuinka vaikeaa onkaan ottaa kuvaruutukaappaus Raspbianilla, puhumattakaan videoida. Ohje kuvaruutukaappaukseen täältä: https://www.imore.com/how-take-screenshot-raspberry-pi

No, ohjelma toimii, eli työpöydälle syntyy json.tietokanta, ja se myös päivittyy.

Kreditit Janille ja Villelle.

Sitten se jQuery. Eli micro:bitillä painetaan nappia, ja nettisivun divi liikkuu.
Koodipohja saatiin taas Villeltä. Ohjelma lukee json-tietokantaa.

// Koodi saatu Ville Heikkiniemeltä
// Haetaan JSON
function haeJson(e){
$.ajax({
cache: false,
url: 'data.json',
dataType: 'json',
success: function(data) {
var date = new Date(data['REF']*1000);
if (parseInt((date.getTime() / 1000), 10) - data['YY'] < 5){
$( "#keski1" ).addClass( "liikkuu" );
} else { $( "#keski1" ).removeClass( "liikkuu" ); }
if (parseInt((date.getTime() / 1000), 10) - data['II'] < 5){
$( "#keski3" ).addClass( "liikkuu" );
} else { $( "#keski3" ).removeClass( "liikkuu" ); }
}
});
setTimeout("haeJson()" ,1000);
}

function haivytys_click(lohko) {
var _lohko = document.getElementById(lohko);
_lohko.onclick = function() { _lohko.classList.add("liikkuu"); }
_lohko.ondblclick = function() { _lohko.classList.remove("liikkuu"); }
}


// Funktio joka ladataan sivun lataamisen yhteydessa
window.onload = function() {
haivytys_click('keski1');
haivytys_click('keski3');
haeJson();
}


Tää toimii!


torstai 5. huhtikuuta 2018

Toinenkin div liikkuu

Lisätään sama divin kasvaminen oikeaankin reunaan.





No onpas tyhmän näköistä koodia. Kun jos liikkuvia osia olisikin useampi. Tämä tarvinnee jQueryä.