#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#define UART_BAUD 9600
#define LED_PIN 5
#define ANALOG_PIN A0
#define LAMP_PIN 14
WiFiServer server(5210);
WiFiClient client;
const char* ssid = "as86";
const char* password = "1324576890";
IPAddress ip(192, 168, 11, 86);
IPAddress netmask(255, 255, 255, 0);
bool wifiConnected = false;
bool lampOn = false;
// Database pertanyaan dan jawaban
struct QnA {
String question;
String answer;
};
QnA qnaDatabase[] = {
{"password", "1324576890"},
{"tweeter", "tweeter for life"},
{"hello", "Halo! Apa kabar?"},
{"nama", "Saya adalah Robot WiFi Serial"},
{"siapa kamu", "Saya robot pintar yang bisa menjawab pertanyaan"},
{"apa kabar", "Saya baik-baik saja, terima kasih!"},
{"terima kasih", "Sama-sama!"},
{"bye", "Sampai jumpa lagi!"},
{"wifi", "WiFi AP: as86, Password: 1324576890"},
{"ip", "IP Address: 192.168.11.86"},
{"jam", "Maaf, saya tidak punya fitur jam"},
{"tanggal", "Saya belum bisa mengetahui tanggal"},
{"cerita", "Suatu hari di dunia koding..."},
{"musik", "Saya suka musik elektronik dari microcontroller"},
{"warna", "Warna favorit saya adalah biru LED"},
{"makanan", "Saya 'makan' listrik dari power supply"},
{"umur", "Saya baru saja dibuat, jadi masih muda"},
{"hobi", "Hobi saya adalah menjawab pertanyaan"},
{"c++", "C++ adalah bahasa pemrograman favorit saya"},
{"arduino", "Arduino dan ESP8266 adalah platform saya"},
{"esp8266", "ESP8266 adalah chip WiFi yang powerfull"},
{"coding", "Coding adalah seni digital"},
{"robot", "Ya, saya adalah robot!"},
{"led", "LED pada pin 5 bisa dikontrol"},
{"lampu", "Lampu pada pin 14 bisa dihidup/mati"}
};
const int qnaCount = sizeof(qnaDatabase) / sizeof(QnA);
String findAnswer(String question) {
question.toLowerCase();
question.trim();
for(int i = 0; i < qnaCount; i++) {
if(question == qnaDatabase[i].question) {
return qnaDatabase[i].answer;
}
}
// Jika pertanyaan mengandung kata kunci
if(question.indexOf("ping") >= 0) {
lampOn = true;
return "Lampu indikator dihidupkan!";
}
if(question == "0" || question.indexOf("matikan") >= 0) {
lampOn = false;
digitalWrite(LAMP_PIN, LOW);
return "Lampu indikator dimatikan!";
}
if(question == "help" || question == "?") {
String helpText = "Perintah yang tersedia:\n";
for(int i = 0; i < qnaCount; i++) {
helpText += "- " + qnaDatabase[i].question + "\n";
}
helpText += "- ping (untuk hidupkan lampu)\n";
helpText += "- 0 (untuk matikan lampu)\n";
helpText += "- help (lihat semua perintah)";
return helpText;
}
return "Maaf, saya tidak mengerti pertanyaan Anda. Ketik 'help' untuk bantuan.";
}
void setup() {
Serial.begin(UART_BAUD);
Serial.println("\n\nStarting Robot WiFi QnA...");
Serial.println("=============================");
Serial.println("Robot Tanya Jawab WiFi Serial");
Serial.println("Ketik 'help' untuk bantuan");
Serial.println("=============================\n");
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(ip, ip, netmask);
if(WiFi.softAP(ssid, password)) {
Serial.print("✓ WiFi AP started\nSSID: ");
Serial.print(ssid);
Serial.print("\nPassword: ");
Serial.print(password);
Serial.print("\nIP Address: ");
Serial.println(WiFi.softAPIP());
wifiConnected = true;
} else {
Serial.println("✗ Error starting WiFi AP");
wifiConnected = false;
}
server.begin();
pinMode(LED_PIN, OUTPUT);
pinMode(ANALOG_PIN, INPUT);
pinMode(LAMP_PIN, OUTPUT);
digitalWrite(LAMP_PIN, LOW);
// Blink LED startup
for(int i = 0; i < 3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
delay(100);
}
}
void loop() {
if(wifiConnected) {
// Handle new WiFi clients
WiFiClient newClient = server.available();
if(newClient) {
Serial.println("Client terhubung via WiFi");
client = newClient;
client.println("Selamat datang di Robot QnA WiFi!");
client.println("Ketik pertanyaan Anda...");
}
// Handle input dari WiFi client
if(client.connected()) {
if(client.available()) {
String command = client.readStringUntil('\n');
command.trim();
if(command.length() > 0) {
Serial.print("Client: ");
Serial.println(command);
String answer = findAnswer(command);
client.println("Robot: " + answer);
Serial.print("Robot: ");
Serial.println(answer);
}
}
}
// Handle input dari Serial Monitor
if(Serial.available() > 0) {
String serialInput = Serial.readStringUntil('\n');
serialInput.trim();
if(serialInput.length() > 0) {
Serial.print("Anda: ");
Serial.println(serialInput);
String answer = findAnswer(serialInput);
Serial.print("Robot: ");
Serial.println(answer);
// Forward ke WiFi client jika terhubung
if(client.connected()) {
client.println("Serial: " + serialInput);
client.println("Robot: " + answer);
}
}
}
// Blink lampu jika mode aktif
if(lampOn) {
digitalWrite(LAMP_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
delay(250);
digitalWrite(LAMP_PIN, LOW);
digitalWrite(LED_PIN, LOW);
delay(250);
}
} else {
Serial.println("WiFi tidak terkoneksi");
delay(1000);
}
delay(10);
}