TKK_E32211861/iotkk_ver9.ino

183 lines
5.4 KiB
C++

#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define SS_PIN D2 // SDA / SS is connected to pinout D2
#define RST_PIN D1 // RST is connected to pinout D1
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
#define ON_Board_LED 2
#define BUZZER_PIN D8 // Define the pin for the buzzer
const char* ssid = ":)";
const char* password = "hanadulset";
ESP8266WebServer server(80); // Server on port 80
int readsuccess;
byte readcard[4];
char str[32] = "";
String StrUID;
String receivedData = "";
String newBalance = "";
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Wire.begin(D3, D4);
Serial.begin(115200); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
delay(500);
// Initialize the LCD
lcd.begin(16, 2);
lcd.clear();
lcd.backlight();
WiFi.begin(ssid, password); // Connect to your WiFi router
Serial.println("");
pinMode(ON_Board_LED, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT); // Set buzzer pin as output
digitalWrite(ON_Board_LED, HIGH); // Turn off Led On Board
digitalWrite(BUZZER_PIN, LOW); // Ensure the buzzer is off initially
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
digitalWrite(ON_Board_LED, LOW);
delay(250);
digitalWrite(ON_Board_LED, HIGH);
delay(250);
}
digitalWrite(ON_Board_LED, HIGH); // Turn off the On Board LED when it is connected to the wifi router.
Serial.println("");
Serial.print("Successfully connected to : ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Setup server routes
server.on("/", HTTP_GET, handleRoot);
server.begin();
Serial.println("Please tag a card or keychain to see the UID !");
Serial.println("");
}
void loop() {
// Handle client requests
server.handleClient();
// Read RFID card
readsuccess = getid();
if (readsuccess) {
digitalWrite(ON_Board_LED, LOW);
digitalWrite(BUZZER_PIN, HIGH) ; //DO note 523 Hz
delay (250); // Turn on the buzzer
digitalWrite(BUZZER_PIN, LOW) ;
HTTPClient http; // Declare object of class HTTPClient
WiFiClient client;
String UIDresultSend = StrUID;
String postData = "UIDresult=" + UIDresultSend;
http.begin(client, "http://bersyukur.cloud/IOTKK/getUID.php");
http.addHeader("Content-Type", "application/x-www-form-urlencoded"); // Specify content-type header
int httpCode = http.POST(postData); // Send the request
String payload = http.getString(); // Get the response payload
Serial.println(UIDresultSend);
Serial.println(httpCode); // Print HTTP return code
Serial.println(payload); // Print request response payload
receivedData = payload; // Store received data
http.end(); // Close connection
// Make a GET request to receive new balance data
if (WiFi.status() == WL_CONNECTED) {
http.begin(client, "http://bersyukur.cloud/IOTKK/sendNewBalance.php");
int httpCode = http.GET();
Serial.println("HTTP GET code: " + String(httpCode)); // Print HTTP return code
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
newBalance = http.getString();
String balance = newBalance;
Serial.println("New balance received: " + newBalance);
// Display the new balance on the LCD with scrolling
scrollText(balance);
} else {
Serial.println("Failed to get new balance, response code: " + String(httpCode));
}
} else {
Serial.printf("[HTTP] GET request failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
} else {
Serial.println("WiFi not connected");
}
delay(250);
digitalWrite(BUZZER_PIN, LOW); // Turn off the buzzer
digitalWrite(ON_Board_LED, HIGH);
}
}
int getid() {
if (!mfrc522.PICC_IsNewCardPresent()) {
return 0;
}
if (!mfrc522.PICC_ReadCardSerial()) {
return 0;
}
Serial.print("THE UID OF THE SCANNED CARD IS : ");
for (int i = 0; i < 4; i++) {
readcard[i] = mfrc522.uid.uidByte[i]; // Storing the UID of the tag in readcard
array_to_string(readcard, 4, str);
StrUID = str;
}
mfrc522.PICC_HaltA();
return 1;
}
void array_to_string(byte array[], unsigned int len, char buffer[]) {
for (unsigned int i = 0; i < len; i++) {
byte nib1 = (array[i] >> 4) & 0x0F;
byte nib2 = (array[i] >> 0) & 0x0F;
buffer[i * 2 + 0] = nib1 < 0xA ? '0' + nib1 : 'A' + nib1 - 0xA;
buffer[i * 2 + 1] = nib2 < 0xA ? '0' + nib2 : 'A' + nib2 - 0xA;
}
buffer[len * 2] = '\0';
}
void handleRoot() {
server.send(200, "text/plain", receivedData);
}
// Function to scroll text on the LCD from right to left
void scrollText(String message) {
message = " " + message + " "; // Add spaces to the start and end for scrolling effect
for (int i = 0; i < message.length() - 16; i++) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(message.substring(i, i + 16)); // Print a substring of the message
delay(200); // Delay to control the scroll speed
lcd.clear();
}
}