Artikel ini berlaku untuk HW-VX63 Series reader yang memiliki fitur TCP/IP:

untuk diakses menggunakan NodeMCU.

Video

Persiapan

Sebelum masuk ke bagian code, siapkan dulu beberapa hal berikut:

  • Socket (Biasanya sudah ada default tidak perlu download lagi).
  • Arduino IDE.
  • NodeMCU.
  • 2 jumper male female.

Arduino IDE dapat di install di link berikut.

NodeMCU dapat dibeli di.

1. Membentuk Jaringan Lokal antara HW-VX6330K dan Node-MCU

Untuk melakukan setting IP address dan port bisa dilihat di link berikut. https://youtu.be/32xh2B8tmEk

Pada artikel ini jaringan yang terhubung antara router, HW-VX6330K dan NodeMCU adalah sebagai berikut.

Setting Jaringan

Untuk Meilhat pengaturan DNS pada komputer dapat membuka cmd.exe, lalu ketik ‘ipconfig -all’ lalu cek pada bagian Wireless LAN adapter Wi-Fi (pastikan sudah terhubung ke router yang terhubung dengan HW-VX6330K).

dns Router

Selanjutnya bisa memulai program dari NodeMCU.

2. Kode dan Penjelasan

Untuk melakukan pemrograman menggunakan Arduino IDE, pastikan sudah melakukan persiapan seperti download board melalui Arduino IDE.

Pada program yang dibuat NodeMCU akan menghubungkan koneksi ke host (HW-VX6330K) dengan port 6000 dan mengirimkan perintah yang sudah diatur jika sudah terhubung.

Bagian awal dari program yang adalah menghubungkan NodeMCU dengan router dan melakukan setting jaringan pada NodeMCU.

const char* ssid = "PROLiNK_PRC3801_FEE4";
const char* password = "prolink12345";
//Static IP address configuration
IPAddress staticIP(192, 168, 123, 50);
IPAddress gateway(192, 168, 123, 254);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 1);
 
const char *deviceName = "client";
 
const uint16_t port = 6000;
const char* host = "192.168.123.192";

Selanjutnya adalah mengolah data dengan mengirimkan perintah inventory serta crc dari program, pada langkah dibawah ini dibuat 2 buah array, yang pertama pada variable data berisi perintah untuk melakukan scan pada HW-VX6330K dan yang kedua adalah hasil crc yang didapat dari prosedur uiCrc16Cal lalu data akan digabungkan ke array dataSend.

uint8_t data[5]= {0x06,0xff,0x01,0x00,0x06};
int crcSize = 2;
int dataSize = sizeof(data)/sizeof(data[0]);
int crc = uiCrc16Cal(data,dataSize);
int crc_H = (crc >> 8)& 0xFF;
int crc_L = crc & 0xFF;
uint8_t crcData[2] ={crc_L,crc_H};
uint8_t dataSend [dataSize + crcSize];
 
//prosedur uiCrc16Cal
 
#define PRESET_VALUE 0xFFFF
#define POLYNOMIAL 0x8408
 
unsigned int uiCrc16Cal(unsigned char const * pucY, unsigned char ucX)
{
  unsigned char ucI,ucJ;
  unsigned short int uiCrcValue = PRESET_VALUE;
  for(ucI = 0; ucI < ucX; ucI++)
    {
    uiCrcValue = uiCrcValue ^ *(pucY + ucI);
    for(ucJ = 0; ucJ < 8; ucJ++)
      {
        if(uiCrcValue & 0x0001)
        {
          uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL;
        }
        else
        {
          uiCrcValue = (uiCrcValue >> 1);
        }
      }
  }
  return uiCrcValue;
}
 

Jika proses data sudah siap, maka yang perlu dipahami adalah bagaimana koneksi dengan router bisa terhubung serta bagaimana cara terhubung dengan host HW-VX6330K, berikut adalah bagian menghubungkan dengan router.

  WiFi.hostname(deviceName);
  WiFi.config(staticIP, dns , gateway, subnet);//Apply pengaturan jaringan pada NodeMCU
  WiFi.begin ( ssid, password );//Menghubungkan dengan router
  Serial.println ( "" );
 
  // Program bisa berjalan jika sudah terhubung dengan router
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }
 

