Mengunduh file (download) dari web server melaui web browser biasa kita lakukan. protokol yang umum digunakan adalah FTP atau HTTP. Perancangan kali ini menggunakan Arduino sebagai file server. File-filenya disimpan dalam SDCard, dan untuk berkomunikasi dengan jaringan menggunakan modul wifi ESP8266.
Perancangan sistem file server arduino ini mampu menampilkan File SDCard ke web browser, daftar file file ini merupakan isi dari root direktori kartu memori.
Untuk mendownload file dari arduino, buka browser di halaman sesuai alamat IP Wifi ESP8266 kemudian klik file yang akan didownload, atau jika ingin mendownload secara langsung bisa melalui link http://(alamat ip ESP8266)/namafile.ext.
Komponen yang digunakan :
- Arduino Mega
- Modul MicroSD
- Modul ESP8266 ESP12E
skema download file dari kartu memori melalui ESP8266 :
Sebelum digunakan edit dulu bagian ini :
#include <SPI.h> #include <SD.h> #include "WiFiEsp.h" char ssid[] = "Twim"; char pass[] = "12345678"; int status = WL_IDLE_STATUS; WiFiEspServer server(80); File FileSDCard; void setup() { Serial.begin(115200); Serial.println("Mengirim file di SDCard ke PC melalui ESP8266 dengan Arduino"); Serial.println("https://www.project.semesin.com"); Serial1.begin(115200); WiFi.init(&Serial1); if (!SD.begin(53)) { Serial.println("Gagal memulai kartu memori!"); while (true); } if (WiFi.status() == WL_NO_SHIELD) { Serial.println("Modul ESP8266 tidak ditemukan"); while (true); } while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID: "); Serial.println(ssid); status = WiFi.begin(ssid, pass); } Serial.println("You're connected to the network"); printWifiStatus(); server.begin(); } void loop() { WiFiEspClient client = server.available(); if (client) { boolean currentLineIsBlank = true; String request = ""; while (client.connected()) { if (client.available()) { char c = client.read(); request += c; if (c == '\n' && currentLineIsBlank) { break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } client.println("HTTP/1.1 200 OK"); client.println("Connection: close"); Serial.println(request); Serial.println(); Serial.println("Mengirim respon"); int startFilename = request.indexOf('/') + 1; int endFilename = request.indexOf("HTTP/1.1") - 1; String fileRquest = request.substring(startFilename, endFilename); Serial.print("Permintaan file : "); Serial.println(fileRquest); if(fileRquest == "") { File root = SD.open("/"); client.println("Content-Type: text/html"); client.println(); client.print("<!DOCTYPE HTML>"); client.print("<html>"); client.print("Daftar file:<br>"); while (true) { File entry = root.openNextFile(); if (! entry) { break; } client.print("<a href=\""); client.print(entry.name()); client.print("\">"); client.print(entry.name()); client.print("</a><br>"); entry.close(); } client.print("</html>\r\n"); } else if (!SD.exists(fileRquest)) { client.println("Content-Type: text/html"); client.println(); client.print("<!DOCTYPE HTML>"); client.print("<html>"); client.print("Maaf file tidak ditemukan"); client.print("</html>"); } else { Serial.print("Mengirim file : "); Serial.println(fileRquest); FileSDCard = SD.open(fileRquest, FILE_READ); client.print("Content-Length:"); client.println((String)FileSDCard.size()); client.println("Content-Type: text/plain"); client.print("Content-Disposition: attachment; filename=\""); client.print(fileRquest); client.println("\""); client.println("Content-Transfer-Encoding: binary"); client.println(); for(uint16_t i=0;i<FileSDCard.size();i++) { client.write(FileSDCard.read()); } FileSDCard.close(); } delay(10); client.stop(); Serial.println("Client disconnected"); } } void printWifiStatus() { IPAddress ip = WiFi.localIP(); Serial.print("SSID: "); Serial.println(WiFi.SSID()); Serial.print("IP Address: "); Serial.println(ip); Serial.println(); Serial.print("To see this page in action, open a browser to http://"); Serial.println(ip); Serial.println(); }
keluaran serial monitor:
library yang digunakan :
WifiEsp.zip
mas saya coba program anda, twtapi file tidak bisa di download. ada pencerahan??
coba sertakan hasil di serial monitornya untuk bisa di analisa
#include “WiFiEsp.h” cara buat masukkin librarry ini gimana ? #include “WiFiEsp.h” di internet ga ada
library yang digunakan bisa didownload pada link di bagian bawah artikel
mas serial1 itu buat wifi?apakah harus ditambah
“SoftwareSerial serial1 (rx,tx) ” ?
kalo arduino mega dia punya 4 serial (panggilan : Serial, Serial1, Serial2, Serial3)
disini saya sengaja menggunakan arduino mega agar lancar berkomunikasi serial dengan esp
dimana esp01 yang ada dipasaran biasanya bawaan baudratenya 115200 atau 9600
kalo menggunakan softwareSerial terkadang kurang stabil pada baudrate 115200
jasi sebisanya gunakan esp8266 baudrate 9600 jika tetap ingin menggunakan softwareSerial (arduino uno)
gan, kalo begini kenapa ya?
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
error timeout … (seharusnya ada kelanjutannya)
umum terjadi apabila modul esp8266 tidak terdeteksi atau tidak bisa berkomunikasi dengan arduino
Gan apakah ada tutorial untuk NodeMCU?
belum ada,
kira2 hampir mirip programnya
Terimakasih tutorial di atas berhasil untuk arduino Mega
tapi ada kendala ketika saya coba di arduino Due.
Awalnya ada beberapa code dari library yg error, setelah saya perbaiki dari sini github.com/bportaluri/WiFiEsp/pull/27, sudah bisa dan list file bisa muncul
tetapi ketika file nya saya download, tidak bisa. barangkali ada solusi
kemungkinan menggunakan library SD yang ada bug-nya
Coba update library SD-nya, atau sekalian saja coba update arduino IDE-nya ke versi terbaru