Dienstag, 10. Februar 2015

Und da warens nur noch Text

Ich habe gestern ein neues Android Telefon in Betrieg benommen. Google Konto angemeldet, Synchronisation gestartet. Nebenbei hat es dann alle meine 4000 Bilder von der Speicherkarte zu Google+ hochgeladen und angefangen irgendwelche Filter auf Bilder zu legen, die ich über Programme wie WhatsApp geschickt bekommen habe. Also habe ich auf der Google+ Webseite alle Bilder wieder gelöscht. Ergebnis davon? Keine Bilder mehr im Blog.

Alle weg und nicht mehr herstellbar.

Danke Google, das ist eine sehr sinnvolle Funktion. Nicht.

Donnerstag, 5. Februar 2015

USB Geräte über IP tunneln (usbip)

Das usbip Projekt ist seit kurzem als stabiler Bestandteil des Linuxkernels bestimmt worden. Das bedeutet, dass die Funktionalität standartmäßig in die Kernels der großen Distributionen kompiliert werden. Es herrscht allerdings noch einige Unklarheiten wie das Paket ausgeliefert werden soll. Der aktuelle (3.16) Kernel des Ubuntu 14.10 (Utopic Unicorn) hat die Module für usbip bereits dabei. Es draf bloß nicht der Fehler gemacht werden und das 'usbip' Paket aus dem Paketmanager isntalliert werden; dieses enthält eine sehr alte Version des Projekts. Vielmehr muss nur das Paket 'usbip-utils' installiert werden.

Wenn die benötigten Pakete geladen sind kann der usbip Server gestatet werden. Dieser lautet 'usbipd' und kann entweder als Programm oder im Hintergrund geladen werden.

basti@localhost:~$ sudo usbip

oder

basti@localhost:~$ sudo usbipd -D 

Um  USB Geräte über diesen Server zur Verfügung zu stellen, müssen die Kernelmodule 'usbip_core' und 'usbip_host' sowie 'vhci_hcd' geladen werden.

basti@localhost:~$ sudo modprobe usbip_core
basti@localhost:~$ sudo modprobe usbip_host
basti@localhost:~$ sudo modprobe vhci_hcd

Die Liste der verfügbaren USB Geräte kann mit 'basti@localhost:~$ usbip list -l' angezeigt werden. Die Ausgabe sieht dann zum Beispiel so aus:


 - busid 1-2 (05dc:b051)
   Lexar Media, Inc. : unknown product (05dc:b051)


Um das gewünschte Gerät zu exportieren wird dem Kernelmodul das USB Gerät übergeben. 

basti@localhost:~$ usbip bind -b 1-2

Wenn ein USB Gerät an den usbip Treiber weitergegeben wurde, steht es dem System nicht mehr zur Verfügung. Es kann allerdings mit usbip auch lokal wieder eingebunden werden. Und genau das müssen wir zuerst tun, bevor wir mit Windows die Interfaces des USB Gerätes sehen können. Weshlab das so ist, ahbe cih noch nicht herausgefunden, lediglich dass es so ist.

basti@localhost:~$ usbip list -r 127.0.0.1
Exportable USB devices
======================
 - 127.0.0.1
        1-2: Lexar Media, Inc. : unknown product (05dc:b051)
           : /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
           : (Defined at Interface level) (00/00/00)

basti@localhost:~$ sudo usbip attach -r 127.0.0.1 -b 1-2
basti@localhost:~$ usbip list -r 127.0.0.1
Exportable USB devices
======================
 - 127.0.0.1
        1-2: Lexar Media, Inc. : unknown product (05dc:b051)
           : /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
           : (Defined at Interface level) (00/00/00)
           :  0 - Mass Storage / SCSI / Bulk-Only (08/06/50)

 
Wie man an der Ausgabe sieht, erscheint das Interface erst, nachdem das Gerät einmal eingebunden wurde. Um es auf einem anderen Computer einzubinden muss es aus dem lokalen Rechner gelöst werden.


basti@localhost:~$ sudo usbip detach -p 0

Damit wird das Gerät wieder frei um von der Windows Seite her eingebunden zu werden. Das ReactOS Projekt hat für Windows signierte Treiber erstellt. Diese können auf der Webseite des usbip Projektes heruntergeladen werden. Die mit den Treibern ausgelieferte Version 0.2.0.0 von usbip.exe ist allerdings zu alt um mit dem aktuellen usbip-Server zu arbeiten. Die Quellcodes sind allerdings offen und man kann sich eine Version kompilieren, oder ihr könnt euch meine kompilierte Version von hier herunterladen. Es handelt sich dabei um die aktuellste Version des SVN Repositories.

Unter Windows muss der usbip Enumerator Treiber installiert werden. Unter Windows 7 kann das über den Gerätemanager erfolgen. Im Gerätemanager klickt man auf den lokalen Computer mit der rechten Maustaste und wählt Legacyhardware hinzufügen.
Im folgenden Dialog wählt man die manuelle Metode aus und 'Alle Geräte anzeigen'. Der Button 'Datenträger...' lässt dann zu den Ordner der usbip-Treiber auszuwählen. Installiert nun den 'USB/IP Enumerator'.
Der Treiber kann jetzt verwendet werden. Über die Kommandozeite (cmd.exe) führen wir die usbip.exe aus und binden das entfernte USB-Gerät ein.

C:\Release>usbip -l 192.168.0.1
- 192.168.0.1
   1-2: Lexar Media, Inc. : unknown product (05dc:b051)
        :
/sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
        : (Defined at Interface level) (00/00/00)
        :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)



C:\Release>usbip -a 192.168.0.1 1-2
new usb device attached to usbvbus port 1

Receive sequence:    46600



Das Gerät wird von Windows wie ein lokal angestecktes Gerät gesehen und die Treiber werden lokal installiert. Um das Gerät wieder freizugeben wird mit 'usbip.exe -d 0' das Gerät entbunden und kann andersweitig wieder verwendet werden.

Zu beachten ist, dass ein Gerät immer nur an einem PC eingebunden sein kann.


Sonntag, 1. Februar 2015

Das ESP-12 3$ WiFi Modul, oder wo könnte man überall Internet einbauen

Seit geraumer Zeit gibt es, vor allem aus China, ein Modul, dass einen ESP8266 Mikrocontroller, ein Flashspeicher, onboard Antenne und einige GPIOs besitzt. Verfügbar ist das Modul in so weit ich herausgefunden habe 14 verschiedenen Ausführungen, vom blankliegenden Controller bis hin zum voll geschirmten Modulpaket, dass die GPIOs als Lötpunkte auf der unterseite besitzt. Die Module sind alle über die üblichen Kanäle zu beziehen. Dabei sind auch die üblichen Lieferzeiten zu erwarten.

Aufbau des Moduls

ESP-12 Modul mit Breakout-Board
Ich habe mir das ESP-12 Modul mit einem Breakout-Board bestellt. Dadurch ist es möglich das Modul im Steckbrett unterzubringen und so schnell eine akzeptable Verkabelung zu erreichen. Das Modul besitzt eine LED, eine PCB-Antenne und ist ansonsten unter einem Metalldeckel abgeschirmt. Dieser Schirm trägt die Kennzeichnung, dass das Modul die Modellnummer ESP826WLAN. Mit diesen Parametern ist es hervorragend geeignet in einem WLAN Netzwerk eingesetzt zu werden. Das Modul hat eine Größe von 16x24mm Die seitlich angebrachten Lötpads sind mit 2mm Abstand angeordnet und befinden sich nicht im Bereich der Antenne. Die LED kann über den Controller gesteuert werden. Die beiden Lötpads für SMD Widerstände sind einam mit GPIO 15 und Chpi_Enable verbunden. Sie können dauerhaft auf GND bzw. VCC gelegt werden. Wenn anstatt der hier verwendeten Lötbrücke ein 10k 0603 SMD Widerstand eingelötet wird, können die Pins auch noch verwendet werden. Ich hatte nur gerade keine griffbereit.
6MOD besitzt und von der Firma AI-THINKER hergestellt wurde. Es besitzt eine FCC-Zulassung, arbeitet auf dem ISM 2,4GHz Band, hat eine Sendeleistung von +25dBm und verwendet das Funkprotokoll IEEE 802.11b/g/n auch bekannt als

Espressif SDK und weitere Betriebsmodi

Die Firma Espressif Systems hat für den ESP8266 eine SDK herausgebracht, das es ermöglicht die Module in zwei verschiedenen Betriebsmodi zu verwenden. Einmal als eigenständiges Modul, dass mit UART Befehlen gesteuert werden kann. Andererseits biete das GitHub von Espressif ein SDK zur Entwicklung von Software mit Hilfe von FreeRTOS in C. Aufbauend auf diesem SDK wurde NodeMcu entwickelt. NodeMcu bringt die Skriptsprache Lua auf das System und ermöglicht es den Microcontroller mit einfach zu scheibenden Skripten zu verwenden. Auch dieses Projekt ist Open-Source und auf Github verfügbar. 

Flashen der Firmware

NodeMcu Firmware Programmer
Das Flashen von Mikrocontrollern kam in der Vergangenheit immer etwas arbeitsaufwändig daher. Meistens wurden spezielle Programmieradapter verwendet, oder das Chip musste über einen JTAG Adapter angesprochen werden. Im Laufe der Zeit haben sich Bootloader etabliert, die in einem reservierten Bereich des Flashs sitzen und vor Ausführen des Hauptprogramms ein Programmieren über die serielle Schnittstelle zulassen. So auch bei diesem Modul. es ich möglich die Firmware von NodeMcu über die Serielle Schnittstelle zu flashen. Das Projekt stellt dazu sogar ein Windows Programm zur Verfügung, das völlig selbständig das Modul mit allen benötigten Speicherteilen beschriebt. 

Kommunikation mit dem Modul

ESPlorer
Nachdem die NodeMcu Firmware auf das Modul geflasht wurde, kann über die Serielle Schnittstelle die Kommunikation mit dem LUA-Interpreter aufgenommen werden. Der Interpreter lauscht mit einer Baudrate von 9600 8 Bits, 1 Stop, kein Parity. Rund um den ESP8266 hat sich bereits eine große Gemeinschaft von Leuten gebildet, die alle mit zum Entstehen von großartiger Software beitragen. Zum Beispiel das ESPlorer Projekt, das eine leicht zu bedienende Oberfläche zum Programmieren der LUA Skripte entwickelt hat. Die für die Entwicklung nötigen Informationen finden sich ebenfalls auf GitHub und können dort im Wiki und der API Dokumentation nachgeschlagen werden.

Bei den bereits verfügbaren LUA Modulen befindet sich alles was man zur Entwicklung von WLAN fähigen Geräten benötigt. Jetzt bleibt nur noch die Frage zu klären, wo kann man überall noch WLAN einbauen und wie mache ich das, damit mein Nachbar mir nicht das Licht ausschalten kann.