Forum: Mikrocontroller und Digitale Elektronik D1 Mini- UART0 nutzen?


von Reinhard T. (reinhard_t884)


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')

von Sebastian W. (wangnick)


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)

2. 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

: Bearbeitet durch User
von Reinhard T. (reinhard_t884)


Lesenswert?

Hallo Sebastian,

vielen Dank ich habe es gerade probiert.
Es ist völlig widersinnig, wenn ich GPIO15, also TX, mit RX vom Modul 
verbinde, läuft das Programm nicht an.
Lasse ich TX offen, läuft das Programm, aber empfangen wird auch nichts.
Klingt unglaubwürdig, das weiß ich.

Viele Grüße
Reinhard

von Falk B. (falk)


Lesenswert?

Massen verbunden?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

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

von Reinhard T. (reinhard_t884)


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:
> 2. 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

von Frank E. (Firma: Q3) (qualidat)


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 ...

von Reinhard T. (reinhard_t884)


Lesenswert?

Ich gebs erst mal auf.
Hier ist unter UART das Problem gut beschrieben, beide Lösungen 
funktionieren bei mir aber nicht:
https://docs.micropython.org/en/latest/esp8266/quickref.html

von Reinhard T. (reinhard_t884)


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:
> 2. 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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.