#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <MQTT.h>
WiFiClient net;
MQTTClient client;
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
int status = WL_IDLE_STATUS;
const char* MQTT_HOST = "broker.emqx.io";
const char* TOPIC = "IAGI/password";
/* Display */
LiquidCrystal_I2C lcd(0x27, 16, 2);
String BUFFER = "";
/* Keypad setup */
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {19, 18, 5, 17};
byte colPins[KEYPAD_COLS] = {16, 4, 0, 2};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
void messageHandler(String &topic, String &payload) {
Serial.print("\nRecieved a message on topic ");
Serial.print(topic);
Serial.print(" with payload ");
Serial.print(payload);
Serial.print("\n");
}
void publishPassword() {
client.publish(TOPIC, BUFFER);
}
void connect() {
Serial.print("Checking WiFi ");
while(WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
Serial.println("Connecting to broker ");
while(!client.connect("ayoubdya_keypad")) {
delay(100);
Serial.print(".");
}
Serial.println("\nConnected to broker.");
client.subscribe(TOPIC);
}
void setup() {
Serial.begin(115200);
// WIFI SETUP
Serial.println("Connecting to WiFi ");
WiFi.begin(ssid, pass, 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println();
Serial.println("You're connected to the network");
client.begin(MQTT_HOST, net);
client.onMessage(messageHandler);
connect();
// LCD SETUP
lcd.init();
lcd.backlight();
}
void loop() {
client.loop();
if(!client.connected()) {
connect();
}
char key = keypad.getKey();
if (key) {
lcd.clear();
switch(key) {
case 'A':
case 'B':
case 'C':
case 'D':
case '*':
break;
case '#':
publishPassword();
BUFFER = "";
break;
default:
Serial.println(key);
BUFFER += key;
break;
}
lcd.print(BUFFER);
}
delay(50);
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4