Raspberry pico: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
(42 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Spezifikationen=
 
=Spezifikationen=
*RP2040 Mikrocontroller-Chip
+
*[[Spezifikationen]]
*Dual-Core-Arm Cortex M0+ Prozessor, flexibler Takt mit bis zu 133 MHz                                                           
 
*264 KB SRAM und 2 MB integrierter Flash-Speicher
 
*Direktes Löten auf der Platine möglich
 
*USB 1.1 mit Geräte- und Hostunterstützung
 
*Energiesparmodus und Ruhezustand
 
*Drag-and-Drop-Programmierung über USB
 
*26 GPIO-Pins (3.3V)
 
*2 × SPI, 2 × I2C, 2 × UART, 3 × 12-Bit-ADC, 16 × steuerbare PWM-Kanäle
 
*RTC und Timer auf dem Chip
 
*Temperatursensor
 
*Gleitkomma-Bibliotheken auf dem Chip
 
*8 × Programmierbare I/O State Machines (PIO) für benutzerdefinierte Peripherieunterstützung
 
  
[[Datei:Raspberry-pi-pico-pinout.webp]]
 
  
=Adafruit Install=
+
=Adafruit Firmware Installieren=
*https://circuitpython.org/board/raspberry_pi_pico/
+
*Wir laden nun die Firmware für den Raspberry pico herunter
*https://downloads.circuitpython.org/bin/raspberry_pi_pico/de_DE/adafruit-circuitpython-raspberry_pi_pico-de_DE-7.0.0.uf2
+
*In dieser Firmware von dem Hersteller Adafruit sind Spezielle Micropython Module vorhanden, die eine Tastertur simulieren können.
=Copy File=
 
*cp ~/Download/adafruit-circuitpython-raspberry_pi_pico-de_DE-7.0.0.uf2 .
 
Nach ein paar Sekunden wird eine "USB-Stick" mit dem Namen "CIRCUITPY" gemountet
 
  
=Script=
+
wget https://downloads.circuitpython.org/bin/raspberry_pi_pico/de_DE/adafruit-circuitpython-raspberry_pi_pico-de_DE-7.0.0.uf2
* Damit der Payload bearbeitet werden kann, muss PIN 15 mit GND verbunden werden
 
* Wenn PIN 15 nicht mit GND verbunden ist, wird das Filesystem nicht gemountet
 
  
==Deutsches "Tastertur" Layout Einfügen==
+
==Flashen des Raspberry Pico`s==
*Das vornstallierte Englische Layout und die Keycodes müssen ersetzt werden
+
[[Datei:Pico_Bootsl.png]]
*Verschieden Sprachen findet man in der Git Repo
+
*Schließen Sie das Gerät an einen USB-Anschluss an, während Sie die BOOTSEL gedrückt halten
  https://github.com/Neradoc/Circuitpython_Keyboard_Layouts
+
*Es wird als Wechseldatenträger namens RPI-RP2 angezeigt.
*Circuitpython_Keyboard_Layouts
+
===Micro Python Firmware===
**libraries
+
*Kopieren Sie die heruntergeladene .uf2-Datei in das Stammverzeichnis des Pico (RPI-RP2).
 +
  cp adafruit-circuitpython-raspberry_pi_pico-de_DE-7.0.0.uf2 /media/$USER/RPI-RP2/
 +
*Das Gerät wird neu gestartet und nach etwa einer Sekunde wieder als CIRCUITPY verbunden.
  
==File Mount==
+
===Für Tastatur Emulation===
*[[Raspberry pico File Mount]]
+
*Laden Sie adafruit-circuitpython-bundle-7.x-mpy-YYYYMMDD.zip hier herunter und extrahieren Sie es außerhalb des Geräts.
<syntaxhighlight lang="python">
+
https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/download/20221014/adafruit-circuitpython-bundle-7.x-mpy-20221014.zip
import digitalio
 
import storage
 
from board import *
 
  
class DEBUG_MOUNT():
+
*Navigieren Sie im kürzlich extrahierten Ordner zu lib und kopieren Sie adafruit_hid in den lib-Ordner in Ihrem Raspberry Pi Pico.
   
 
    noStorageStatus = False
 
    noStoragePin = digitalio.DigitalInOut(GP15)
 
    noStoragePin.switch_to_input(pull=digitalio.Pull.UP)
 
    noStorageStatus = not noStoragePin.value
 
   
 
    def mount(self):
 
       
 
        if(self.noStorageStatus == True):
 
            # don't show USB drive to host PC
 
            try:
 
                storage.disable_usb_drive()
 
            except:
 
                print("USB drive disabled")
 
           
 
            return "disabled"
 
       
 
        else:
 
            # normal boot
 
            print("USB drive enabled")
 
           
 
            return "enabled"
 
</syntaxhighlight>
 
  
==Payload Ausführer==
+
;Seien Sie vorsichtig, wenn sich Ihr Gerät nicht im Setup-Modus befindet, wird das Gerät neu gestartet und nach einer halben Sekunde wird das Skript ausgeführt.
*[[Raspberry pico Payload Ausführer]]
 
* Bei verschiedenen Tasterturlayouts müssen diese in den lib/adafruit ordner gelegt werden
 
  
<syntaxhighlight lang="python">
+
=Setup-Modus=
import usb_hid
+
*Um die Payload zu bearbeiten, gehen Sie in den Setup-Modus, indem Sie den Pin 1 (GP0) mit Pin 3 (GND) verbinden.
import time
+
*Dadurch wird verhindert, dass der Pico-Ducky die Payload in Ihre eigene Maschine einspeist.  
import digitalio
+
*Der einfachste Weg dazu ist die Verwendung eines Überbrückungskabels zwischen diesen Pins, wie unten gezeigt.
from board import *
 
from debug import DEBUG_MOUNT
 
from adafruit_hid.keyboard import Keyboard
 
from adafruit_hid.keyboard_layout_de import KeyboardLayoutDE
 
from adafruit_hid.keycode_de import Keycode
 
  
 +
[[Datei:Raspberry_pico_setup_mode.png]]
  
duckyCommands = ["WINDOWS", "GUI", "APP", "MENU", "SHIFT", "ALT", "CONTROL", "CTRL", "DOWNARROW", "DOWN",
+
=="Tastertur" Layout Einfügen==
"LEFTARROW", "LEFT", "RIGHTARROW", "RIGHT", "UPARROW", "UP", "BREAK", "PAUSE", "CAPSLOCK", "DELETE", "END",
+
*Es sind nur das vornstallierte Englische Layout und die Keycodes vorhanden
"ESC", "ESCAPE", "HOME", "INSERT", "NUMLOCK", "PAGEUP", "PAGEDOWN", "PRINTSCREEN", "SCROLLLOCK", "SPACE",
+
*Verschieden Sprachen findet man in der Git Repo
"TAB", "ENTER", " a", " b", " c", " d", " e", " f", " g", " h", " i", " j", " k", " l", " m", " n", " o", " p", " q", " r", " s", " t",
+
https://github.com/Neradoc/Circuitpython_Keyboard_Layouts/tree/main/libraries
" u", " v", " w", " x", " y", " z", " A", " B", " C", " D", " E", " F", " G", " H", " I", " J", " K", " L", " M", " N", " O", " P",
+
*Für unseren Fall brauchen wir das Deutsche Layout
" Q", " R", " S", " T", " U", " V", " W", " X", " Y", " Z", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"]
+
wget https://raw.githubusercontent.com/Neradoc/Circuitpython_Keyboard_Layouts/main/libraries/keycodes/keycode_win_de.py
 +
wget https://raw.githubusercontent.com/Neradoc/Circuitpython_Keyboard_Layouts/main/libraries/layouts/keyboard_layout_win_de.py
 +
*Nun müssen wir die Dateien auf den Pico kopieren
 +
cp -v keycode_win_de.py /media/$USER/CIRCUITPY/lib/
 +
cp -v keyboard_layout_win_de.py /media/$USER/CIRCUITPY/lib/
 +
[[Datei:Raspberry_pico_lib.png]]
  
keycodeCommands = [Keycode.WINDOWS, Keycode.GUI, Keycode.APPLICATION, Keycode.APPLICATION, Keycode.SHIFT, Keycode.ALT, Keycode.CONTROL,
+
=Python Files=
Keycode.CONTROL, Keycode.DOWN_ARROW, Keycode.DOWN_ARROW ,Keycode.LEFT_ARROW, Keycode.LEFT_ARROW, Keycode.RIGHT_ARROW, Keycode.RIGHT_ARROW,
+
==Ändern oder Erstellen sie nun diese Dateien==
Keycode.UP_ARROW, Keycode.UP_ARROW, Keycode.PAUSE, Keycode.PAUSE, Keycode.CAPS_LOCK, Keycode.DELETE, Keycode.END, Keycode.ESCAPE,
+
;Die Datei die vom Bootloader als erstes aufgerufen wird.
Keycode.ESCAPE, Keycode.HOME, Keycode.INSERT, Keycode.KEYPAD_NUMLOCK, Keycode.PAGE_UP, Keycode.PAGE_DOWN, Keycode.PRINT_SCREEN,
+
*boot.py -> [[Raspberry pico File Mount]]
Keycode.SCROLL_LOCK, Keycode.SPACE, Keycode.TAB, Keycode.ENTER, Keycode.A, Keycode.B, Keycode.C, Keycode.D, Keycode.E, Keycode.F, Keycode.G,
+
*code.py - [[Raspberry pico Payload Ausführer]]
Keycode.H, Keycode.I, Keycode.J, Keycode.K, Keycode.L, Keycode.M, Keycode.N, Keycode.O, Keycode.P, Keycode.Q, Keycode.R, Keycode.S, Keycode.T,
+
*payload.dd -> [[Raspberry pico Payload]]
Keycode.U, Keycode.V, Keycode.W, Keycode.X, Keycode.Y, Keycode.Z, Keycode.A, Keycode.B, Keycode.C, Keycode.D, Keycode.E, Keycode.F,
+
*lib
Keycode.G, Keycode.H, Keycode.I, Keycode.J, Keycode.K, Keycode.L, Keycode.M, Keycode.N, Keycode.O, Keycode.P,
+
**keyboard_layout_win_de.py
Keycode.Q, Keycode.R, Keycode.S, Keycode.T, Keycode.U, Keycode.V, Keycode.W, Keycode.X, Keycode.Y, Keycode.Z,
+
**keycode_win_de.py
Keycode.F1, Keycode.F2, Keycode.F3, Keycode.F4, Keycode.F5, Keycode.F6, Keycode.F7, Keycode.F8, Keycode.F9,
 
Keycode.F10, Keycode.F11, Keycode.F12]
 
  
def convertLine(line):
+
==Links==
    newline = []
+
*https://github.com/dbisu/pico-ducky
    print(line)
+
*https://circuitpython.org/board/raspberry_pi_pico/
    for j in range(len(keycodeCommands)):
+
*https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/tag/20221014
if line.find(duckyCommands[j]) != -1:
 
    newline.append(keycodeCommands[j])
 
    print(newline)
 
    return newline
 
 
 
def runScriptLine(line):
 
    for k in line:
 
        kbd.press(k)
 
    kbd.release_all()
 
 
 
def sendString(line):
 
    layout.write(line)
 
 
 
def parseLine(line):
 
    if(line[0:3] == "REM"):
 
        # ignore ducky script comments
 
        pass
 
    elif(line[0:5] == "DELAY"):
 
        time.sleep(float(line[6:])/1000)
 
    elif(line[0:6] == "STRING"):
 
        sendString(line[7:])
 
    else:
 
        newScriptLine = convertLine(line)
 
        runScriptLine(newScriptLine)
 
 
 
kbd = Keyboard(usb_hid.devices)
 
layout = KeyboardLayoutDE(kbd)
 
 
 
# sleep at the start to allow the device to be recognized by the host computer
 
time.sleep(.5)
 
 
 
defaultDelay = 300 #Default Delay zwischen den einzelnen Schritten
 
progStatus = DEBUG_MOUNT().mount()
 
   
 
for idx in range(1):  #Der Payload wird 1 mal ausgeführt.
 
 
if(progStatus == "disabled"):
 
    # not in setup mode, inject the payload
 
    duckyScriptPath = "payload.dd"
 
    f = open(duckyScriptPath,"r",encoding='utf-8')
 
    print("Running payload.dd")
 
    previousLine = ""
 
    duckyScript = f.readlines()
 
    for line in duckyScript:
 
line = line.rstrip()
 
if(line[0:6] == "REPEAT"):
 
    for i in range(int(line[7:])):
 
        #repeat the last command
 
        parseLine(previousLine)
 
        time.sleep(float(defaultDelay)/1000)
 
else:
 
    parseLine(line)
 
    previousLine = line
 
time.sleep(float(defaultDelay)/1000)
 
 
 
    print("Done")
 
else:
 
    print("Update your payload")
 
</syntaxhighlight>
 
 
 
==Payload==
 
*[[Raspberry pico Payload]]
 

Version vom 4. November 2022, 07:24 Uhr

Spezifikationen


Adafruit Firmware Installieren

  • Wir laden nun die Firmware für den Raspberry pico herunter
  • In dieser Firmware von dem Hersteller Adafruit sind Spezielle Micropython Module vorhanden, die eine Tastertur simulieren können.
wget https://downloads.circuitpython.org/bin/raspberry_pi_pico/de_DE/adafruit-circuitpython-raspberry_pi_pico-de_DE-7.0.0.uf2

Flashen des Raspberry Pico`s

Pico Bootsl.png

  • Schließen Sie das Gerät an einen USB-Anschluss an, während Sie die BOOTSEL gedrückt halten
  • Es wird als Wechseldatenträger namens RPI-RP2 angezeigt.

Micro Python Firmware

  • Kopieren Sie die heruntergeladene .uf2-Datei in das Stammverzeichnis des Pico (RPI-RP2).
cp adafruit-circuitpython-raspberry_pi_pico-de_DE-7.0.0.uf2 /media/$USER/RPI-RP2/
  • Das Gerät wird neu gestartet und nach etwa einer Sekunde wieder als CIRCUITPY verbunden.

Für Tastatur Emulation

  • Laden Sie adafruit-circuitpython-bundle-7.x-mpy-YYYYMMDD.zip hier herunter und extrahieren Sie es außerhalb des Geräts.
https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/download/20221014/adafruit-circuitpython-bundle-7.x-mpy-20221014.zip
  • Navigieren Sie im kürzlich extrahierten Ordner zu lib und kopieren Sie adafruit_hid in den lib-Ordner in Ihrem Raspberry Pi Pico.
Seien Sie vorsichtig, wenn sich Ihr Gerät nicht im Setup-Modus befindet, wird das Gerät neu gestartet und nach einer halben Sekunde wird das Skript ausgeführt.

Setup-Modus

  • Um die Payload zu bearbeiten, gehen Sie in den Setup-Modus, indem Sie den Pin 1 (GP0) mit Pin 3 (GND) verbinden.
  • Dadurch wird verhindert, dass der Pico-Ducky die Payload in Ihre eigene Maschine einspeist.
  • Der einfachste Weg dazu ist die Verwendung eines Überbrückungskabels zwischen diesen Pins, wie unten gezeigt.

Raspberry pico setup mode.png

"Tastertur" Layout Einfügen

  • Es sind nur das vornstallierte Englische Layout und die Keycodes vorhanden
  • Verschieden Sprachen findet man in der Git Repo
https://github.com/Neradoc/Circuitpython_Keyboard_Layouts/tree/main/libraries
  • Für unseren Fall brauchen wir das Deutsche Layout
wget https://raw.githubusercontent.com/Neradoc/Circuitpython_Keyboard_Layouts/main/libraries/keycodes/keycode_win_de.py
wget https://raw.githubusercontent.com/Neradoc/Circuitpython_Keyboard_Layouts/main/libraries/layouts/keyboard_layout_win_de.py
  • Nun müssen wir die Dateien auf den Pico kopieren
cp -v keycode_win_de.py /media/$USER/CIRCUITPY/lib/
cp -v keyboard_layout_win_de.py /media/$USER/CIRCUITPY/lib/

Raspberry pico lib.png

Python Files

Ändern oder Erstellen sie nun diese Dateien

Die Datei die vom Bootloader als erstes aufgerufen wird.

Links