ESP8266 adalah modul Wi-Fi dengan fitur TCP/IP yang lengkap dan bisa dihubungkan dengan mikrokontroler melalui protokon AT-Command. TCP/IP (Transmission Control Protocol / Internet Protocol) adalah protokol komunikasi antara dua perangkat yang terhubung dengan sebuah metode paket termasuk metode pengalamatan dan metode transmisi dalam jaringan internet.
Dalam komunikasi TCP/IP dikenal beberapa metode request/permintaan yaitu : HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH.
Metode POST sering digunakan untuk mengirimkan data-data ter-enkripsi dan langsung ke server sehingga lebih menjamin kerahasiaan data. berbeda dengan metode GET yang mengirimkan requeat dalam bentuk URL.
Skematik ESP8266/ESP01 (+Arduino Uno) request metode post:
Sketch/koding pemrograman komunikasi ESP01 + arduino dengan server menggunakan metode POST :
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 | char ssid[] = "xxxx" ; // your network SSID (name) char pass[] = "xxxxxxxx" ; // your network password char server[] = "api.thingspeak.com" ; byte port = 80; char APIKey[] = "XXXXXXXXXXXXXX" ; uint32_t periodeKirim = 20000; #include <WiFiEsp.h> #include <SoftwareSerial.h> SoftwareSerial SerialEsp(10, 11); WiFiEspClient client; int status = WL_IDLE_STATUS; // the Wifi radio's status uint32_t millisKirim; bool statusKirim; void setup() { Serial.begin(9600); Serial.println( "Mengirim data melalui jaringan Wifi menggunakan ESP01 dengan metode POST" ); Serial.println(); SerialEsp.begin(115200); SerialEsp.println( "AT+UART_DEF=9600,8,1,0,0" ); delay(500); SerialEsp.begin(9600); WiFi.init(&SerialEsp); if (WiFi.status() == WL_NO_SHIELD) { Serial.println( "WiFi shield not present" ); } millisKirim = millis(); } void loop() { if (millisKirim < millis()) { millisKirim = millis() + periodeKirim; // hubungkan ke jaringan wifi jika belum tersambung atau terputus (auto reconnect) if (WiFi.status() != WL_CONNECTED) { Serial.print( "Menghubungkan ke jaringan SSID: " ); Serial.println(ssid); while (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, pass); Serial.print( "." ); delay(5000); } printWifiStatus(); Serial.println( "Berhasil terhubung ke jaringan" ); } if (WiFi.status() == WL_CONNECTED) { Serial.println(); Serial.println( "Menghubungkan dengan server..." ); if (client.connect(server, port)) { Serial.println(); Serial.println( "Terhubung dengan server." ); char content[30]; sprintf (content, "field1=%d" , millis() % 100); client.println( "POST /update HTTP/1.1" ); client.println( "Host: api.thingspeak.com" ); client.println( "User-Agent: tslib-arduino/1.5.0" ); client.print( "X-THINGSPEAKAPIKEY: " ); client.println(APIKey); client.println( "Content-Type: application/x-www-form-urlencoded" ); client.print( "Content-Length: " ); client.println( strlen (content)); client.println( "Connection: close" ); client.println(); client.print(content); statusKirim = true ; } } } if (statusKirim) { while (client.available()) { char c = client.read(); Serial.write(c); } if (!client.connected()) { Serial.println(); Serial.println( "Memutuskan hubungan dengan server..." ); delay(10); client.stop(); statusKirim = false ; } } } void printWifiStatus() { // print the SSID of the network you're attached to Serial.print( "SSID: " ); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address IPAddress ip = WiFi.localIP(); Serial.print( "IP Address: " ); Serial.println(ip); // print the received signal strength long rssi = WiFi.RSSI(); Serial.print( "Signal strength (RSSI):" ); Serial.print(rssi); Serial.println( " dBm" ); } |
Library :