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.

Freitag, 16. Januar 2015

3D Drucker Update: Drucken von ABS

Mein 3D Drucker ist ein Bausatz von RepRapPro.com und wurde ursprünglich für das Drucken von 1,75mm breitem PLA Kunststoff entwickelt. PLA hat den Vorteil, dass es bei ~200°C flüssig ist und sich somit hervorragend extrudieren lässt. Es haftet auf warmen (65°C) Kapton Klebeband und bei schweren Fällen auf Pritt-Stift. Dabei ist zu beachten, dass die Wärmeausdehnung von PLA sehr gering ist und daher das Risiko, dass sich ein Objekt während dem Druck verzieht gering. PLA ist ein sehr spröder Werkstoff, der allerdings bei geringen Temperaturen weich wird. Für allgemeine Bauelemente, die keiner großen Belastung ausgesetzt sind, oder Dekorationen eignet PLA sich hervorragend, da es einfach und Energiesparend zu verarbeiten ist. Außerdem entstehen bei PLA keine unangenehmen Gerüche.

ABS hingegen ist ein Thermoplast, dessen Schmelzpunkt etwas weiter oben liegt als der des PLA. Ein Druck mit 240°C für das von mir verwendete ABS erzeugt gute Verbindungen der einzelnen Schichten. Allerdings ist die Wärmeausdehnung von ABS gegenüber der von PLA wesentlich höher, sodass es passieren kann, dass das zu druckende Objekt sich bereits zusammenzieht, während eine weitere Schicht aufgetragen wird. Diese zeiht sich dann auch wieder zusammen und so kommt es vor, dass Ecken des Objektes von der Druckplatte abgehoben werden. Dies erzeugt dann einen Spalt, in dem Luft zirkulieren kann und das Objekt weiter abkühlt. Eine komplette Ablösung von der Druckplatte ist dann sehr wahrscheinlich.

Um einem zu schnellen Abkühlen vorzubeugen kann das Objekt auf einer beheizten Oberfläche gedruckt werden. Diese ermöglicht ein langsameres Abkühlen der Schichten und verhindert somit, dass sich das Objekt verzieht. Die Platte sollte dabei etwas mehr als 100°C haben. 
Der Ormerod Drucker von RepRapPro kam mit einem PC Netzteil als Stromquelle für das Heizbett. Mit dem Netzteil war es möglich die Platte unter konstante anliegender Spannung auf 80°C zu erhitzen. Mit einem leistungsstärkeren Netzteil sind 120°C nach einer gewissen Aufwärmzeit problemlos möglich. Der Druck kann also beginnen.

Zu Beginn befindet sich der Druckkopf sehr nahe über der Oberfläche des Druckbetts. Der originale Kopf des Druckers besitzt drei Düsen, die die Luft nahe an der Austrittsstelle der Düse vorbeileitet. Das führt zu einer starken Abkühlung der Druckplatte an dieser Stelle. Nachdem ich den originalen Kühlluftadapter so modifiziert hatte, dass die Luft wahlweise auch zur Seite abgeblasen werden kann, ist auch die Temperatur stabil geblieben.

Reibung der Y-Achse beim Verfahren nach links erzeugt diese Schräge
Der Drucker besitzt keinerlei Seitenwände und so kommt es vor, dass leichte Luftzüge das Druckbild beeinflussen, bzw. zu einem vollständigen Ablösen des Objekts führen. Mit etwas Karton konnte aber schnell Abhilfe geschafft werden. Dabei zeigt sich, wie wichtig es ist, dass das Druckbett frei beweglich bleibt. Andernfalls kann es zu solchen Schönheiten kommen.

Die Kunststoffteile des Druckers sind, wie es sich für einen RepRap gehört, alle mit einem RepRap hergestellt worden. Dabei wurde PLA verwendet und das ist, wie oben angesprochen nicht sehr temperaturfest. Bereits einige Stunden mit ABS haben dem Schlitten der X-Achse stark zugesetzt.

Hohe Temperaturen haben den Kunststoff des Schlittens verformt
Zu testen bleibt jetzt nur noch das transparente ABS. Allerdings muss der Prozess des Druckens vereinfacht werden, da ich nicht immer den kompletten Drucker umbauen möchte, wenn das Material gewechselt werden soll.

Freitag, 26. Dezember 2014

Home automation done in one afternoon

So there they are. The winter holidays. And you finally I have all the time to make that stuff I wanted to do. But what to do first.
Remote-control
The challenge is to build the things as fast as possible. So we start with the home automation thing I had in my mind for a few month now. First up we need a cool name so it does stick out of the masses. Well it's name is going to be Herbert.
Next up we need a processing base station for WiFi integration.

Remote-controlled Socket
This nice Raspberry Pi will do the job pretty well I guess. I have a collection of 6 remote controlled wall-adapters for the power sockets and a remote-control to toggle 3 of them individually on and off. the all-off button also exists. Dismantling the remote I found a circuit-board with an ASIC, 12V battery, four tactile switches, 434MHz crystal, one LED and a 8bit-dip switch bank.
Basically just an ASIC
 A quick glance at the backside of the PCB shows that 7 of the 8 switches are connected to the ASIC. Looks like some sort of channel selection. Nice. The operation voltage for the remote is 12V so we can not directly hook the Pi up.
I need some sort of isolation between the two circuits. Something like a optocoupler or a relay. I just happen to have two dual-relay-modules laying around so why not use them. A really quick solder-job later the tactile switches had a wire attached as well a a wire to short one of the channel-selectors. Now all six sockets can be operated with one remote module. the all-off switch is not connected. So I can not switch them all off at once. For now. A look inside the socket adapters show that they also consist of an ASIC. This one isn't even labeled! A switch mode power-supply and an antenna.

The socket-module seems not to answer the command in a way to determine of the signal was received. I will have a look into this later. For now one-way communication will have to be sufficient.

Everything hooked together like this:
5V -> Relay supply
3.3V -> Relay driver
GPIO -> Relay switch signal
The relays short the tactile switches ans one of the channel-selectors. 


The next step is software. The Pi I use has Raspbian installed. This is a Linux based on the Debian distribution and comes with python and bindings to access the GPIO directly from the script. With Python you get a HTTP-server up and running in no time.

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
import RPi.GPIO as GPIO
class myHandler(BaseHTTPRequestHandler):
    
    #Handler for the GET requests
    def do_GET(self):

        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
        # Send the html message
        self.wfile.write("Hello World")
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(4, GPIO.OUT, initial=1)
        GPIO.output(4, 1)
        
        return

try:
    #Create a web server and define the handler to manage the
    #incoming request
    server = HTTPServer('', 8000), myHandler)
    print 'Started httpserver on ', server.server_address
    
    #Wait forever for incoming http requests
    server.serve_forever()

except KeyboardInterrupt:
    print '^C received, shutting down the web server'
    server.socket.close()

With little additions the first version of Herbert was built. Have look at the git if you want.