D1 Mini- UART0 nutzen?

OP #7393050
Lesenswert?

Hallo,

ich habe die Frage schon im Raspberryforum gestellt: https://forum-raspberrypi.de/forum/thread/58612-rs232-schnittstelle-des-d1-mini-fuer-funkmodul-nutzen/?postID=557900#post557900

Ich möchte ein HC-12 Funkmodul am D1 Mini betreiben und finde keine Lösung. Am RX0 Pin des ESP8266 habe ich einen Umschalter angebracht, der den Anschluß wahlweise zum CH340 oder zum TX Pin des Funkmoduls umschaltet. Das Senden klappt auch, aber an der Schnittstelle kommt absolut nichts an. Hardwaremäßig kommen die Signale am Pin an, das habe ich mit einem Prüfstift getestet. Von der zweiten, seriellen Schnittstelle ist ja nur TX1 rausgeführt und eine Dritte gibt es wohl nicht. Wird RX0 von irgend etwas in der Firmware blockiert. Was könnte ich noch tun? Softserial soll wohl auch irgendwie in Micropython gehen, aber vielleicht hat ja Jemand noch eine Idee.

Gruß Reinhard

1
import time
2
time.sleep_ms(5000)
3
import machine
4
from machine import Pin
5
from machine import UART
6
uart = UART(0, baudrate=1200)
7

8
led = Pin(2, Pin.OUT)
9
strMsg = ''
10

11
while True:
12
    #uart.write('T')
13
    if uart.any() > 0:
14
        #Hier kommt das Programm nie an!
15
        led.on()
16
        time.sleep_ms(500)
17
        led.off()
18
        time.sleep_ms(500)
19
        strMsg = uart.read()
20
        if 'on' in strMsg:
21
            led.on()
22
            uart.write('Turning on LED')
23
        elif 'off' in strMsg:
24
            led.off()
25
            uart.write('Turning off LED')
26
        else:
27
            uart.write('Invalid command')
#7393233
Lesenswert?

Reinhard T. schrieb:

Was könnte ich noch tun?

  1. Ich kenne MicroPython nicht genau, aber laut einer Note im esp8266-technical_reference_en.pdf kann die UART0 alternativ auf den Pins GPIO15/GPIO13 laufen, und ich habe im Quellcode (https://github.com/micropython/micropython/blob/master/ports/esp8266/machine_uart.c) folgende Zeilen gefunden:
1
   } else if (tx == 15 && rx == 13) {
2
        system_uart_swap();

Du solltest also in der Lage sein, die UART0 auf die Pins GPIO15 (WEMOS D8) und GPIO13 (WEMOS D7) umzustellen, wohl so:

1
uart = UART(0, baudrate=1200, tx=15, rx=13)
  1. In der Anleitung von MicroPython ist irgendwo erwähnt, dass "stdin" mit der UART0 verbunden ist, und man daher von UART0 solange nichts lesen kann, bis man den REPL von der UART0 abklemmt.

HTH

LG, Sebastian

OP #7393333
Lesenswert?

Falk B. schrieb:

Massen verbunden?

Ja, alles mehrmals überprüft.

Frank E. schrieb:

Ist SoftSerial keine Alternative? Damit kannst du (nahezu) jedes freie Pin nutzen ...

Ja, damit müßte ich mich mal beschäftigen, muß extra installiert werden und macht wohl oft Probleme.

Eigenartig ist ich finde überhaupt kein Projekt, wo jemand mit Micropython auf dem D1 Mini die serielle Schnittstelle nutzt.

Sebastian W. schrieb:

  1. In der Anleitung von MicroPython ist irgendwo erwähnt, dass "stdin" mit der UART0 verbunden ist, und man daher von UART0 solange nichts lesen kann, bis man den REPL von der UART0 abklemmt.

Das scheint wirklich das Problem zu sein.

https://github.com/micropython/micropython/issues/6417

(Firma: Q3) #7393337
Lesenswert?

Reinhard T. schrieb:

Falk B. schrieb:

Massen verbunden?

Ja, alles mehrmals überprüft.

Frank E. schrieb:

Ist SoftSerial keine Alternative? Damit kannst du (nahezu) jedes freie Pin nutzen ...

Ja, damit müßte ich mich mal beschäftigen, muß extra installiert werden und macht wohl oft Probleme.

Oh, sorry, "Mikro Python" hatte ich überlesen. Ich nutze die Arduino-IDE mit ihrem C++-Derivat. Da muss nur die Lib in den Sourcecode importiert sein, das Compilat enthält dann alles und hat keine (sichtbaren) Abhängigkeiten ...

OP #7393397
Lesenswert?

Es funktioniert!

Die Lösung aus meinem geposteten Link hat es doch gebracht. Ich habe REPL damit abgeschaltet:

import os os.dupterm(None, 1)

Der Grund warum es erst nicht geklappt hatte war, ich hatte einfach vergessen die Umleitung der Pins rauszunehmen.

https://docs.micropython.org/en/latest/esp8266/quickref.html

Sebastian W. schrieb:

  1. In der Anleitung von MicroPython ist irgendwo erwähnt, dass "stdin" mit der UART0 verbunden ist, und man daher von UART0 solange nichts lesen kann, bis man den REPL von der UART0 abklemmt.

Da hast du total richtig gelegen.

Vielen Dank!

Gruß Reinhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren