Hi @KhaiNguyen
Step by step, little by little
Just one question: on the Heltec Lora module, are you using the default LoRa sender ? ... if "yes", the global behavior is the one expected. The Heltec send Lora frame, not LoRaWan.
TTN expects LoRaWan frames, with all the needed settings (e.g.: APP EUI, DEV EUI, ... )
So, now, let the gateway "as is"
(on the RPI, if you look at syslog :
sudo tail -f /var/log/syslog
you should see log like this one:

pi@ttn-gateway:/opt/ttn-gateway $ sudo tail -f /var/log/syslog Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: INFO: [down] for server router.eu.thethings.network PULL_ACK received in 66 ms Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: ##### 2018-01-12 09:39:12 GMT ##### Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: ### [UPSTREAM] ### Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: # RF packets received by concentrator: 0 Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00% Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: # RF packets forwarded: 0 (0 bytes) Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: # PUSH_DATA datagrams sent: 2 (476 bytes) Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: # PUSH_DATA acknowledged: 50.00% Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: ### [DOWNSTREAM] ### Jan 12 09:39:12 ttn-gateway ttn-gateway[340]: # PULL_DATA sent: 6 (50.00% acknowledged)

... and focus on the Heltec Lora module:
Use the IBM LMIC framework lib (see here: https://www.thethingsnetwork.org/forum/t/arduino-lmic-library-updated/1295/17

Don't forget to change the Arduino code with the correct pin mapping:

const lmic_pinmap lmic_pins = { .nss = 18, .rxtx = LMIC_UNUSED_PIN, .rst = 14, .dio = {26, 26, LMIC_UNUSED_PIN}, };

and, of course, update the
the NwkSKey and AppSKey as DEVADDR !

Olivier