# 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.
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).
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.