Schlagwort-Archiv: Repetier

Wlan für den 3D-Drucker: ESP3D mit ESP01 am RAMPS 1.4 mit Repetier Firmware

Wie man ESP3D als Wlan-Erweiterung für den 3d-Drucker mit repetier-firmware aufsetzt.
Heute im Schnelldurchlauf stichpunktartig.
Los gehts:

esp3d
Kaufen:

  • esp-01 schwarze Platine (1Mbyte Fash, die blauen haben nur 0,5MB)
  • esp-01 Adapter -> Pegelwandler 3,3V/5V
  • esp-01 Programmer (es geht auch ein normaler Usb-seriell-wandler mit 3,3V Logikpegel und eine 3,3V spannungsversorgung, ESP ist nicht 5V-tolerant!)
  • Stiftleisten und Dupont-Kabelbrücken

Danach:Brücke am USB-Programmieradapter nachrüsten GPIO0 nach GND für Programmiermodus

Installieren:Arduino 1.8.3 für Linux, Boardverwalter-URL, ESP8266 4.1
Ordner $home/Arduino/tools anlegen
ESP8266FS herunterladen und nach $home/Arduino/tools/ESP8266FS/tool/esp8266fs.jar entpacken
esp3d 1.00 (enthält web-gui 1.0) oder aktuelles release
https://github.com/luc-github/ESP3D/releases
release nach $home/Arduino entpacken
/ESP3D-1.0/esp3d/esp3d.ino öffnen

Arduino-IDE starten und folgendes einstellen:

Board „generic esp8266“ auswählen
flashmode: QIO
flashsize: 1M(144k)
crystal: 26Mhz
flash: 40Mhz
CPU: 160Mhz
Builtin LED: 2
wenn vorher etwas anderes auf dem ESP war im zweifelsfall „Erase Flash: all flash contents“ wählen (Bei späteren updates nur die firmware überschreiben)
ESP01 auf den programmer stecken
Programmer an USB anstecken
ggf. mit sudo dmesg in der Konsole nachsehen welches USB-Device dazukam (/dev/ttyUSB0)
Port in arduino IDE einstellen

Sketch uploaden
Programmer abziehen und wieder anstecken

->Werkzeuge: ESP8266 Sketch Data Upload ausführen
(wenn man das vergisst hat der Webserver keine Webseite/index.html)

Programmer vom Usb abziehen und ESP01 auf ESP01 Adapter umstecken
5V anlegen und 15 Sekunden warten.
Wenn kein Wlan-device namens ESP3D auftaucht nochmal neu flashen

Wenn Wlan-device auftaucht mit diesem Verbinden und Erstkonfiguration durchführen. (Die hier eingegebenen Parameter kann man später noch ändern). Es ist sinnvoll den ESP ins eigene Wlan zu integrieren.
Der Wlan-schlüssel des inititalen Wlans ist 12345678
Es erfolgt dann eine Umleitung über captive portalseite zum ESP3D Webserver. (wenns funktioniert). Alternativ manuell http://192.168.0.1 öffnen (manchmal ist es ein anderer Adressbereich, dann z.b. mit Android und fffing app das Netzwerk scannen um die richtige IP herauszufinden, oder die eigene Adresszuweisung anzeigen und die Gatewayadresse verwenden)

Über die Einrichtungsseite kann das Wlan im ESP auf Clientmodus umgestellt werden, und der WPA-Schlüssel eingegeben werden. Nach einem Neustart wird der ESP dann Teilnehmer im Lokalen Wlan-Netzwerk.

Jetzt Firmware vom Drucker anpassen:
-> repetier fw
-> configuration.h
„define BLUETOOTH_SERIAL“ von -1 (aus) auf 2 ändern.
Baudrate setzen. ich empfehle 115200. 230400 hatte bei meinen Geräten nicht funktioniert, 250000 hat funktioniert. Schneller ist im Prinzip besser fürs hochladen von Gcode auf die SD-Karte über Wlan. In der Praxis macht es kleinen großen Unterschied.
Diese Baudrate ist nur für die Schnittstelle zum ESP und ändert nicht die Baudrate auf dem USB-Seriell-anschluss, da es sich dort um ein anderes UART im Atmega handelt.

