-         
Ergebnis 1 bis 9 von 9

Thema: ESP8266 D1 mini durch ESP32 D1 mini ersetzen

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043

    ESP8266 D1 mini durch ESP32 D1 mini ersetzen

    Anzeige

    LiFePo4 Akku selber bauen
    hallo allerseits,

    ich habe ein projekt mit ESP8266 (links im bild) ausgeführt, es funktionierte so weit alles, nun möchte ich etwas ähnliches mit dem ESP32 (rechts im bild) realisieren.
    Klicke auf die Grafik für eine größere Ansicht

Name:	2020_12_11_ESP_8266_und_ESP_32.jpg
Hits:	9
Größe:	51,1 KB
ID:	35358
    an beiden controlern ist ein 4-tastenfeld angeschlossen. Am ESP8266 am A0, dem einzigen pin, den man analog auslesen kann. Mit drei widerständen funktioniert auch das identifizieren und auswerten der einzelnen tasten....
    Nun zum ESP32.
    Das pinout der beiden inneren pinreihen des ESP32 ist ja identisch mit dem pinout des ESP8266, deshalb wollte ich auch am ESP32 den "A0" - hier GPIO36 nutzen. Was ich auch mache, es klappt einfach nicht. Weder mit "normal" analog auslesen des GPIO36, noch mit hilfe der adc-library (#include "driver/adc.h") wie es im netz auch behandelt wird...

    Hat sich jemand mit sowas schon mal beschäftigt? Ich habe inzwischen schon zwei tage dran verbracht - wäre für jeden tipp dankbar...
    gruß inka

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    709
    Hallo inka,

    ich habe auch diese Woche ein Projekt mit dem ESP32 angefangen. (mein erstes mit diesem Controller). Da ging das analogRead einwandfrei. Vielleicht zeigst du mal einen Schaltplan und etwas Code, damit wir schauen können woran es liegt?

    Viele Grüße
    Andreas

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    das ist der aufbau
    Klicke auf die Grafik für eine größere Ansicht

Name:	2020_12_12_aufbau_ESP32_tastenfeld.jpg
Hits:	5
Größe:	44,4 KB
ID:	35359
    so ist der ESP verdrahtet
    Klicke auf die Grafik für eine größere Ansicht

Name:	2020_12_12_verdrahtung_ESP32_tastenfeld.jpg
Hits:	9
Größe:	50,8 KB
ID:	35360

    code_1
    Code:
    //node 32s
    
    #include "driver/adc.h"
    
    //tastenfeld
    uint8_t taste_keypad;
    
    
    void setup()
    {
      Serial.begin(115200);
    
      adc1_config_width(ADC_WIDTH_BIT_12);
      adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_0);
    
    
    }
    
    void loop()
    {
      taste_keypad = adc1_get_raw(ADC1_CHANNEL_0);
    
      Serial.println(taste_keypad);
      delay(2000);
    }
    code_2
    Code:
    //node 32s
    
    //tastenfeld
    uint8_t taste_keypad;
    
    
    void setup()
    {
      Serial.begin(115200);
    
      //tasten abfrage initialisieren
      pinMode(36, INPUT_PULLUP);//A0
    }
    
    void loop()
    {
      taste_keypad = analogRead (36);
    
      Serial.println(taste_keypad);
      delay(2000);
    }
    bei beiden codebeispielen wird "255" auf dem serial monitor ausgegeben, wobei code_2 für den ESP8266 geschrieben wurde und dort auch die vier tastenwerte ausgegeben werden.
    Ich denke das liegt an der "initialisierung" des GPIO36, ich habe aber nicht rausfinden können wo dort das problem liegt. Wie gesagt, code_2 (mit A0 statt GPIO36) funktioniert bei ESP8266
    gruß inka

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    709
    Hallo inka,

    du liest einen 12 Bit-Wert in eine 8-Bit Variable ein. ändere mal folgendes:

    Code:
    //tastenfeld
    uint16_t taste_keypad;
    Viele Grüße
    Andreas

    - - - Aktualisiert - - -

    Nachtrag: folgendes solltest du weglassen:

    pinMode(36, INPUT_PULLUP);//A0

    damit konfiguiest du den Pin als digitalen Eingang. Ich habe diese Woche auch bemerkt, dass INPUT_PULLUP nicht funktioniert.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    danke Andreas,
    beides geändert, die ausgabe ist nun 4095 statt 255...

    noch eine idee?
    gruß inka

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    709
    Hallo Inka,

    ich kenne dein Board nicht, aber bei GPIO36 steht auf deinem Plan auch "NC", was oft not connected bedeutet. Kannst du mal testweise GPIO 33, 34 oder 35 probieren? (dies sind die einzigen ADC1 Eingänge auf deinem Board)

    Sollte auch das nicht gehen würde ich mal die Spannung am Pin messen.

    Viele Grüße
    Andreas

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    hallo Andreas,
    das NC steht für den pin daneben, also aus der äusseren reihe. aber ich ptobiere einen anderen pin...
    gruß inka

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    das mit den anderen pins hat nicht für die analoge abfrage der pins funktioniert. Nun habe ich 4 digitale GPIOS genommen (16,17,21,22) und frage diese mit dem code ab:

    Code:
    //board "node32s"
    
    // RGB LED
    #define ledPin_bl 19
    #define ledPin_gn  23
    #define ledPin_rt 5
    
    
    //tastenfeld
    #define taste_1 21
    #define taste_2 22
    #define taste_3 16
    #define taste_4 17
    
    //int ausgang_1 = 13;
    
    boolean zustand_taste_1 = LOW;
    boolean zustand_taste_2 = LOW;
    boolean zustand_taste_3 = LOW;
    boolean zustand_taste_4 = LOW;
    
    #include <SoftwareSerial.h>
    SoftwareSerial BTserial(18, 26); //9,10
    
    void setup()
    {
      Serial.begin(115200);
    //  pinMode(ausgang_1, OUTPUT);
    
      //tastenfeld
      pinMode(taste_1, INPUT);
      pinMode(taste_2, INPUT);
      pinMode(taste_3, INPUT);
      pinMode(taste_4, INPUT);
    
      //RGB LED
      pinMode(ledPin_bl, OUTPUT);
      pinMode(ledPin_gn, OUTPUT);
      pinMode(ledPin_rt, OUTPUT);
    
    
    
      BTserial.begin(115200);
    
    }
    
    void loop()
    {
      zustand_taste_1 = digitalRead(taste_1);
      zustand_taste_2 = digitalRead(taste_2);
      zustand_taste_3 = digitalRead(taste_3);
      zustand_taste_4 = digitalRead(taste_4);
    
    
      if (zustand_taste_1 == HIGH)
      {
        digitalWrite(zustand_taste_1, HIGH);
        BTserial.println("e");
    
        digitalWrite(ledPin_bl, HIGH);
        //digitalWrite(ledPin_rt, HIGH);
        delay(500);
        digitalWrite(ledPin_bl, LOW);
        //digitalWrite(ledPin_rt, LOW);
        delay(500);
    
        Serial.println("taste 1 gedrückt");
        delay(1000);
      }
    
      if (zustand_taste_2 == HIGH)
      {
        digitalWrite(zustand_taste_2, HIGH);
        BTserial.println("f");
    
        digitalWrite(ledPin_rt, HIGH);
        delay(500);
        digitalWrite(ledPin_rt, LOW);
        delay(500);
    
        Serial.println("taste 2 gedrückt");
        delay(1000);
      }
    
      if (zustand_taste_3 == HIGH)
      {
        digitalWrite(zustand_taste_3, HIGH);
        BTserial.println("g");
    
        digitalWrite(ledPin_gn, HIGH);
        delay(500);
        digitalWrite(ledPin_gn, LOW);
        delay(500);
    
        Serial.println("taste 3 gedrückt");
        delay(1000);
      }
    
      if (zustand_taste_4 == HIGH)
      {
        digitalWrite(zustand_taste_4, HIGH);
        BTserial.println("h");
    
        digitalWrite(ledPin_rt, HIGH);
        digitalWrite(ledPin_gn, HIGH);
        delay(500);
        digitalWrite(ledPin_gn, LOW);
        digitalWrite(ledPin_rt, LOW);
        delay(500);
    
        Serial.println("taste 4 gedrückt");
        delay(1000);
      }
    
    }
    die abfrage als solche funktioniert nun einwandfrei, ein anderes problem tauchte auf:

    die tasten (es ist ein folientastenfeld) verhalten sich nun als induktive tasten, will heissen ich muss sie gar nicht drücken, sondern nur mit dem finger in die nähe kommen und schon schalten sie. Ist ungünstig, weil ich eine haptische rückmeldung über das drücken einer taste brauche

    Ich glaube, die pins sind zu empfindlich. Wie kann ich diese empfindlichkeit reduzieren?

    btw: wenn ich die pindefinition um "_PULLUP" ergänze, werden die tasten der reihe nach durchgeschaltet, ohne das man was tut...
    gruß inka

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    709
    Hallo Inka,

    wie in meinen Post #4 erwähnt funktioniert INPUT_PULLUP nicht nach meiner Erfarhung. Du musst die Widerstände manuell setzen. So ab 1 kOhm oder höher würde ich empfehlen.

    Viele Grüße
    Andreas

Ähnliche Themen

  1. ESP32-C3: Espressif bringt zu ESP8266 kompatiblen RISC-V-Controller
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 23.11.2020, 09:50
  2. Classic-Mini-Konsole: Sega bringt Mini-Arcade zum Mitnehmen
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 07.07.2020, 16:10
  3. Antworten: 7
    Letzter Beitrag: 07.07.2020, 10:28
  4. Mini Robotics Mini Robot Kit (9-Servo)
    Von pinsel120866 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 4
    Letzter Beitrag: 16.11.2008, 16:01
  5. mini mini Roboter
    Von roro13 im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 62
    Letzter Beitrag: 08.05.2006, 18:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •