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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | #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" ); 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.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