Drucker-arduino neu flashen

Aux4 pin 18 und 17 und 1 und 2:
Pin 1: +5V
Pin 2: GND
Pin 17: TX-Leitung vom esp01-adapter
Pin 18: RX-Leitung vom esp01-adapter

Wenn hier der „smart adapter“ vom Display bereits aufsteckt, dann auf den den Adapter oben auf die 4 Lötstellen noch Pinleisten auflöten. (Bei angestecktem Display bitte erst mal bis zu Ende lesen)

esp3d
esp3d

Repetier host konfigurieren
->konfiguration->druckereinstellung

  • Vorhandenes Setup auswählen. neuen Namen eintragen, z.b. esp3d-drucker (speichert eine Kopie des aktuellen Druckerprofils unter neuem Namen)
  • Verbindungsart TCPIP wählen, ip-adresse des esp01 eintragen. (am besten feste ip im esp01 verwenden)
  • port: 8888
  • transferprotokoll: ASCII (!)
    repetier protokoll ist nicht plain ascii und wirft fehler bei der verbindung, weil esp3d zwar transparentes seriell macht, aber nur für plaintext. binärdaten werden nicht transparent übertragen.
  • empfänger cachegröße: 63 (!)

speichern->ok.

Mit Drucker über Wlan verbinden und freuen.
Es darf nur entweder Wlan ODER Usb verwendet werden, sonst gibts Verluste auf der Verbindung.

Nachtrag: der ESP8266 braucht Strom zum arbeiten. Das belastet die 5V Rail in der Druckerelektronik zusätzlich. Der originale AMS1117 ist eh schon überlastet wenn am RAMPS noch ein Smartcontroller angeschlossen ist. Sollte das Arduino mega2560 noch keine externe 5V versorgung bekommen haben, dann ist jetzt der richtige Zeitpunkt dazu.

was noch so schief ging:

    • die Arduino-IDE findet die eigenen Libs für den esp8266 unter Windows (xp) nicht, weil in der deutschen Lokalisierung die Pfadnamen zu lang sind „c:\Dokumente und Einstellungen\..“
    • der Esp01-adapter den ich zuerst verwendete war kaputt: auf der Leiterplatte fehlte eine Durchkontaktierung.
    • Die Doku des esp3d ist falsch, was den Anschluss am Ramps anbelangt. Auf den markierten Pins sitzt bereits der USB-anschluss und belegt die Schnittstelle. (Ja man kann da stumpf mit drauf gehen, und wenn der Seriell-pegelwandler niederohmiger ist als die Schutzwiderstände am Usb-seriell-wandler auf dem Arduino-mega-board, dann setzt er sich durch mit seinen Pegeln… nur weil das vielleicht funktioniert, ist es aber trotzdem scheiße)
    • Der Upload der GUI über die Web-upload-funktion auf dem leeren Webserver in form der index.html.gz datei schlug fehl (aktueller firefox) und der Webserver machte irgendwelchen Murks oder war dann gar nicht mehr erreichbar. Die hochgeladene 70 kbyte große Datei wurde zunächst direkt nach dem Upload als 2kb angezeigt und dann nach wenigen Sekunden gar nicht mehr.
    • Das auf einem extra dafür gekauften Programmer die brücke nicht vorhanden ist um den Esp in den Programmiermodus zu versetzen muss einem auch erst einmal erklärt werden.
    • ältere Versionen von ESP3D lassen sich in Arduino 1.8.3 mit esp2.2 oder 2.4 nicht bauen
    • richtige Datenblätter für den esp8266, wo z.b. auch mal steht wieviel Strom ein GPIO „sourcen oder sinken“ kann, sind nicht so leicht zu finden (ich hatte aufgegeben)
    • RAMPS verwendet die uart2-pins D16 und D17 nicht, leider stellt sich aber heraus das das fullgraphic-smartcontroller Display da zwei Leitungen drauf hat.
    • nach einem Update von repetier 0.92.8 auf 1.0(.1, .2, .3) ist das Uart 2 in der firmware kaputt. Ich habe im repetier-supportforum einen Bugreport dazu angelegt, aber nach Monaten noch keine Reaktion dazu bekommen.
      https://forum.repetier.com/discussion/5317/second-uart-for-bluetooth-isnt-working-after-upgrade-from-0-9-2-to-1-0-1

