Taster Verbindung zu HP-Drucker

Also PC ist ja mehr oder weniger ein Synonym für Computer mit Windows.
Ich frage jetzt mal explizit nach:

Kommst du ohne Geld auszugeben an einen WINDOWS-PC dran?
Damit wird die Sache sehr viel einfacher.
Oder könntest du ca. 50 Euro für einen gebrauchten mini PC mit Windows 10 ausgeben?

Im Prinzip tut es da jeder "olle" PC oder ein olles Notebook mit Windows 10.
Bild-Dateien drucken bekommt so ein oller Rechner auch hin.

Die Idee mit Cmd-Fenster ist gut.
Da könnte der Arduino auch gleich direkt den Druckbefehl reinschreiben.

Wenn man es über Batch-Dateien macht dann hat man die Flexibilität dass man den Dateinamen und Dateipfad in der Batch-Datei anpassen kann.

Windows hat das Pixeml-Malprogramm mspaint mit dabei.
Das kann man mit Parametern aufrufen so das eine Bilddatei gedruckt wird

Hier mal ein Demo-Code für eine Taste
getestet auf einem Arduino pro Micro (Arduino Leonardo)
Ich habe mir vor längerer Zeit mal die standard keybger-library erweitert, dass sie wirklich alle Umlaute und Sonderzeichen der deutschen Tastatur richtig ausgibt.
Daher die Library KeyboardGER2.h

KeyboardGER2.zip (6.7 KB)

Wann immer ich Strings benutze nehme ich die SafeString-library
die kann man sich über den Library-Manager der Arduino-IDE installieren

Hier der Demo-Code. Ganz simpel "entprellen" über ein delay(5000);

#include <KeyboardGER2.h>
#include <SafeString.h>

KeyboardGER2 myKeyBoard;

createSafeString(Befehl1_SS ,256);
createSafeString(Befehl2_SS ,256);
createSafeString(Befehl3_SS ,256);

const byte button1_Pin = 4;
const byte button2_Pin = 5;
const byte button3_Pin = 6;

const byte heartbeatLED_Pin = 13;

const byte lowValLimit = 31;

unsigned long MyTimer = 0;
unsigned long MyPeriod = 500; // 500 milliseconds ON and OFF  result: 1 blink per second

void PrintFileNameDateTime() {
  Serial.println( F("Code running comes from file ") );
  Serial.println(__FILE__);
  Serial.print( F("  compiled ") );
  Serial.print(__DATE__);
  Serial.print( F(" ") );
  Serial.println(__TIME__);
}


boolean TimePeriodIsOver (unsigned long &periodStartTime, unsigned long TimePeriod) {
  unsigned long currentMillis  = millis();
  if ( currentMillis - periodStartTime >= TimePeriod ) {
    periodStartTime = currentMillis; // set new expireTime
    return true;                // more time than TimePeriod) has elapsed since last time if-condition was true
  }
  else return false;            // not expired
}



void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
  static unsigned long MyBlinkTimer;
  pinMode(IO_Pin, OUTPUT);

  if ( TimePeriodIsOver(MyBlinkTimer, BlinkPeriod) ) {
    digitalWrite(IO_Pin, !digitalRead(IO_Pin) );
  }
}


void setup() {
  pinMode(button1_Pin, INPUT_PULLUP);
  pinMode(button2_Pin, INPUT_PULLUP);
  pinMode(button3_Pin, INPUT_PULLUP);
  delay(1000);
  Serial.begin(115200);
  delay(1000);
  Serial.println( F("Setup-Start") );
  Serial1.begin(115200);
  Serial.println( F("Serial1.begin(115200) done") );

  PrintFileNameDateTime();
  myKeyBoard.begin();
}


void loop() {
  BlinkHeartBeatLED(heartbeatLED_Pin, 250);

  if (digitalRead(button1_Pin) == LOW) {
    digitalWrite(heartbeatLED_Pin, HIGH);
    Befehl1_SS = "mspaint /pt F:\\Downloads\\Software\\Arduino\\Arduino-Quick-Downloads\\DM452T.JPG";
    Serial.println(Befehl1_SS);
    myKeyBoard.typeText(Befehl1_SS.c_str() );
    myKeyBoard.SendReturn();
    Serial.println("myKeyBoard.typeText(Befehl1_SS.c_str() done");
    Serial.println("delay(5000);");    
    delay(5000);  
    digitalWrite(heartbeatLED_Pin, LOW);
  }  
}

Wenn man dann ein DOSen-Fenster geöffnet hat (CMD)
und da der Cursor blinkt.
Dann tut das Progrämmchen so als ob es eine Tastatur wäre und hämmert die Befehlszeile

mspaint /pt F:\Downloads\Software\Arduino\Arduino-Quick-Downloads\DM452T.JPG

rein


Und schwups wird die angegeben Bilddatei gedruckt.

Wenn du jetzt noch spezielle Einstellungen haben willst wie bestimmte Bildgröße. Querformat usw. Dann muss man sich mal mit den Parametern von mspaint auseinander setzen oder auf ein Autohotkey-script umsteigen.
Mit Autohotkey-scripten kann man dann Kapriolen drehen ohne Ende.

vgs

1 Like

Wenn es denn mit apple MAC sein muss dann könnte man einen ESP32 mit BLE-keyboard mouse ausprobieren.

Aber man weiß ja: apple ist apple. Hochsicherheitsgetue mit eingeschränkten Rechten und am liebsten nur apple-Produkte verkaufen.

vgs

Wow, vielen Dank dir. Das werde ich mir die Tage nochmal genauer angucken ums wirklich zu verstehen. Bin aber zuversichtlich, dass ich das schnalle :slight_smile:

Man könnte das Ganze auch gleich mit einem Raspberry Pi ohne zusätzlichen PC und „Arduino“ lösen…

Wenn es für den Raspi einen Druckertreiber für den gewünschten Druckertyp

gibt dann ja.

Wenn es da keinen Raspi-Treiber gibt der Bild-Dateien drucken kann
müsste man sich einen vom Raspi ansteuerbaren Drucker besorgen.

Ich habe jetzt den Demo-Code für ESP32-BLE Keyboard-Mouse ausprobiert.
Ein iPad air 2 kann sich damit verbinden.
Was man allerdings alles für Klimmzüge machen muss um bestimmte Bilddateien von einem apple-Gerät aus auszudrucken - keine Ahnung. Und da apple so auf Sicherheit bedacht ist
und Rechte einschränkt - da musste mal speziell die apple-User hier im Forum fragen
Hier der Demo-Code aus der Library

#include <BleKeyboard.h>

BleKeyboard bleKeyboard;

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleKeyboard.begin();
}

void loop() {
  if(bleKeyboard.isConnected()) {
    Serial.println("Sending 'Hello world'...");
    bleKeyboard.print("Hello world");

    delay(1000);

    Serial.println("Sending Enter key...");
    bleKeyboard.write(KEY_RETURN);

    delay(1000);

    Serial.println("Sending Play/Pause media key...");
    bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);

    delay(1000);

   //
   // Below is an example of pressing multiple keyboard modifiers 
   // which by default is commented out.
    /*
    Serial.println("Sending Ctrl+Alt+Delete...");
    bleKeyboard.press(KEY_LEFT_CTRL);
    bleKeyboard.press(KEY_LEFT_ALT);
    bleKeyboard.press(KEY_DELETE);
    delay(100);
    bleKeyboard.releaseAll();
    */
  }

  Serial.println("Waiting 5 seconds...");
  delay(5000);
}

vgs

Eigentlich ist der HL2035 ein Brother Drucker und der sollte mit CUPS funktionieren.

Aber das ist ja nur ein Vorschlag, mal in diese Richtung zu recherchieren….

Ich will hier keinem seinen „Arduino“ ausreden….

Raspi hatte ich ja in #4 auch schon vorgeschlagen. Aber wir sind hier nunmal in einem Arduino Forum :joy: :joy:

Ich glaube es würde auch mit einem Arduino Due funktionieren

Arduino Due direkt mit dem Drucker verbinden??
Das glaube ich erst wenn du mir es vorführst.
Der Arduino Due hat zwar einen 32Bit Arm Prozessor
aber
das auf USB oben drauf gesetzte Protokoll zum Drucken mit einem Laserdrucker ?
Das möchte ich sehen!

Es kommt eben nicht nur darauf an eine bestimmte Bitbreite 8 bit / 32 bit und so und so viel RAM-Speicher zu haben, sondern der entsprechende Software-Treiber muss vorhanden sein.

Wenn es diesen Software-Treiber für Arduino-Due gibt : Echt Hut ab und ich verneige mich.
Aber ich glaube nicht das es diesen Software-Treiber gibt.
vgs

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.