Kita sampai pada bagian ujung dari praktek pembuatan kunci motor berbasis wifi + sdcard , dimana kita akan menggabungkan pembahasan sebelumnya yaitu esp8266 sebagai async webserver dan bahasan kedua mengenai SD Card. Jadi pembahasan awal ini perlu dipahami terlebih dulu agar tidak terlalu membingungkan bagi pembaca setia blog ini.
Secara garis besar tujuan yg ingin dicapai dari seri praktek kali ini adalah :
- Menggunakan ESP8266 sebagai akses poin dan webserver untuk diakses smartphone dan selanjutnya mengontol relay yg terhubung dengan sistem elektrik kunci motor
- SD card digunakan sebagai media penyimpanan parameter wifi dan kunci jawaban / challenge kode yg akan dipecahkan pengguna lewat smartphone
Rangkaian yg saya rancang diagramnya seperti ini :
Nah kali ini akan saya bahas bagian yg penting saja dan belum pernah dibahas pada 2 seri tulisan sebelumnya, yaitu bagian file seting wifi dan pertanyaan untuk password, dimana pengguna dapat menulis sendiri di SD card melalui PC/Laptop dan membuat alat ini bisa diubah sesuai keinginan. Disini saya menggunakan file seting bernama kunci.txt yg berisikan data:
wifi,motorku,kerensekali
1,merek motor,suzuki
2,tahun beli,2012
3,kota,surabaya
4,nama kucing,pussy
5,hobby,mancing
Baris paling atas wifi,motorku,kerensekali merupakan setting untuk nama wifi dan password (minimal 8 karakter). Sedangkan selanjutnya merupakan 5 buah urutan pertanyaan yg bisa dipecahkan untuk menghidupkan relay kontak motor.
Untuk script pembacaan isi file perbaris kemudian di parsing sebagai berikut:
dataFile = SD.open("kunci.txt");
if (dataFile) {
while (dataFile.available()) {
buffer = dataFile.readStringUntil('\r\n');
//Buka seting wifi password
if(getStringPartByNr(buffer,',',0) == "wifi")
{
Serial.println(buffer);
ssid = getStringPartByNr(buffer,',',1);
password = getStringPartByNr(buffer,',',2);
}
//buka pertanyaan dan jawaban sesuai urutan sequence
else if(getStringPartByNr(buffer,',',0) == String(sequ))
{
Serial.print("pertanyaan : ");
key = getStringPartByNr(buffer,',',1);
Serial.print(key);
Serial.print(" - jawaban : ");
chal =getStringPartByNr(buffer,',',2);
Serial.println(chal);
}
}
dataFile.close();
Sedangkan untuk melakukan perubahan pertanyaan agar tidak sama terus yg ditanyakan, perlu diadakan proses penambahan sequence yg disimpan pada file seq.txt , ya mirip seperti proses random / memilih pertanyaan secara acak.
SD.remove("seq.txt"); //hapus dulu lalu bikin lagi
File myFile = SD.open("seq.txt", FILE_WRITE);
if (myFile) // it opened OK
{
Serial.println("Writing to seq.txt");
sequ++; //nambah posisi pertanyaan
if(sequ > maxsequ) sequ= 1; //muter ke awal
//nulis ke SD sequence baru
myFile.print(String(sequ));
myFile.close();
Serial.print("sequence sekarang :");
Serial.println(String(sequ));
}
else
Serial.println("Error opening seq.txt");
Untuk membandingkan apakah jawaban benar atau tidak maka dilakukan pembandingan di inputan yg diresponse oleh form submit secara asynchronous.
server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
String inputMessage;
String inputParam;
// GET input1 value on <ESP_IP>/get?input=<inputMessage>
if (request->hasParam(PARAM_INPUT) ) {
inputMessage = request->getParam(PARAM_INPUT)->value();
inputParam = PARAM_INPUT;
}
else {
inputMessage = "No challenge ";
inputParam = "none";
}
Serial.print("jawaban : ");
Serial.println(inputMessage);
//jika jawaban sesuai
if(inputMessage == chal)
{
request->send(200, "text/html", SendBenar());
}
else{
olkey = key ;
request->send(200, "text/html", SendSalah(olkey,inputMessage));
}
writeToFile(); //nambah sequence pertanyaan
});
Hasilnya cukup memuaskan dan pertanyaannya dapat diubah sesuai keinginan.
Karena masih berupa web dan formatnya berupa GET biasa, maka untuk pengembangan bisa diwrap kedalam APK android yg cukup simple, hanya butuh merubah web HTML ke aplikasi android. Juga jika mau keren bisa disertai Relay kedua untuk melakukan starter melalui tombol di layar smartphone.
Berminat mengembangkan ke produk jadi ? Hubungi : 08155737755