Nachtrag:
Fullgraphic Smartcontroller mit ESP3D am UART2 unter repetier fw 0.92 gemeinsam betreiben
Leiterbahnen D17 und D16 unterbrechen

esp3d

esp3d

Brücken zu D39 und D43 löten
esp3d

esp3d

Leider ist das Foto unscharf, der Zettel von vor Monaten war jetzt aber nicht mehr lokalisierbar.

repetier firmware 0.92.
Datei ui.h
abschnitt ramps
pins neu zuordnen. (pinnummern und Zeilennummern siehe auch im verlinkten bugreport)

 

Viel Erfolg!

Dual Extruder und gesteuerte Lüfter am Ramps 1.4 mit Repetier Firmware (2)

Nun kommt der zweite Teil: Woher weiß denn die Druckerelektronik von der Erweiterung?

Nun, das muss in die Firmware hineinkompiliert werden.
Das klingt schlimmer als es ist.
Da ich die Repetier-Firmware verwende, muss man also die Repetier-Firmware herunterladen.
Dabei durchläuft man auf der Internetseite das onlinetool zum erzeugen der Konfiguration, die man sich hinterher fertig herunterladen kann.

Es muss nur jeweils für die nun neu hinzugekommenen Funktionen (die in der Firmware bereits enhalten, aber deaktiviert waren) der benutzte Anschluß festgelegt werden.

Die Anschlüsse sind alle Nummeriert, und der Schaltplan vom Ramps 1.4 zeigt die Zuordnung der Anschlüsse zu den Arduino- bzw. Atmega-Prozessorpins. Es gibt dazu eine einheitliche Nummerierung auf arduino.cc
https://www.arduino.cc/en/Hacking/PinMapping2560
Die Nummern in der Spalte „Digital Pins“ entsprechen den Dxx Nummern im Repetier-Firmware Onlinekonfigurator.
Den Schaltplan findet man im Reprap Wiki:
http://reprap.org/wiki/RAMPS_1.4

Wie man an den Skizzen im ersten Beitrag sehen konnte, habe ich mir den Anschluß AUX2 ausgesucht. Hier kommt noch eine Besonderheit: Der Anschluß hat zusätzlich noch „Axx“ Anschlüsse. Die gehen auf Pins am Atmega-Prozessor die auch als Analog-Eingang verwendet werden können. Ich habe mich an die D-Anschlüsse gehalten.
Will man die A-Anschlüsse auch verwenden, braucht man deren D-Nummern. Das die doppelt benamt sind war mir erst nicht klar, ich habe dann später aber festgestellt das der Anschlußplan von Ramps die erforderlichen zusätzlichen Nummern enthält.

Für die hier benutzen Erweiterungen sind keine weiteren Änderungen an der Firmware notwendig. Wer sich unsicher ist kann später in der pins.h bei der Hardware Nummer 33 nachsehen.

Wenn man nun die Firmware und die config.h heruntergeladen hat, braucht man die Arduino Classic IDE. Sie trägt die Versionsnummer 1.0.6
Das lädt man sich ebenfalls herunter und installiert es.
Dann wird die Firmware in einen Ordner entpackt, die config.h hineinkopiert und per doppelklick auf die repetier.ino Datei die IDE aufgerufen.

