CAT LoRa Starter Kit ตอนที่ 8 เปิด-ปิดหลอด LED ผ่านเครือข่าย LoRa by CAT

ความต้องการของระบบ

อุปกรณ์

  1. CAT LoRa Starter Kit
  2. DS3231 Module
  3. Red LED
  4. Green LED
  5. 330 ohm resistor

การต่อวงจร

Library ที่จำเป็น

  1. SmartEverything HTS221 : https://github.com/ameltech/sme-hts221-library
    (เนื่องจากมีการใช้ CatLoRaS76S จากตอนที่ 4 )
  2. DS3231 Real-Time Clock : https://github.com/jarzebski/Arduino-DS3231

ออกแบบ Payload Format

  • เริ่มต้น (7 บิต)→ 2020–01–24 12:10:59 → 20200124121059
  • สิ้นสุด (7 บิต)​2020–01–24 14:30:00 20200124143000
  • จากนั้นนำวันและเวลาทั้งสองมาต่อกันจะได้ Payload คือ 2020012412105920200124143000

เขียนโปรแกรม

ทดลองส่งข้อมูล Downlink จาก LoRa by CAT

  • เริ่มเปิดเวลา 2020–01–23 09:10:59 ถึง 2020–01–23 14:30:00
  • Payload คือ 2020012309105920200123143000

อธิบายการทำงาน

  • CatLoRaS76S.h ที่ใช้สำหรับการเชื่อมต่อกับเครือข่าย LoRa by CAT
  • LedModule.h ที่ใช้ในการควบคุมหลอดไฟ LED
// Initialize LED  
redLed.begin();
greenLed.begin();
redLed.on();
// Initialize DS3231  
Serial.println("Initialize DS3231");
clock.begin();
if (clock.isReady() && Serial) {
clock.setDateTime(__DATE__, __TIME__);
}
// Initialize LoRa  
Serial.println("-> Lora Setting...");
lora.begin(115200);

Serial.println("-> Lora ABP Join...");
lora.joinABP(String(LORA_ABP_CLASS),
String(LORA_DEV_EUI),
String(LORA_DEV_ADDR),
String(LORA_NWKS_KEY),
String(LORA_APPS_KEY));
// Convert datetime setup led to unixtime  
startLedUnixtime = DateTimeLib::unixtime(startLedTime);
stopLedUnixtime = DateTimeLib::unixtime(stopLedTime);
   redLed.off();  
Serial.println("-> Ready Go.");
void loop() {  
dt = clock.getDateTime();

if (dt.second != seconds) {
seconds = dt.second;
// ----- Show current datetime on terminal
String datetime = String(clock.dateFormat("Y-m-d H:i:s", dt));
Serial.println(datetime);

// Main Code Area
}
}
// ----- Convert current datetime to unixtime -----
uint32_t utNow = DateTimeLib::unixtime(
dt.year,
dt.month,
dt.day,
dt.hour,
dt.minute,
dt.second);
// ----- Check datetime for action -----
if (utNow >= startLedUnixtime && utNow <= stopLedUnixtime) {
greenLed.on();
} else {
greenLed.off();
}
// ----- LoRa TX -----
if (seconds % intervalLoraTX == 0) {
loraTransmit();
}
// ----- LoRa RX -----
if (seconds % intervalLoraRX == 0) {
loraReceive();
}

ดาวน์โหลดไฟล์ตัวอย่าง

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store