# Akses HW-VX6330K dengan NodeMCU (TCP/IP)

HW-VX6330K dapat diakses oleh berbagai perangkat, pada artikel kali ini kita akan bahas bagaimana perangkat UHF ini dapat diakses dengan menggunakan NodeMCU.

# 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 instal 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 (opens new window)

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

Last Updated: 2022-09-08