Forum: Mikrocontroller und Digitale Elektronik ESP8266 (Node MCU und D1 Mini)


von Matthias W. (matthiaswagner)


Lesenswert?

Guten Morgen,
ich habe einen ESP8266 (Node MCU und D1 Mini) verschaltet und schicke 
die Temperaturdaten per MQTT an einen Server (MQTT Broker). Micropython 
ist auf dem ESP installiert, das Python Programm mit Thonny funktioniert 
gut.

Wenn ich das ESP Board vom Rechner mit Thonny trenne, das Board mit 
Strom versorge dann funktioniert es nicht mehr. Genauer: Die Anmeldung 
im Wlan funktioniert, das verbinden zum MQTT Broker gelingt nicht. (die 
led nach  "mqttc.connect()" leuchtet nicht auf). Vor dem 
"mqttc.connect()" geht die led an.
Ich bin kein Profi, habe aber versucht die Lösung selber zu finden. Ich 
habe den gleichen Aufbau mit einem anderen Board (D1 Mini) und einem 
anderen Sensor (dht22) versucht - gleiches Ergebnis. Einer Fehlermeldung 
würde mir vielleicht helfen, aber wie komme ich die Meldung? Im log am 
MQTT Broker habe ich keine Fehlermeldung gefunden.

Jetzt weiss ich nicht mehr weiter. Hat jemand eine Idee?
1
import machine, onewire, ds18x20, time
2
3
# Verbindung zu Wlan
4
import network
5
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
6
sta_if.scan()                             # Scan for available access points
7
sta_if.connect("xxxxx", "xxxxx") # Connect to an AP
8
sta_if.isconnected()                      # Check for successful connection
9
10
# zum testen
11
# from machine import Pin 
12
# Pin(2, Pin.OUT).value(0) # led aus, 0 schaltet ein
13
14
# Verbindung zu MQTT Server
15
from umqtt.simple import MQTTClient
16
CLIENT_NAME = 'esp_1'
17
BROKER_ADDR = '192.168.59.67'
18
PORT = '1883'
19
mqttc = MQTTClient(CLIENT_NAME, BROKER_ADDR, keepalive=60)
20
mqttc.connect()
21
TOPIC = 'home/temp/azi'
22
23
ds_pin = machine.Pin(4)
24
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
25
roms = ds_sensor.scan()
26
#print('Found DS devices: ', roms)
27
28
while True:
29
  ds_sensor.convert_temp()
30
  time.sleep_ms(750)
31
  for rom in roms:
32
    #print(rom)
33
    temp = ds_sensor.read_temp(rom)
34
    mqttc.publish(TOPIC, ''+str("%2.2f"%temp))
35
    print('Die Temperatur im Azi: ', temp)
36
    #print (str("%2.2f"%temp))
37
  time.sleep(60) # alle 60 Sekunden

von Fred F. (fred08151)


Lesenswert?

Hast du es schonmal mit der Arduino IDE probiert ?
Da gibt es doch genug Beispiele.

von Matthias W. (matthiaswagner)


Lesenswert?

Hallo Fred,

danke für deine Antwort. Ich bin eigentlich froh von der Arduino IDE zu 
Thonny gekommen zu sein.

Wie ist so dein erster Gedanke zu dem Thema - ist für mich schwer zu 
begreifen. Der gleiche Code, nur einmal kommt er aus der IDE und 
funktioniert und wenn er vom ESP kommt, funktioniert er nicht...

Für eine Idee oder einen Wink wäre ich dankbar.

MfG

von Pete K. (pete77)


Lesenswert?

Was hast Du für eine Stromversorgung? Kabel getauscht? 600mA sollten 
mindestens zur Verfügung stehen.

von Stefan N. (stefan-n)


Lesenswert?

Hi,

habe keine Erfahrung mit Thonny, aber Danke für den Tip! ;-)

ein paar Anmerkungen:
* Ist Deine Stromversorgung ausreichend dimensioniert und gepuffert? 
(Evtl. hast Du eine Speisung über das USB-Kabel, sofern verbunden)
* Dein LED an / aus aus Deiner Prosa findet sich nicht so im Code
* Du frägst zwar ab ob "sta_if.isconnected()", wertest das aber nicht 
aus, woher weißt Du, dass Du wirklich mit dem passenden WLAN verbunden 
bist?

Viele Grüße
Stefan

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Pete K. schrieb:
> 600mA sollten mindestens zur Verfügung stehen.

Woher hast du diese Zahl?
Die Stromaufnahme des ESP8266 liegt beim Senden unter 400mA.

von Matthias W. (matthiaswagner)


Lesenswert?

Vielen Dank an alle.

 * das Netzteil macht max. 1,5 A
 * das Kabel habe ich versuchsweise getauscht - gleicher Effekt
 * Wlan funktioniert ohne Probleme auch wenn der Code vom ESP ausgeführt 
wird (den Code habe ich mir aus Thonny Beispielen kopiert)
 * der Code für die LED ist jetzt auskommentiert. Wenn der Codeteil 
aktiv ist leuchtet die LED auf wenn der Code vor der Zeile: 
mqttc.connect() steht
wenn er dahinter steht leuchtet die LED nicht. Daraus schliesse ich, 
dass das Problem beim mqtt.connect entsteht. Wenn der Code in der IDE 
ausgeführt wird steht die neue Verbindung zum MQTT Broker in der 
Logdatei - wenn der Code vom ESP ausgeführt wird passiert in der 
Logdatei nichts.

Das ist alles nicht professionell bei mir, aber ich weiss nicht wie man 
sonst debuggen kann.

Für Hilfe wäre ich wirklich sehr dankbar :-)

MfG

von Monk (roehrmond)


Lesenswert?

Rainer W. schrieb:
> Die Stromaufnahme des ESP8266 liegt beim Senden unter 400mA.

Nein, sie liegt knapp drüber. Habe ich selbst gemessen. Der da auch: 
https://www.ondrovo.com/a/20170207-esp-consumption/

Matthias, ich würde mal versuchen, die Netzwerk-Kommunikation mit 
Wireshark zu analysieren. Das lässt du am besten auf dem Rechner laufen, 
wo dein MQTT Server liegt.

Das D1 Mini Board läuft oft deutlich stabiler, wenn man einen 100µF Elko 
direkt an 3,3V + GND auf das Modul lötet.

: Bearbeitet durch User
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.