Heltec WiFi LoRa V.3 Arduino IDE ทดสอบกับ TTN ใช้ Lib Heltec
ให้ใช้ ArduinoIDE Version อย่างต่ำคือ 2.3.4
และใน Preference ใส่
https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/releases/download/0.0.9/package_heltec_esp32_index.json
ให้เลือก Board Heltec V.3 ก่อนจึงจะเห็น Heltec-Example สำหรับ V.3 เพิ่มขึ้น
ถ้าหา Heltec-Example ไม่เจอ ให้เลือก Board ใหม่ใต้ ESP32 แทน
Library สำหรับ LoRaWAN นั้นให้ Download จาก Github https://github.com/HelTecAutomation/Heltec_ESP32
- ใช้งานกับ The Things Network
เปิด LoRaWAN_OLD จาก Example.
/* Heltec Automation LoRaWAN communication example
*
* Function:
* 1. Upload node data to the server using the standard LoRaWAN protocol.
* 2. The network access status of LoRaWAN is displayed on the screen.
*
* Description:
* 1. Communicate using LoRaWAN protocol.
*
* HelTec AutoMation, Chengdu, China
* 成都惠利特自动化科技有限公司
* www.heltec.org
*
* this project also realess in GitHub:
* https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series
* */
#include "LoRaWan_APP.h"
//AT+CDKEY=C42BE5106951CF976CC56C4160D6BD6D
//uint32_t license[4] = { 0xC42BE510,0x6951CF97,0x6CC56C41,0x60D6BD6D };
/* OTAA para*/
//devEui MSB APPKEY MSB
uint8_t devEui[] = {0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x06, 0x83, 0xD9 };
uint8_t appEui[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t appKey[] = { 0x78, 0x16, 0x4A, 0x64, 0x58, 0xCF, 0x12, 0x5E, 0xFC, 0xD4, 0xBE, 0x75, 0xEB, 0x6E, 0x00, 0x12};
/* ABP para*/
uint8_t nwkSKey[] = { 0x15, 0xb1, 0xd0, 0xef, 0xa4, 0x63, 0xdf, 0xbe, 0x3d, 0x11, 0x18, 0x1e, 0x1e, 0xc7, 0xda,0x85 };
uint8_t appSKey[] = { 0xd7, 0x2c, 0x78, 0x75, 0x8c, 0xdc, 0xca, 0xbf, 0x55, 0xee, 0x4a, 0x77, 0x8d, 0x16, 0xef,0x67 };
uint32_t devAddr = ( uint32_t )0x007e6ae1;
/*LoraWan channelsmask*/
uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };
/*LoraWan region, select in arduino IDE tools*/
LoRaMacRegion_t loraWanRegion = ACTIVE_REGION;
/*LoraWan Class, Class A and Class C are supported*/
DeviceClass_t loraWanClass = CLASS_A;
/*the application data transmission duty cycle. value in [ms].*/
uint32_t appTxDutyCycle = 15000;
/*OTAA or ABP*/
bool overTheAirActivation = true;
/*ADR enable*/
bool loraWanAdr = true;
/* Indicates if the node is sending confirmed or unconfirmed messages */
bool isTxConfirmed = true;
/* Application port */
uint8_t appPort = 2;
/*!
* Number of trials to transmit the frame, if the LoRaMAC layer did not
* receive an acknowledgment. The MAC performs a datarate adaptation,
* according to the LoRaWAN Specification V1.0.2, chapter 18.4, according
* to the following table:
*
* Transmission nb | Data Rate
* ----------------|-----------
* 1 (first) | DR
* 2 | DR
* 3 | max(DR-1,0)
* 4 | max(DR-1,0)
* 5 | max(DR-2,0)
* 6 | max(DR-2,0)
* 7 | max(DR-3,0)
* 8 | max(DR-3,0)
*
* Note, that if NbTrials is set to 1 or 2, the MAC will not decrease
* the datarate, in case the LoRaMAC layer did not receive an acknowledgment
*/
uint8_t confirmedNbTrials = 4;
/* Prepares the payload of the frame */
static void prepareTxFrame( uint8_t port )
{
/*appData size is LORAWAN_APP_DATA_MAX_SIZE which is defined in "commissioning.h".
*appDataSize max value is LORAWAN_APP_DATA_MAX_SIZE.
*if enabled AT, don't modify LORAWAN_APP_DATA_MAX_SIZE, it may cause system hanging or failure.
*if disabled AT, LORAWAN_APP_DATA_MAX_SIZE can be modified, the max value is reference to lorawan region and SF.
*for example, if use REGION_CN470,
*the max value for different DR can be found in MaxPayloadOfDatarateCN470 refer to DataratesCN470 and BandwidthsCN470 in "RegionCN470.h".
*/
appDataSize = 4;
appData[0] = 0x00;
appData[1] = 0x01;
appData[2] = 0x02;
appData[3] = 0x03;
}
RTC_DATA_ATTR bool firstrun = true;
void setup() {
Serial.begin(115200);
Mcu.begin(HELTEC_BOARD,SLOW_CLK_TPYE);
if(firstrun)
{
LoRaWAN.displayMcuInit();
firstrun = false;
}
}
void loop()
{
switch( deviceState )
{
case DEVICE_STATE_INIT:
{
#if(LORAWAN_DEVEUI_AUTO)
LoRaWAN.generateDeveuiByChipID();
#endif
LoRaWAN.init(loraWanClass,loraWanRegion);
//both set join DR and DR when ADR off
LoRaWAN.setDefaultDR(3);
break;
}
case DEVICE_STATE_JOIN:
{
LoRaWAN.displayJoining();
LoRaWAN.join();
break;
}
case DEVICE_STATE_SEND:
{
LoRaWAN.displaySending();
prepareTxFrame( appPort );
LoRaWAN.send();
deviceState = DEVICE_STATE_CYCLE;
break;
}
case DEVICE_STATE_CYCLE:
{
// Schedule next packet transmission
txDutyCycleTime = appTxDutyCycle + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND );
LoRaWAN.cycle(txDutyCycleTime);
deviceState = DEVICE_STATE_SLEEP;
break;
}
case DEVICE_STATE_SLEEP:
{
LoRaWAN.displayAck();
LoRaWAN.sleep(loraWanClass);
break;
}
default:
{
deviceState = DEVICE_STATE_INIT;
break;
}
}
}
นำ Key ไปป้อนเวป heltec เพื่อรับ License และป้อนที่บรรทัดตัวแปร License
#include “LoRaWan_APP.h”
uint32_t license[4]={0x8800275A,0x68C47D5D,0xE35C2E23,0x3084D1A4};
/* OTAA para*/
uint8_t devEui[] = { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x06, 0x2C, 0x96};
uint8_t appEui[] = { 0xAA, 0xBB, 0xAA, 0xBB, 0xAA, 0xBB, 0xAA, 0xBB};
uint8_t appKey[] = { 0xD7, 0x21, 0x87, 0x20, 0xA1, 0x52, 0x3E, 0x7D, 0x05, 0x94, 0x10, 0x20, 0x04, 0xD6, 0x92, 0x3B };
แก้ค่าตัวแปร devEUI, appEUI, appKey ให้ตรงหน้าเวป TTN
msb ทั้งสามค่า
แก้ค่า ตัวแปรใต้เมนู Tool
ให้เลือก LORAWAN_DEVEUI เป็น Custom******** สำคัญมาก
LORAWAN Debug Level เป็น Freq & DIO และค่าอื่นๆ ตามภาพ
ปัญหาการป้อน License Key.
ให้ศึกษาจากหน้าเวป https://docs.heltec.org/general/how_to_use_license.html โดยละเอียด
หาก run แล้วเจอข้อความ เช่น
ในหน้า Serial Monitor ให้นำ ChipID ไปป้อนเพื่อให้ได้ License มา โดยป้อนที่เวป http://www.heltec.cn/search/
สำหรับบาง Code สามารถเพิ่มบรรทัด
uint32_t license[4] = { 0xC42BE510,0x6951CF97,0x6CC56C41,0x60D6BD6D };
เข้าไปใน Code แล้ว Upload Firmware ใหม่
หากไม่ได้ให้แปลงเป็น AT+CDKEY=C42BE5106951CF976CC56C4160D6BD6D โดยเอา 0x และ , ออก แล้วนำไปป้อนที่ช่องคำสั่งบรรทัดบนสุดใต้ Serial Monitor ตามรูปแล้วกด Enter
หากปรกติจะเห็นข้อความ The board is actived
แนะนำให้กดปุ่ม RST เพื่อให้บอร์ดเริ่มทำงาน
+ADR=1
+IsTxConfirmed=1
+AppPort=2
+DutyCycle=15000
+ConfirmedNbTrials=4
+ChMask=0000000000000000000000FF
+DevEui=70B3D57ED00683D9(For OTAA Mode)
+AppEui=0000000000000000(For OTAA Mode)
+AppKey=78164A6458CF125EFCD4BE75EB6E0012(For OTAA Mode)
+NwkSKey=15B1D0EFA463DFBE3D11181E1EC7DA85(For ABP Mode)
+AppSKey=D72C78758CDCCABF55EE4A778D16EF67(For ABP Mode)
+DevAddr=007E6AE1(For ABP Mode)
joining...
joined
confirmed uplink sending ...
confirmed uplink sending ...
หาก Join ได้และส่งข้อมูลได้ปรกติจะเห็นมีการส่ง Uplink Data แบบ Confirmed
บนจอ OLED จะเห็นข้อความ SENDING….
และถ้า Heltec ได้รับ Ack ตอบกลับจาก TTN ก็จะแสดงข้อความตัวอย่างตามรูป แสดงความเข้ม rssi และ snr และรอเข้าสู่ Deep Sleep Mode
ตั้ง Parameters เช่น Debug Level
เลือก Freq & DIO &PW
จะเห็นข้อมูลตรง Serial Monitor มากขึ้น เช่น ความถี่ และ DR ที่ส่ง
Option อื่นๆ ศึกษาได้จาก คลิก
2.สามารถทดสอบโปรแกรม Blink ได้โดยการใช้ PIN 35
#include <Arduino.h>
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(35, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(35, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(35, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
หาก Upload Code ดังต่อไปนี้ ไฟสีขาวจะกระพริบ