Keypad an d1 mini

Moin :sweat_smile:

Und zwar würde ich gerne ein 4x4 Matrix Keypad(dieses hier) an einem d1 mini( dieses ) betreiben.
Die gedrückte Taste wird dann an ein php script auf meinem server übergeben.
Hab das schon mal ohne das Keypad ausprobiert. Funktioniert einwandfrei.

Gut dann hab ich das Keypad angeschlossen und im scatch die keypad.h bib eingebunden.

Alles so gemacht wie in diesem Beispiel. PIN belegung noch geändert damit es am d1 mini passt. den scatch hochgeladen dann die Fehlermeldung :

wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v40106d8c
~ld

ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wiederholt sich danach...

Hab schon mal durch ein paar Foren geschaut(andere kabel benutzt, direkt ans netzteil,...) bringt alles nichts.
sogar schon versucht die Bib wegzulassen und es selber zu programmieren aber da stößt es dann doch an meine Grenzen :frowning: . Gibt es irgendeine Möglichkeit das Keypad mit der vorhandenen Bib am d1 zu benutzen oder muss es ein uno sein? :confused:

danke schon mal :frowning:

Ich tippe darauf, dass die Library nicht am Wemos funktioniert.

Alternative wäre per I2C-Expander einlesen und auf den Wemos geben.

Da tut die Lib zu lange nichts.

rst cause: 4 ist der watchdog. Siehe hier.

Gruß Tommy

Laut diesem Artikel sollte es aber gehen. Nimm mal die aktuelle Version der Lib. Die alte vorher entfernen.
Ungetestet, nur per Google gefunden.

aktuelle Version der lib hab ich ...

mal angenommen ich lass die Keypad.h weg und mach das selber...
müsste doch dann ungefähr so funktionieren:

Erste Zeile auf high setzen. Dann an den Spalten-Pins 5-8 schauen ob irgendeiner ein Signal bekommt. Falls ja -> zahl gefunden
Danach das gleiche mit Zeile 2,3,4.

ungefähr so: ? :sweat_smile: Funktionieren tut das natürlich nicht :slight_smile:

  digitalWrite(outputPin1, HIGH);    //Zeile 1 
  
  if(digitalRead(inputPin5) == 1) {   //überprüfen ob Spalte 1 mit Zeile 1 verbunden
    wert = 1;
  }
  if(digitalRead(inputPin6) == 1) {   //überprüfen ob Spalte 2 mit Zeile 1 verbunden
    wert = 2;
  }
  if(digitalRead(inputPin7) == 1) {   //überprüfen ob Spalte 3 mit Zeile 1 verbunden
    wert = 3;

//Spalte 4 lass ich mal weg. die Buchstaben brauch ich erst mal nicht.
  }

Ich würde mit INPUT_PULLUP die Spalten auf HIGH setzen (weniger Störungen), die Zeilen auf LOW und dann die Spalten durchtesten.

Probiere erst mal eine Zeile.
Wenn er immer noch rebootet, dan hänge mal regelmäßig Aufrufe von yield() rein. Das setzt den Watchdog zurück.

Gruß Tommy

Danke noch mal für die Hilfe :slight_smile:

aktueller Stand: Habe die Keypad.h lib jetzt doch zum laufen bekommen. weiß nicht was voher falsch war aber hat auf ein mal funktioniert :sweat_smile:

#include <Keypad.h>
 
const byte n_rows = 4;
const byte n_cols = 4;
 
char keys[n_rows][n_cols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 
byte colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
 
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols); 


 
void setup(){
  Serial.begin(115200);
}
 
void loop(){
  char myKey = myKeypad.getKey();
 
  if (myKey != NULL){
    Serial.print("Key pressed: ");
    Serial.println(myKey);
  }
}

so jetzt aber zum nächsten Problem ... : den Wert von myKey würde ich gerne an meine Datenbank senden.

