Ausprobiert
Hardware / Software
- Raspberry Pi Pico W
- Pico-LCD-1.14 Display
- Micro USB Kabel
- Firmware CircuitPython
- Thonny IDE
Ausprobiert
- Pico-LCD-1.14 Display
- Micro USB Kabel
- Firmware CircuitPython
- Thonny IDE
Nach der
Einrichtung des Pico W mit der Firmware CircuitPython
und einem ersten Internet-Test zeige ich hier, wie Sie den Pico W mit dem Display LCD-1.14 von Waveshare als Netzwerkscanner verwenden
können. Dazu brauchen Sie zur Initialisierung des Displays die Datei 'init_pico_lcd.py' und einige
Bibliotheken für den 'lib-Ordner'. Diese liegen
hier zum downloaden
bereit. Laden Sie die zip-Datei herunter,
entpacken sie und kopieren die Datei 'init_pico_lcd.py' ins Hauptverzeichnis sowie den Inhalt des 'lib-Ordners' in den 'lib_Ordner' des
Pico W.
Los geht's
Übertragen Sie als erstes den unteren Code (Zeile 1 bis 35) in die Thonny IDE. Zunächst werden die Bibliotheken importiert, die interne LED ausgeschaltet, die Button (Joystick, Button A und Button B) und das Display definiert.
1 import os 2 import time, gc 3 import board 4 import ssl 5 import wifi, ssl, socketpool 6 import rtc 7 import socketpool 8 import microcontroller 9 import adafruit_requests 10 import displayio 11 import digitalio 12 import terminalio 13 from adafruit_display_text import label 14 from init_pico_lcd import WavesharePicoLCD114 15 from digitalio import DigitalInOut, Direction, Pull 16 from adafruit_ticks import ticks_ms 17 18 led = digitalio.DigitalInOut(board.LED) 19 led.direction = digitalio.Direction.OUTPUT 20 21 # Buton definieren 22 joystick = DigitalInOut(board.GP3) 23 joystick.direction = Direction.INPUT 24 joystick.pull = Pull.UP 25 key_a = DigitalInOut(board.GP15) 26 key_a.direction = Direction.INPUT 27 key_a.pull = Pull.UP 28 key_b = DigitalInOut(board.GP17) 29 key_b.direction = Direction.INPUT 30 key_b.pull = Pull.UP 31 32 # built-in display 33 lcd = WavesharePicoLCD114() 34 display = lcd.display 35
Als nächstes wird ein blaues Hintergrundbild erzeugt und ein Starttext als 'label' definiert, welches später durch 'update.label' immer wieder erneuert wird. In den Zeile 62 und 63 werden zwei Variable festgelegt. Mit der Variable ' ticks_ms() ' werden nach Abschluss des Scannvorgangs 20 Millisekunden gezählt, ehe der Bildschirm wieder in den Anfangsmodus springt. Die Variable 'stop' sorgt dafür, dass der Joystick nur reagiert, wenn sie den Wert Null hat.
36 # Make the display context 37 main_group = displayio.Group() 38 display.show(main_group) 39 40# make bitmap that spans entire display 41 background = displayio.Bitmap(display.width, display.height, 3) 42 mypal = displayio.Palette(1) 43 mypal[0] = 0x0000FF # set colors (black) 44 main_group.append(displayio.TileGrid(background, pixel_shader=mypal)) 45 background.fill(0) # change background to blue (mypal[2]) 46 47 text = (" Netzscan starten" + 48 "\n Joystick drücken" + 49 "\n\n stop: A Button" + 50 "\n neu: B Button") 51 # create the label 52 updating_label = label.Label( 53 font=terminalio.FONT, text=text, scale=2, color=0xFFFFFF, 54 line_spacing=1 55 ) 56 # set label position on the display 57 updating_label.anchor_point = (0, 0) 58 updating_label.anchored_position = (1, 10) 59 # add label to group that is showing on display 60 main_group.append(updating_label) 61 62 start = ticks_ms() 63 stop = 0 64
Es folgt die 'while' Schleife. In Zeile 66 startet beim Drücken des Joysticks der Scannvorgang. Folgende Variable werden
bestimmt:
- net: der SSID Name des Netzwerks
- rssi: die Signalstärke
- channel: der Kanal auf dem das Netz sendet
- key: die Verschlüsselungsart des Netzes
Eine Besonderheit ist der Fall str(network.authmode) == "[wifi.AuthMode.OPEN]" . Dabei handelt es sich
nämlich um ein offenes WLAN-Netz. Die anderen Verschlüsselungsarten werden in den Zeilen 76 bis 81 bestimmt und in den String
'key' übernommen. Die Zeilen 82 bis 86 realisieren das bereits erwähnte 'updating_label.text', um die Anzeige zu aktualisieren.
65 while True: 66 if not joystick.value and stop == 0: 67 i = 0 68 for network in wifi.radio.start_scanning_networks(): 69 key = "" 70 i += 1 71 net = str(network.ssid) 72 rssi = str((-1)*network.rssi) 73 channel = str(network.channel) 74 if str(network.authmode) == "[wifi.AuthMode.OPEN]": 75 key = "offenes Netz" 76 if "WPA," in str(network.authmode): 77 key += "WPA, " 78 if "WPA2," in str(network.authmode): 79 key += "WPA2, " 80 if "PSK" in str(network.authmode): 81 key += "PSK, " 82 updating_label.text = (" Netzwerk " + str(i) + " " + 83 "\n " + net + 84 "\n Signalst.: " + rssi + " " + 85 "\n Kanal : " + channel + " " + 86 "\n " + key + " ") 87 time.sleep(1) 88 if not key_a.value: 89 stop = 1 90 wifi.radio.stop_scanning_networks() 91 break 92 time.sleep(1) 93 wifi.radio.stop_scanning_networks() 94 start = ticks_ms() 95 if stop == 0: 96 time.sleep(8) 97 updating_label.text = (" Scanvorgang" + 98 "\n abgeschlossen" + 99 "\n " + 100 "\n " + str(i) + " Netze" + 101 "\n gefunden") 102 if not key_b.value: 103 stop = 0 104 updating_label.text = (" Netzwerkscan " + 105 "\n starten:" + 106 "\n\n Joystick" + 107 "\n drücken") 108 if (ticks_ms() - start)/ 1000 > 20: 109 stop = 0 110 updating_label.text = (" Netzwerkscan " + 111 "\n starten:" + 112 "\n\n Joystick" + 113 "\n drücken")
Wenn der 'Button A' nicht gedrückt wurde, erfolgt am Ende des Scannvorgangs (Zeilen 95 bis 101) die Zusammenfassung. Wurde vorher der
'Button A' gedrückt, so wird der Scannvorgang unterbrochen. Mit dem 'Button B' wird das Programm zum Anfangszustand zurückgesetzt
(Zeilen 102 bis 107). Wird gar kein Button gedrückt, so erfolgt die Rücksetzung (Zeilen 108 bis 113) nach den 20 Millisekunden
aus dem 'ticks_ms()'. Das hat den Vorteil, dass im Unterschied zu 'time.sleep(20)' der Pico weiterhin auf einen Tastendruck reagiert und nicht
in der 'Ruheschleife' ist. Diese Methode sollte immer angewandt werden, wenn während einer bestimmten Zeit auch noch andere Vorgänge
laufen und nicht 'eingefroren' werden sollen. So, damit ist das Programm komplett und Sie können ein wenig 'spielen'
Weitere verwandte Projekte:
Viel Spass und Erfolg beim Ausprobieren. Wenn Ihnen diese Anleitung gefallen hat, tragen Sie hier bitte einen Kommentar ein.
Zurück