Bananapi + DS18B20 és python + web

Ennek a cikknek a fabrikálásába azért kezdtem bele, mert nem nagyon találtam Ubuntu 15.04 alá igazán jó leírásokat arról, hogy a DS18B20-at hogyan illesszem a One-wire-el a Bananapihez. Nem annyira vészes itt sem, de kicsit másabb mint a neten fellelhető leírások zöme ami Bananian alá vagy épp más Debian alapú oprendszer alá készültek.

Első lépésben telepítsük a megfelelő programokat.

sudo apt-get update
apt-get install libusb-1.0-0-dev
sudo apt-get install sunxi-tools

Ha ezzel megvagyunk akkor, akkor nyissunk egy terminált, és hajtsuk végre a következő műveleteket:

Első lépés:

fdisk_picItt most megnéztük mi a boot partíciónk neve. Mert ezt a partíciót kell felcsatolni.

Második lépés:

mount_and_listItt felcsatoltuk a boot partíciót az “mnt” mappába, és kilistáztuk a benne lévő fájlokat.

Harmadik lépés: script2fex

Itt most beléptünk a “/usr/share/sunxi-tools” mappába és átkonvertáltuk a “script.bin” fájlt “fex” formátumba. Majd kilistáztuk a fájlokat.

Negyedik lépés:

nano script.fex

script.fexEbben a lépésben szerkesztjük a “script.fex” fájlt és hozzáadjuk az alsó 4 sort. Ennek megfelelően kell majd a bekötést is végrehajtani. GPIO0, GPIO1, GPIO7 valamelyikére. Ezt most nem részletezném, mert ez annyira nem bonyolult.

Ötödik lépés:

fex2bin script.fex /mnt/script.bin
umount /mnt 
ls /sys/bus/w1/devices/

devicesVégül 6. lépésben:

crc_testItt láthatjuk, hogy az eszközünk kommunikál és azt is, hogy 23,750 Celsius fok van.

Nah és ennek fejébe jön most a python kód, ami webes környezetbe illeszti az egészet.

#!/usr/bin/python

import os
import time
import urllib2

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
temp_sensor = '/sys/bus/w1/devices/28-0315a854a8ff/w1_slave'

def temp_raw():

    f = open(temp_sensor, 'r')
    lines = f.readlines()
    f.close()
    return lines

def read_temp():

    lines = temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = temp_raw()
    temp_output = lines[1].find('t=')
    if temp_output !=-1:
        temp_string = lines[1].strip()[temp_output+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c
       #return temp_c, temp_f

while True:
        temperature = read_temp()
        temp_string = str(round(temperature,3))
        link = 'http://localhost/temp.php?temp='+temp_string
       #print link
        resp = urllib2.urlopen(link)
        html = resp.read()
        print html
       #print(read_temp())
        time.sleep(60*15-1)

Itt a kódot értelemszerűen kell átalakítani, mert az eszköz azonosítója nyílván nem az lesz mint nálam, plusz ha valaki nem localhostra akarja kinyomni ezeket az adatokat, akkor persze az URL-t is át kell írni.

Ami pedig a webes részt illeti, egy korábbi cikkben már körbeírtam a kutyafittyet. Ezt és a webes fájlokat megtaláljuk <-ITT->

A beállítások és az előző cikkben leírtak teljes mértékben kompatibilisek a fent ismertetett python script-el. Lustaság fél egészség, senki se dolgozzon kétszer. Remélem mindenkinek hasznos volt ez a kis szösszenet. Akinek nem az Send me Email.

(Statisztika: 31 megtekintés)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.