Nun Rechts oben im Menü den richtigen Arduino aussuchen, also den Arduino Mega 2560, und die richtige virtuelle serielle Schnittstelle.
Dann kann mit dem Button Upload (ganz links zu finden) die neue firmware automatisch kopiliert und in den Drucker geladen werden.
Danach stehen die gewünschten Funktionen zur Verfügung, wenn man alles richtig gemacht hat.
pins.h in arduino -> hardware „== 33“ – keine änderung nötig
features in firmware aktivieren.

Selbstbau 3D-Drucker Teil 11- Firmware und Hostsoftware

Firmware aufspielen
Die Reprap-3D-Drucker benutzen einen Arduino Mega 2560 (Stand 2014) und Ramps 1.4. Diese Hardware ist offen, dass heißt die Schaltpläne und Platinenlayout stehen jedermann kostenfrei zur Verfügung. Es gibt auch Elektroniken, auf denen der Mikrocontroller, die Motortreiber und was man sonst noch so braucht, zusammen auf einer einzigen Platine sind, das bringt aber nicht unbedingt Vorteile beim Nachbau, so können die Motortreiber z.B. bei defekt nicht ausgetauscht werden.

Typischerweise läuft darauf eine Firmware wie z.B. Marlin oder Repetier. Repetier bietet auf der Internetseite ein Onlinetool zum erstellen der Firmwarekonfiguration an, welches die Sache stark erleichert.
Zum Eingeben der korrekten Werte in das config-tool kann ich den Rechner von Josef Prusa wärmstens empfehlen. Dort etwas herunterscrollen und man findet die Javascript-Rechner für die Schrittmotor-Steps u.s.w. Korrekturen können natürlich auch noch später vorgenommen werden.
Es gibt noch andere, ich habe mich jedoch ohne größere Umschweife für Repetier als Firmware entschieden, da ich für diesen Drucker Repetier-Host auf dem Computer verwenden möchte.

Die Arduino-IDE muss zum installieren der Firmware auf dem Computer installiert werden, danach Repetier in einen Ordner entpacken und die Config da hineinkopieren, dann repetier.ino mit der Arduino-IDE öffnen.
Den Arduino Mega anstecken per USB (ggf. USB-Seriell Treiber noch installieren, die sind sowohl bei Arduino als auch bei Repetier-Host mit dabei) und in der Arduino-IDE „upload“ ausführen. Dabei wird die Firmware kompiliert und aufgespielt. Das wars schon erstmal.

Hostsoftware konfigurieren
In Repetier muss neben der virtuellen Usb-seriell-schnittstelle auch die Art und Maße des Druckers und Hotend eingegeben werden.
Das ist nicht weiter schwer und weitgehend selbsterklärend. Hier erstmal grob die Maße vom Druckbett u.s.w. eingeben.
Dann mit dem Arduino verbinden und rechts die Registerkarte für Manuelle Kontrolle auswählen.
Die manuelle Steuerung hilft sehr beim Funktionstest zur Inbetriebnahme. (Die Elektronik sollte in der zwischenzeit komplett zusammengesteckt und verkabelt sein)

Richtungen und Endschalter.
Hier hatte ich gewisse Probleme, da nirgendwo so richtig klar wurde, wo denn im Koordinatensystem des Druckers nun der Nullpunkt sein sollte. Bei meinem CTC mit Sailfish-Firmware ist der Nullpunkt in der Mitte des Druckbettes. In Repetier-Host soll jedoch die Koordinate der vorderen linken Ecke des Druckbetts mit positiven Werten eingegeben werden. Hä??

Naja, das wirds eben anders gemacht. Wenn man aber keine Ahnung hat wie es gewünscht ist, tut man sich schwer festzulegen welcher Endschalter den Maximum- und welcher den Minimum-Wert einer Achse abbildet und wie herum nun die Motoren richtig drehen. Die Drehrichtung kann durch umdrehen der 4poligen Pfostenstecker auf der RAMPS-Platine leicht umgekehrt werden.

Also deshalb hier einmal im Bild:
Von durch auf das Portal gesehen, ist der Urpsrung des Koordninatensystems hinten links.
Koordinatenursprung

Nochmal für Leute mit Brille: 🙂
Koordinatenursprung

Um in Repetier-Host den maximalen Fahrweg einzustellen, muss man also das Druckbett ganz nach hinten schieben, ein Maßband, Meterstab, oder was man eben zum Abmessen so zur Hand hat bereithalten, sich den Nullpunkt irgendwie markieren, und dann das Bett ganz zum anderen Ende schieben und den Fahrweg messen. In Millimeter.
Ein paar Millimeter kann man zur Sicherheit noch abziehen, damit es nicht immer gegen das mechanische Ende poltert.

Jetzt wo klar ist, wo NULL ist, ergibt sich auch, ob die installierten Endschalter den Minimum-Wert oder den Maximum-Wert einer Achse representieren.

In meinem Aufbau ist z.B, die X-Achse gegenüber dem Prusa-Entwurf verdreht montiert, weil das günstiger war mit den mechanischen Platzverhältnissen den X-Motor vor dem Aufbau zu haben, statt zwischen den Z-Achsen und dem Portal. Wenn aber der Motor mit seiner Kabelzuführung auf der rechten Seite ist, ists auch irgendwie doof links noch einen weiteren zusätzlichen Drahtverhau anzufangen wegen dem Endschalter.
Deshalb ist bei mir der X-Endschalter ein Maximum-Endschalter, die anderen beiden Minimum-Endschalter am Nullpunkt.

Bei der Z-Achse ist ein Maximum-Endschalter auch nicht sooo schlecht, kann man doch ohne mechanische Einstellarbeiten leicht durch parametrieren der Software und/oder Firmware den Z-Nullpunkt verschieben. Da ich für die spätere Bohrfunktion aber den Nullpunkt ohnehin manuell einstellen möchte, kann der Nullpunkt zum Bett einstellen ruhig fest sein.

Stellt man fest, das die Endschalter entgegen der eingegebenen Konfiguration in der Firmware doch woanders liegen, lässt sich das in der config.h einstellen und die Firmware neu in den Arduino einspielen. Wichtig: Neben dem vorhandensein der Endschalter per True/False Flag und dem Aktivieren/Deaktivieren der dazugehörigen Pull-Up Widerstände der Arduino/Atmega Portpins muss zusätzlich in der Firmware noch die Richtung eingegeben werden, die beim „Homing“ gefahren werden muss, um zum Endschalter zu fahren. Das Umkonfigurieren der Endschalter allein reicht nicht.
Software-Endstops für die gegenüberliegende Seite die nicht durch einen Endschalter gesichert ist, ist ebenfalls zu empfehlen. (Muss dann auch geändert werden, wenn man einmal dabei ist daran herumzufummeln)

Noch ein weiterer Hinweis: Änderungen von Parametern in der Firmware, die zusätzlich im EEProm ableget sind, werden auf dem Drucker nicht automatisch wirksam. Entweder muss man das EEprom löschen (da gibts einen Gcode Befehl), die Firmware ohne und dann nochmal neu mit EEProm-funktion hochladen und starten oder besser gleich mit Repetier die entsprechenden Werte im EEProm ändern. Da Betrifft hauptsächlich die maximalen Fahrwege, die Extruder- und Achsen „Steps per Millimeter“ und die Regelung der Heizfunktionen.

Einstellen des PID-Reglers für den Druckkopf:
Es gibt eine Autotune-Funktion in der Firmware, die die Werte für P, I und D ermitteln soll.
Leider hat sich dabei in meinem Fall (mit 24V 40W Heizelement an 30V) trotz mehrfachen Ausführen der Funktion und Eintragen der ausgegeben Werte (aus dem Log) keine gute Heizungsregelung eingestellt.
Ich habe dann in „Trial & Error“ händisch ein wenig daran herumgespielt während der Drucker etwas druckte, und bin erstmal bei niedrigen Werten hängen geblieben: P:2, I:2, D:2,5
Die Schwankungen sind etwa genauso klein wie die Meßfehler im kalten Zustand.