Micropython: ESP32 ADC auslesen bei bestehender Netzwerkverbindung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hjliedtke
User
Beiträge: 10
Registriert: Sonntag 10. November 2019, 20:49

Moin,
ich habe ein Programm geschrieben, das verschiedene LEDs bei einem Solarregler überwacht und den Zustand auf einem Display ausgibt. Perspektivisch möchte ich das über eine kleine Website darstellen.
Das Programm funktioniert wie gewollt, aber wenn ich eine WLAN -Verbindung aufbaue und dann die ADCs auslesen will, bekomme ich eine Fehlermeldung:

ValueError: invalid atten

Zum Testen habe ich es etwas vereinfacht:

# Vorbereitung Wlan Verbindung und Test ADC

try:
import usocket as socket
except:
import socket
from time import sleep
import network

import esp
esp.osdebug(None)

import gc
gc.collect()

from machine import ADC, Pin

ssid = 'xxx'
password = 'yyy'

station = network.WLAN(network.STA_IF)

station.active(False)
station.active(True)
station.connect(ssid, password)

while station.isconnected() == False:
pass

print('Connection successful')
print(station.ifconfig())

FloatL = ADC(Pin(13)) in dieser Zeile entsteht der Fehler: ValueError: invalid atten
dabei ist es egal, welchen ADC-Pin ich auswähle
a = FloatL

Ohne die Zeilen zum Wlan funktioniert alles.
Deaktivieren die Zeilen zum Wlan-Aufbau die ADC-Pins?

Hans-Jürgen
Benutzeravatar
Dennis89
User
Beiträge: 1519
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

kannst du bitte immer die vollständige Fehlermeldung im Code-Tag mit kopieren?

Mit `atten` kann man die Referenzspannung angeben. Eventuell die mal mit angeben, es gibt folgende Möglichkeiten:
https://docs.micropython.org/en/latest/ ... f.html#ADC

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
hjliedtke
User
Beiträge: 10
Registriert: Sonntag 10. November 2019, 20:49

Moin Dennis
das war die vollständige Fehlermeldung. Ich war auch etwas überrascht, weil sie unvollständig aussieht.
[code]
Traceback (most recent call last):
File "<stdin>", line 35, in <module>
ValueError: invalid atten
>>>
[/code]

Dein Link war aber trotzdem sehr hilfreich. Es hatte zwar nichts mit einer Spannungsangabe zu tun, aber weiter oben im Text stand, dass die ADC -Pins zu Blöcken zusammengefasst sind. "Meine" Pins gehören zu Block 2. Und dieser Block wird bei eingeschaltetem WiFi von WiFi mit benutzt, führt also beim Versuch einen aus der Gruppe als ADC zu verwenden zu einem Fehler. In meinem TestProgramm habe ich jetzt einen aus Block1 genommen und bekomme keinen Fehler.
Ich ändere in meinem Programm die Pinzuordnungen und dann läuft es.
Vielen Dank.
Hans-Jürgen
Benutzeravatar
DeaD_EyE
User
Beiträge: 1224
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Genau das gleiche Problem hatte ich auch einmal. Dummerweise ist das erst aufgefallen, nachdem das PCB angefertigt worden ist.
Bei Mikrocontrollern sollte man immer genau darauf achten, welche Pins was können und in welchen Situationen diese Pins nicht mit Funktion XY genutzt werden können.

Bei ESP32 ist z.B. auch der erste SPI-Bus belegt. Dort müsste sich der externe SPIFLASH befinden. Falls man noch SPIRAM hat, fällt noch ein SPI-Bus weg, den man nicht nutzen kann oder sollte/kann.
Dann kann man bestimmte Pins nicht im deepsleep/lightsleep zum Aufwecken nutzen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten