Beiträge von Der Hobbyelektroniker

    Hallo Konrad,

    vielen Dank für den Hinweis. Diesen Webservice kannte ich noch nicht. Damit ist dein Problem vermutlich gelöst. Du kannst zwar nicht direkt auf eine Webseite zugreifen, die auf dem Pico gespeichert ist. Da du aber damit direkt vom Pico Daten anfordern kannst, solltest du diese auch auf deiner Homepage anzeigen können.

    Ich habe den Service nur schnell ohne Pico getestet, er hat perfekt funktioniert. Den Zugriff auf den Pico werde ich in den nächsten Tagen testen.


    Gruss

    René

    Hallo Konrad,

    das lässt sich nicht so einfach beantworten, da es sehr stark davon abhängt, was du machen möchtest. Wenn deine Homepage aus normalem HTML und Javascript - Code besteht, kann die Homepage nicht selbst auf den Pico W zugreifen. Der Zugriff erfolgt dann durch den Browser des Betrachters.


    Wenn du für deine Homepage eine echte Webapplikation hast, dann sollte das Backend auch direkt auf den Pico W zugreifen können. Wie, hängt dann aber sehr stark von den Details deiner Applikation ab.


    Im Video habe ich nur dir Grundlagen gezeigt. Für eine echte Anwendung, die über lokale Kommunikation hinaus geht, brauchst du eine exakte Planung des Gesamtprojektes und solide Kenntnisse in Webprogrammierung.


    Gruss

    René

    Hallo Alexander,


    in der Micropython - Dokumentation findest du ein Beispiel (5.2 HTTP GET request). Wie Kai schon geschrieben hat, sind Sockets die Lösung.

    https://docs.micropython.org/e…tutorial/network_tcp.html


    Vom Server wird eigentlich erwartet, dass er eine Antwort zurücksendet. Dann weiss der Client, dass der Befehl korrekt war und ausgeführt wird.

    Wenn du den Befehl über den Browser absetzt, erwartet dieser ebenfalls eine Antwort. Bleibt diese aus, erhältst du nach dem Timeout eine Fehlermeldung.


    Gruss

    René

    Ich habe eine Anfrage bekommen, die ich gerne weiterleite. Gesucht wird ein Hobbyelektroniker oder eine Hobbyelektronikerin, der oder die bereit ist, sich 1 bis 2 Mal im Monat um die Spielgeräte eines Indoorspielplatzes ( https://www.tummelplatz.ch ) zu kümmern. Es handelt sich um verschiedene Spielgeräte für jüngere Kinder, wie Kiddie Rides, Hammerspiel, Kranmaschine, Elektro-Ufos und Elektro-Fahrtiere.


    Für mich ist es leider zu weit weg, ideal ist es für jemanden, der in der Region Zofingen wohnt.


    Voraussetzung sind natürlich genügend Kenntnisse der Elektronik, Erfahrung und Geschick im Basteln und Spass an der Sache. Wende dich an die untenstehende Kontaktperson, um ein entsprechendes Jobangebot zu erhalten.


    Michaela Baumann

    Indoorspieleland Tummelplatz

    Webereiweg 4

    4802 Strengelbach / Industrie Zofingen / Alte Bleiche

    078 686 35 84

    kontakt@tummelplatz.ch

    Hallo Franz,


    ich habe es nur kurz angeschaut, aber nicht ausprobiert. Deshalb ohne Garantie.

    Ich denke, das es so gehen könnte:


    Du übergibst dabei den Funktionen für die Ausgabe das Display, das die Werte ausgeben soll. Dann kannst du einfach die Ausgabe für beide Displays nacheinander aufrufen.


    Gruss

    René

    Hallo Franz


    Der ESP32 unterstützt hardwaremässig über das Modul I2C zwei I2C - Schnittstellen. Diese sind an fixe Ports gebunden.

    Das Modul SoftI2C emuliert das Protokoll softwaremässig und funktioniert daher auf beinahe allen Ports.


    Wenn diese Warnung erscheint, kannst Du davon ausgehen, dass irgendwann in der Zukunft die Unterstützung des I2C - Moduls eingestellt wird.

    Daher kann ich Dir nur empfehlen, mit SoftI2C zu arbeiten.

    Das erfordert keine grossen Änderungen am Programm. Du musst nur beim Import und beim Erstellen der Instanz den Begriff I2C durch SoftI2C ersetzen.


    from machine import SoftI2C


    i2c_oled = SoftI2C(scl=


    Das mit dem Pin 16 ist abhängig von der Board - Revision. Eine neuere Board - Revision verlangt, dass Pin 16 auf HIGH gesetzt wird, da der Pin mit dem OLED_RST Anschluss verbunden ist.

    Mit Pin 16 auf HIGH sollte es mit allen Board - Versionen funktionieren.


    Gruss

    René

    Guten Morgen Eberhard


    Dein Programm müsste eigentlich funktionieren.


    Ich verwende die Thonny - Version 3.3.13

    mit 'MicroPython v1.17 on 2021-09-02; ESP32 module with ESP32'


    Das Programm


    entspricht deiner Version.

    Bleibt noch die Datei ssd1306.py. Möglicherweise hat sich da etwas geändert. Du findest meine Version in OLEDTest.zip. ssd1306.py muss auf das Board kopiert werden. Bitte kontrolliere, ob dort die richtige Version vorhanden ist.

    OLEDTest.zip


    Sonst bleibt noch das Heltec - Board. Ich verwende die alte Version. Mit der unmittelbaren Nachfolgeversion sollte es aber auch klappen.


    Das sollte auf dem Display sichtbar sein:


    IMG_0526.jpeg



    Gruss

    René

    Hallo Eberhard,


    es hat sich seither viel in Thonny geändert. Schau dir dazu Lektion 9 an. Auch das ist nicht mehr ganz aktuell, deckt aber den ersten grossen Schritt ab.

    Auch beim Heltec - Board gibt es eine neuere Version. Dazu findest Du etwas in Lektion 10.


    Ich empfehle dir die Installation der neusten Thonny Version (momentan 3.3.13). thonny-esp ist nicht mehr notwendig.

    Esptool solltest du es unter Tools / Manage plug-ins finden. Wenn es nicht in der Liste ist, kannst du esptool im Suchfeld eingeben und Search on PyPi drücken.


    Unter Tools / Options findest du die Einstellungen für den Interpreter. Dort kannst du MicroPython on ESP32 auswählen.


    Gruss

    René

    Hallo Felix


    So richtig ist mir auch nicht klar, wieso es nicht geht.

    Du kannst entweder mit write() / read() oder mit put() / get() arbeiten. Mischen solltest Du es nicht.


    write() und read() arbeiten immer mit exakt 1 Byte.

    Ich verwendet normalerweise aber put() und get(). Dabei hängt die Anzahl geschriebener oder gelesener Bytes von der Variablen ab. Sie muss also zwingend vom selben Typ sein.

    Ein Beispiel:

    Code
    1. void setup() {
    2. Serial.begin(9600);
    3. byte speichern = 5;
    4. byte lesen;
    5. EEPROM.put(0, speichern);
    6. delay(100);
    7. EEPROM.get(0, lesen);
    8. Serial.println(lesen);
    9. }

    Das sollte eigentlich funktioniere, ich habe es aber nicht getestet.

    Eine etwas ausführlichere Erklärung findest Du in Lektion 24 meiner Videoreihe zum Arduino oder im Dokument Zusammenfassung Programmierung.


    Gruss

    René

    Hallo Tom,


    es freut mich natürlich immer, wenn meine Videos gefallen. Insbesondere, wenn der Zuschauer etwas jünger ist. Ich hoffe, dass ich das mit den Leben verständlich genug erklärt und nichts vergessen habe. Sonst einfach nachfragen, ein allfälliger Fehler kann schnell korrigiert werden.


    Ich wünsche euch auf jeden Fall viel Spass.


    Gruss

    René

    Hallo Tom,


    hier ein Vorschlag:

    Die Anzahl Leben sind eine Angelegenheit des Spielers. Also fügen wir in der Spieleklasse eine Variable Leben ein.


    Python
    1. class Spieler(Actor):
    2. def __init__(self, x, y):
    3. super().__init__('run__000')
    4. self.aktiv = False
    5. self.leben = 2 ### Eigenschaft leben erstellen
    6. # Die Grundposition speichern
    7. self.baseX = x
    8. ...

    Beim Start müssen wir jetzt unterscheiden, ob es ein neues Spiel oder nur ein Neustart nach einem Lebensverlust ist. Damit die Methode start() noch wie bisher funktioniert, verwenden wir einen Parameter mit Defaultwert.

    Die Leben werden nur auf 2 gesetzt, wenn es sich um ein vollständig neues Spiel handelt.


    Code
    1. def start(self, restart=False):
    2. # Aufrecht stehender Spieler an der Grundposition
    3. if not restart: self.leben = 2 # Bei einem neuen Spiel auf 2 setzen
    4. self.x = self.baseX
    5. ...


    In kollision() wird ein Leben weggenommen. Dabei muss getestet werden, ob aller Leben aufgebraucht sind.

    Wenn nicht, könnte man hier einen Effekt einbauen. Ich verzichte aber darauf und setze darum nur pass ein.


    Code
    1. def kollision(self):
    2. self.leben -= 1 # Leben wegnehmen
    3. if self.leben:
    4. # Es sind noch Leben vorhanden
    5. pass
    6. else:
    7. # Alle Leben aufgebraucht
    8. self.angle = -90 # Spierler fällt um
    9. self.y = self.baseY # er liegt am Boden
    10. self.stopp()


    Damit hätte der Spieler alle notwendigen Fähigkeiten.

    Der Rest wird im Hauptprogramm erledigt.


    Zuerst müssen wir in zeichne_spielfeld() das Anzeigen der Leben vorbereiten.


    Code
    1. def zeichne_spielfeld(self):
    2. ...
    3. screen.draw.text(str(self.punkte), (WIDTH - 80, 10), fontsize=60, color=farbe_schrift)
    4. screen.draw.text(str(self.spieler.leben), (WIDTH - 80, 80), fontsize=60, color=farbe_schrift) ###
    5. if self.finished:
    6. ...

    Jetzt müssen wir in update() noch den Spielverlauf beeinflussen.

    Wenn eine Kollision erfolgt ist, teilen wird das dem Spieler mit spieler.kollision() mit.

    Danach wird getestet, ob noch Leben vorhanden sind.

    Wenn ja, lassen wir die Hindernisse verschwinden, starten den Spieler neu (mit der Option restart=True) und zeichnen alles neu. Danach brechen wir die Schleife ab, da jetzt alle Hindernisse verschwunden sind.


    Ich hoffe, das war nicht all zu verwirrend.

    Es ist nur eine Minimallösung. Man könnte noch visuelle Effekte oder Töne beim Verlust eines Lebens einbauen.


    Gruss

    René

    Hallo Felix


    Ein Original - Arduino sollte eigentlich hier keine Probleme haben. delay() hat auch keinen Einfluss, da während der Datenübertragung der Sketch auf dem Arduino nicht läuft. Ich tippe eher auf eine äussere Ursache. Den USB-Port zu wechseln, wie es Reiner vorschlägt, ist immer eine gute Idee. Ein anderer Schwachpunkt ist das USB Kabel. Wenn Du ein anderes hast, einfach einmal wechseln. Ein Fehler, der während des Hochladens auftritt, kann durchaus durch ein schlechtes Kabel verursacht werden.


    Allerdings deuten die Fehlermeldungen 'Port busy' und 'Fehler beim Öffnen' auf ein anderes Problem hin. Kontrolliere auf deinem Computer, ob da keine Software ist, die sich ungefragt sämtliche seriellen Ports schnappt. Das könnte auch eine Sicherheitssoftware sein, die Schadcode über die serielle Schnittstelle abwehren möchte.


    Tatsächlich kann auch der Arduino, beziehungsweise das Programm, das darauf läuft, Probleme verursachen. Wenn sehr viele Daten per Serial.print auf den seriellen Monitor ausgegeben werden, kann das zu einer Blockade führen. Allerdings hatte ich das Problem mit einem original Arduino UNO noch nie.


    Gruss

    René

    Hallo Jürgen,


    das kann gut sein. Die Liste zeigt nur einen kleinen Teil der verfügbaren Module. Du hast aber ein Suchfeld, in das du pgzero eingeben kannst. Dann sollte Thonny es finden. Es sollten eigentlich alle Module auffindbar sein, die in einer 'richtigen' Installation mit pip installiert werden können. Die Suche läuft über den Python Package Index PyPI ( https://pypi.org ).


    Gruss

    René