Search

Register

Thanks for signing-up! You will receive an email with further instructions to activate your account!

username already taken
You already have an account? .

Login

Forgot password?
Don't have an account yet? Register now for using the UI-Designer and the forum or creating projects.

NetIO with Gnublin

Project Information

Attached UI-Designer Configs
NetIO with Gnublin
NetIO with Gnublin.

Description

Hier eine kleine Anleitung, wie du NetIO auch auf deinem
Gnublin zum laufen bekommst:

1. NetIO App aus dem Apple App Store installieren (Wie in den Tutorials beschrieben).

Die (rechts–>) angehängte UI-Designer Config auf das Handy laden.


2. Gnublin Seite (Python)

Gnublin mit Netzwerk verbinden.
http://wiki.gnublin.org/index.php/WLAN

Mit ifconfig IP des Gnublin ansehen
und in der App eintragen.

Bevor man die API in Python nutzen kann laden
wir uns die folgenden beiden Dateien herunter:

root@gnublin:~$ wget https://raw.github.com/embeddedprojects/gnublin-api/master/python-module/gnublin/gnublin.py --no-check-certificate
root@gnublin:~$ wget https://github.com/embeddedprojects/gnublin-api/raw/master/python-module/gnublin/_gnublin.so --no-check-certificate


Die beiden Dateien holen wir dann direkt auf unser Gnublin.


Hole dir die unten angehängte Datei entweder mit:
root@gnublin:~$ wget http://netio.davideickhoff.de/media/attachments/gnublin_netio_1.zip

Und entpacke diese mit:
root@gnublin:~$ unzip gnublin_netio_1.zip

ODER:

Erstelle eine Datei test.py und kopiere Folgendes
hinein und schiebe siehe via scp auf dein Gnublin:
http://wiki.gnublin.org/index.php/Administration_per_SSH
#!/usr/bin/python
import asyncore
import socket
import select
import subprocess
import gnublin
import os
gpio = gnublin.gnublin_gpio()
gpio.pinMode(3, 'out')
gpio.pinMode(18, 'out')
class Client(asyncore.dispatcher_with_send):
    def __init__(self, socket=None, pollster=None):
        asyncore.dispatcher_with_send.__init__(self, socket)
        self.data = ''
        if pollster:
            self.pollster = pollster
            pollster.register(self, select.EPOLLIN)
    def handle_close(self):
        if self.pollster:
            self.pollster.unregister(self)
    def handle_read(self):
        receivedData = self.recv(8192)
        if not receivedData:
            self.close()
            return
        receivedData = self.data + receivedData
        while '\n' in receivedData:
            line, receivedData = receivedData.split('\n',1)
            self.handle_command(line)
        self.data = receivedData
    def handle_command(self, line):
        if line == 'LED1 on':
            self.send('on')
            gpio.digitalWrite(3,1)
        elif line == 'LED1 off':
            self.send('off')
            gpio.digitalWrite(3,0)
        elif line == 'RELAY open':
            self.send('off')
            gpio.digitalWrite(18,0)
        elif line == 'RELAY close':
            self.send('off')
            gpio.digitalWrite(18,1)
        else:
            self.send('unknown command')
class Server(asyncore.dispatcher):
    def __init__(self, listen_to, pollster):
        asyncore.dispatcher.__init__(self)
        self.pollster = pollster
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.bind(listen_to)
        self.listen(5)
    def handle_accept(self):
        newSocket, address = self.accept()
        print "Connected from", address
        Client(newSocket,self.pollster)
def readwrite(obj, flags):
    try:
        if flags & select.EPOLLIN:
            obj.handle_read_event()
        if flags & select.EPOLLOUT:
            obj.handle_write_event()
        if flags & select.EPOLLPRI:
            obj.handle_expt_event()
        if flags & (select.EPOLLHUP | select.EPOLLERR | select.POLLNVAL):
            obj.handle_close()
    except socket.error, e:
        if e.args[0] not in asyncore._DISCONNECTED:
            obj.handle_error()
        else:
            obj.handle_close()
    except asyncore._reraised_exceptions:
        raise
    except:
        obj.handle_error()
class EPoll(object):
    def __init__(self):
        self.epoll = select.epoll()
        self.fdmap = {}
    def register(self, obj, flags):
        fd = obj.fileno()
        self.epoll.register(fd, flags)
        self.fdmap[fd] = obj
    def unregister(self, obj):
        fd = obj.fileno()
        del self.fdmap[fd]
        self.epoll.unregister(fd)
    def poll(self):
        evt = self.epoll.poll()
        for fd, flags in evt:
            yield self.fdmap[fd], flags
if __name__ == "__main__":
    pollster = EPoll()
    pollster.register(Server(("",54321),pollster), select.EPOLLIN)
    while True:
        evt = pollster.poll()
        for obj, flags in evt:
            readwrite(obj, flags)



Danach einfach: python test.py

Starte die NetIO App und bediene den Schalter.
Die onboard LED wird ein- und ausgeschaltet.

Viel Spaß beim weiterbasteln.

Attachments