Parsing data biasanya dibutuhkan saat kita mau memproses sebuah kiriman data (payload) yang bentuknya panjang dalam sekali waktu pengiriman dalam sebuah event komunikasi data. Data ini biasanya dikirim melalui port serial (protokol UART, RS422, RS485), ethernet/WIFI (protokol TCP/IP) atau mungkin dalam komunikasi IoT (REST, XMPP, MQTT, dll). Pada umumnya data ini berupa teks dengan tipe data berupa char array atau String. Data ini bersifat ‘Stream’, jadi akan diterima satu persatu dalam satu paket pengiriman dalam kurun waktu yang sangat cepat. Jadi Anda harus menerima dulu semua data baru dapat diproses atau di-parsing.
Pada artikel ini saya menganggap data sudah berbentuk String ya, supaya lebih mudah dioperasikan. Cuma ketika menggunakan Arduino, perhatikan SRAM Anda ya, jangan sampai lebih dari 80% saat di-compile (perhatikan warning message di jendela debug bagian bawah Arduino IDE). Sebagai perbandingan, SRAM Arduino Uno adalah 2 Kilo Byte (2KB), Mega 8 KB, ESP8266 ESP12E (core NodeMCU ) = 36KB. Jadi kalau Anda menggunakan ESP12/NodeMCU cukup aman bermain-main dengan tipe data String.
Catatan: SRAM atau Static Random Access Memory adalah tempat menyimpan data yang bersifat volatile (hilang ketika sumber daya / tegangan) dimatikan, yang digunakan untuk menyimpan dan memproses data sementara, termasuk diantaranya adalah variabel
Script Parsing Data Arduino / ESP8266
Untuk memparsing data teks (khususnya yang bertipe String) sangat mudah, bisa Anda gunakan penggalan script di bawah (sumber: Stackoverflow – maaf saya lupa link-nya 🙂 )
void setup() { // put your setup code here, to run once: Serial.begin(115200); String stringku = "ok 123 456 789 abc"; Serial.print("data string: ");Serial.println(stringku); String substringku0 = getValue(stringku, ' ', 0); Serial.print("substring[0]: ");Serial.println(substringku0); String substringku3 = getValue(stringku, ' ', 3); Serial.print("substring[3]: ");Serial.println(substringku3); } void loop() { // put your main code here, to run repeatedly: } String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = {0, -1}; int maxIndex = data.length()-1; for(int i=0; i<=maxIndex && found<=index; i++){ if(data.charAt(i)==separator || i==maxIndex){ found++; strIndex[0] = strIndex[1]+1; strIndex[1] = (i == maxIndex) ? i+1 : i; } } return found>index ? data.substring(strIndex[0], strIndex[1]) : ""; }
Jika Anda running script di atas, hasilnya dapat Anda lihat di Serial Monitor (menu Tools – Serial Monitor), sebagai berikut:
Yang perlu Anda perhatikan adalah bagaimana cara memparsing data teks yang ditunjukkan pada baris kode 7 (menghasilkan substring indeks data 0) dan baris 9 ( menghasilkan substring indeks data 3), dengan pemisah data (separator) berupa karakter spasi (” “). Anda juga dapat mengubahnya sesuai dengan kebutuhan.
Demikian sedikiti tutorial bagaimana cara memparsing data teks di arduino maupun NodeMCU/ESP8266. Semoga bermanfaat untuk Anda
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Mantav Ini ,, saya lgi nyari nyari ini , seo nya ditingkatkan biar kalo org nyari gampang nemu
pak, saya mau bertanya. diprogram itu ada error katanya amp is not declarated, do you mean map?. nah, apakah harus saya tambah untuk deklarasi amp atau diubah jadi map pak? kalau itu deklarasi amp, tipenya apa pak? apakah int, string, atau lainnya? terimakasih
karakter && ganti menjadi &&
karena filter dari website author jadi karakter itu beruabh