#include <ESP8266WiFi.h> 
const char* ssid = "xxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxx";
const char* host = "xxxxxxxx"; //Web Server


 
void setup() {
  //Serial Start
  Serial.begin(115200);
  delay(10);
  
  

  
  
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
 


 
void loop() {
 
  delay(100);
  
  
 
  
  Serial.print("connecting to ");
  Serial.println(host);
  
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
  // We now create a URI for the request
  String url = "/CaptainEingabe.php?wert=";
  url +=5;
  
  
  Serial.print("Requesting URL: ");
  Serial.println(url);
  
  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  Serial.println("Werte an WebServer uebergeben");
  
  
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    //Serial.print(line);
  }
  
  Serial.println();
  Serial.println("closing connection");
  delay(1000);
 
  
}

unabhängig von einander funktioniert das einwandfrei.

Sobald ich aber die Keypad.h über ESP8266WiFi.h kopiere :

#include <Keypad.h>
#include <ESP8266WiFi.h>

bekomme ich diese Fehlermeldung:

In file included from sketch\xxx.ino.cpp:1:0:

C:\xxxxxx: error: expected identifier before numeric constant

 #define HIGH 0x1

              ^

C:\Users\xxxxDocuments\Arduino\libraries\Keypad\src/Keypad.h:56:16: note: in expansion of macro 'HIGH'

 #define CLOSED HIGH

                ^

C:\Users\xxxxAppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WiFi\src/include/wl_definitions.h:73:3: note: in expansion of macro 'CLOSED'

   CLOSED      = 0,

   ^

C:\Users\xxxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\cores\esp8266/Arduino.h:42:14: error: expected '}' before numeric constant

 #define HIGH 0x1

              ^

C:\Users\xxxx\Documents\Arduino\libraries\Keypad\src/Keypad.h:56:16: note: in expansion of macro 'HIGH'

 #define CLOSED HIGH

                ^

C:\Users\xxxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WiFi\src/include/wl_definitions.h:73:3: note: in expansion of macro 'CLOSED'

   CLOSED      = 0,

   ^

C:\Users\xxxxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\cores\esp8266/Arduino.h:42:14: error: expected unqualified-id before numeric constant

 #define HIGH 0x1

              ^

C:\Users\xxxx\Documents\Arduino\libraries\Keypad\src/Keypad.h:56:16: note: in expansion of macro 'HIGH'

 #define CLOSED HIGH

                ^

C:\Users\xxxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WiFi\src/include/wl_definitions.h:73:3: note: in expansion of macro 'CLOSED'

   CLOSED      = 0,

   ^

In file included from C:\Users\xxx\Documents\Arduino\darts1\darts1.ino:9:0:

C:\Users\xxxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WiFi\src/ESP8266WiFi.h:29:1: error: expected declaration before '}' token

 }

 ^

exit status 1
Fehler beim Kompilieren für das Board WeMos D1 R2 & mini.

Jemand ne Ahnung was man da machen könnte ?^^

Bekomme ich auch.
Wenn ich sie als letztes #include setze, bekomme ich keine Fehlermeldung. Irgendwie ist das komisch. Ich habe jetzt aber auch nicht tiefer gesucht.

Gruß Tommy

Tommy56:
als letztes #include setze

DANKE!!!! Da hätte ich mich tot gesucht und wäre nicht drauf gekommen die zu tauschen :disappointed_relieved:
Jetzt funktioniert alles :grin: Vielen Dank Tommy!

Es ist aber kein befriedigender Zustand und deutet auf Unsauberkeiten hin.

Gruß Tommy

Ich weis der Beitrag ist schon einige Tage her aber ich versuche mich auch gerade an dieser Art.
Dieses Keypad 4x4 Matrix Keypad Tastatur kompatibel mit Arduino und Raspberry Pi – AZ-Delivery möchte ich mit dem Wemos verbinden. Beim Wemos kommt momentan nichts an. Ich hab die Tastatur von D0 bis D7 angeschlossen... Hat noch jemand eine Idee an was es liegen könnte das nichts ankommt?

Edit

Es geht :slight_smile: keine Ahnung warum aber es geht. Jetzt an den nächsten Teil. Werte per mqtt senden.

Brainbug01:
....
Es geht :slight_smile: keine Ahnung warum aber es geht. Jetzt an den nächsten Teil. Werte per mqtt senden.

Wackelkontakt an der Anschlüssen !

Und für das neue Thema einen neuen Thread aufmachen.
Das passt hier nicht rein.