Setelah NodeMCU sudah terhubung dengan router hubungkan dengan host dengan cara berikut.

WiFiClient client;
if(!client.connect(host,port)){
    Serial.println("Host tidak tersambung....");
    delay(1000);
    return;
}
Serial.println("Host Terhubung");

Jika kode digabungkan dengan tambahan 2 buah button untuk membantu proses akan menjadi seperti berikut.

#include "ESP8266WiFi.h"
 
#define PRESET_VALUE 0xFFFF
#define POLYNOMIAL 0x8408
 
const char* ssid = "PROLiNK_PRC3801_FEE4";
const char* password = "prolink12345";
//Static IP address configuration
IPAddress staticIP(192, 168, 123, 50);
IPAddress gateway(192, 168, 123, 254);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 1);
 
const char *deviceName = "client";
 
const uint16_t port = 6000;
const char* host = "192.168.123.192";
 
//declare vars for send
uint8_t data[5]= {0x06,0xff,0x01,0x00,0x06};
 
void setup()
{
  pinMode(D5,INPUT_PULLUP);
  pinMode(D6,INPUT_PULLUP);
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  delay(1000);
  WiFi.hostname(deviceName);
  WiFi.config(staticIP, dns , gateway, subnet);
  WiFi.begin ( ssid, password );
  Serial.println ( "" );
 
  // Wait for connection
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }
 
  Serial.println ( "" );
  Serial.print ( "Connected to " );
  Serial.println ( ssid );
  Serial.print ( "IP address: " );
  Serial.println ( WiFi.localIP() );
 
}
 
void loop()
{
  WiFiClient client;
 
  if(!digitalRead(D5)){
    int crcSize = 2;
    int dataSize = sizeof(data)/sizeof(data[0]);
    int crc = uiCrc16Cal(data,dataSize);
    int crc_H = (crc >> 8)& 0xFF;
    int crc_L = crc & 0xFF;
    uint8_t crcData[2] ={crc_L,crc_H};
    uint8_t dataSend [dataSize + crcSize];
 
    for(int i=0;i<dataSize;i++){
      dataSend[i] = data[i];
    }
    for(int i=0;i<crcSize;i++){
      dataSend[dataSize+i] = crcData[i];
    }
 
    if(!client.connect(host,port)){
      Serial.println("Host tidak tersambung....");
      delay(1000);
      return;
    }
    Serial.println("Host Terhubung");
 
    while (client.connected() || client.available())
    {
      if(!digitalRead(D5)){
        client.write(dataSend,dataSize + crcSize);
        delay(500);
      }
      while (client.available())
      {
        uint8_t line = client.read();
        Serial.println(line,HEX);
      }
      if(!digitalRead(D6)){
        Serial.println("Disconnecting...");
        client.stop();
        delay(1000);
      }
    }
 
    delay(1000);
  }
 
}
 
 
unsigned int uiCrc16Cal(unsigned char const * pucY, unsigned char ucX)
{
  unsigned char ucI,ucJ;
  unsigned short int uiCrcValue = PRESET_VALUE;
  for(ucI = 0; ucI < ucX; ucI++)
    {
    uiCrcValue = uiCrcValue ^ *(pucY + ucI);
    for(ucJ = 0; ucJ < 8; ucJ++)
      {
        if(uiCrcValue & 0x0001)
        {
          uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL;
        }
        else
        {
          uiCrcValue = (uiCrcValue >> 1);
        }
      }
  }
  return uiCrcValue;
}

Cara kerja

  • Jika ingin terhubung dengan Host maka hubungkan pin D5 menggunakan kabel male female dengan GND dari NodeMCU
  • Jika ingin memutuskan koneksi cukup hubungkan pin D6 menggunakan kabel male female dengan GND dari NodeMCU

Ini adalah output dari program diatas.

DNS Router