Cách dùng Heltec WiFi LoRa 32 với OLED

Heltec WiFi LoRa 32 là một mạch lập trình hỗ trợ tốt cho các dự án LoRa. Trong bài này, IoTZone sẽ giới thiệu cách dùng Heltec WiFi LoRa 32 đến bạn, cụ thể là gửi và nhận packet qua sóng LoRa.

Cách dùng Heltec WiFi LoRa 32 với OLED
Cách dùng Heltec WiFi LoRa 32 với OLED

Giới thiệu về Heltec WiFi LoRa 32

Các mạch Heltec WiFi LoRa đã có sẵn khá nhiều trên cửa hàng Heltec WiFi LoRa của IoTZone.

Giống như các loại mạch khác, việc cài đặt và sử dụng chúng khá dễ dàng. Bạn có thể theo dõi hướng dẫn cách thiết lập mạch Heltec WiFi LoRa tại bài viết sau: Làm việc với Heltec WiFi 32 – ESP32 tích hợp OLED hiển thị thông tin

Khi lần đầu dùng thử và muốn kiểm tra xem bộ phận LoRa có hoạt động đúng hay không, bạn cần dùng đến một thiết bị khác để truyền hoặc nhận tín hiệu LoRa. Với ví dụ bên dưới, IoTZone sử dụng AI-Thinker-02 với Arduino UNO để gửi.

Trong Arduino UNO đã có sẵn bản thư viện cài đặt cho dòng Heltec này, bạn chỉ cần tìm kiếm tên của nó và cài đặt để sử dụng Heltec WiFi LoRa:

Cách dùng Heltec WiFi LoRa với thư viện trong Arduino IDE
Cách dùng Heltec WiFi LoRa với thư viện trong Arduino IDE

Để sử dụng Heltec WiFi LoRa với thư viện trên, bạn cần xác định một số chân sau:

#define SS 18
#define RST 14
#define DI0 26

Trong các đoạn code setup() cũng cần một số dòng lệnh sau:

SPI.begin(5, 19, 27, 18);
LoRa.setPins(SS, RST, DI0);

Bạn cũng cần thay đổi tốc độ truyền (Serial.begin(115200);) và tần số LoRa (LoRa.begin(433E6))

Bạn cần cách dùng Heltec WiFi LoRa đơn giản hơn? Bạn có thể dùng đoạn code mẫu bên dưới:

#include <SPI.h>
#include <LoRa.h>

// WIFI_LoRa_32 ports
// GPIO5  -- SX1278's SCK
// GPIO19 -- SX1278's MISO
// GPIO27 -- SX1278's MOSI
// GPIO18 -- SX1278's CS
// GPIO14 -- SX1278's RESET
// GPIO26 -- SX1278's IRQ(Interrupt Request)

#define SS      18
#define RST     14
#define DI0     26

void setup() {
  
  SPI.begin(5, 19, 27, 18);
  LoRa.setPins(SS, RST, DI0);
  
  Serial.begin(115200);
  while (!Serial);

  Serial.println("LoRa Receiver");

  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // received a packet
    Serial.print("Received packet '");

    // read packet
    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }

    // print RSSI of packet
    Serial.print("' with RSSI ");
    Serial.println(LoRa.packetRssi());
  }
}

Tùy thuộc vào những thông tin nào đang được gửi, bạn sẽ thấy các thông tin trên màn hình Serial Monitor tương tự như thế này:

Received packet ’79’ with RSSI -68
Received packet ’80’ with RSSI -68
Received packet ’81’ with RSSI -58
Received packet ’82’ with RSSI -58
Received packet ’83’ with RSSI -68
Received packet ’84’ with RSSI -68
Received packet ’85’ with RSSI -68
Received packet ’86’ with RSSI -68

Hiển thị thông tin trên màn hình OLED tích hợp

Dưới đây, IoTZone đã chuẩn bị sẵn đoạn code để hiển thị thông tin trên màn hình OLED tích hợp trên Heltec WiFi LoRa và trên cả màn hình Serial Monitor.

Lưu ý: Bạn nhớ cài đặt thư viện U8g2 (qua trình quản lý thư viện của Arduino hoặc qua link github này) trước khi upload code sau vào mạch nhé!

#include <U8x8lib.h>
#include <LoRa.h>

String receivedText;
String receivedRssi;

// WIFI_LoRa_32 ports
// GPIO5  -- SX1278's SCK
// GPIO19 -- SX1278's MISO
// GPIO27 -- SX1278's MOSI
// GPIO18 -- SX1278's CS
// GPIO14 -- SX1278's RESET
// GPIO26 -- SX1278's IRQ(Interrupt Request)

#define SS      18
#define RST     14
#define DI0     26
#define BAND    433E6

// the OLED used
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);

void setup() {

  SPI.begin(5, 19, 27, 18);
  LoRa.setPins(SS, RST, DI0);

  Serial.begin(115200);
  while (!Serial); //if just the the basic function, must connect to a computer
  delay(1000);

  u8x8.begin();
  u8x8.setFont(u8x8_font_chroma48medium8_r);

  Serial.println("LoRa Receiver");
  u8x8.drawString(0, 1, "LoRa Receiver");

  if (!LoRa.begin(BAND)) {
    Serial.println("Starting LoRa failed!");
    u8x8.drawString(0, 1, "Starting LoRa failed!");
    while (1);
  }
}

void loop() {

  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // received a packet
    Serial.print("Received packet '");
    u8x8.drawString(0, 4, "PacketID");

    // read packet
    while (LoRa.available()) {
      receivedText = (char)LoRa.read();
      Serial.print(receivedText);
      char currentid[64];
      receivedText.toCharArray(currentid, 64);
      u8x8.drawString(9, 4, currentid);
    }

    // print RSSI of packet
    Serial.print("' with RSSI ");
    Serial.println(LoRa.packetRssi());
    u8x8.drawString(0, 5, "PacketRS");
    receivedRssi = LoRa.packetRssi();
    char currentrs[64];
    receivedRssi.toCharArray(currentrs, 64);
    u8x8.drawString(9, 5, currentrs);
  }

}

Đây là đoạn code cơ bản để minh họa cách dùng Heltec WiFi LoRa. Nếu bạn là người mới tìm hiểu, bạn cần phải thực hành nhiều hơn nữa để sử dụng mạch này đúng cách.

Trên Website IoTZone đã có sẵn khá nhiều bài viết hướng dẫn khác (kèm giải thích code chi tiết) về chủ đề lập trình ESP32, bạn có thể thực hành theo nếu thấy hứng thú:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *