Sơ đồ và code Arduino phát / thu XL4432

22/05/2026
so-do-va-code-arduino-phat-thu-xl4432

XL4432 14 chân phổ biến thì chân như sau: 12 chân 2 bên và 2 chân bên kia vỉ

1   GND
2   GPIO0
3   GPIO1
4   GPIO2
5   VCC (3.3V)
6   SDO   (MISO)
7   SDI   (MOSI)
8   SCLK
9   NSEL  (CS/SS)
10  NIRQ  (INT)
11  SDN   (Shutdown)
12  GND
13  ANT
14  GND

Để thử nhanh với 2 module XL4432 (Si4432) + 2 Arduino Uno, bạn đấu nối như sau. XL4432 giao tiếp SPI, dùng nguồn 3.3V và cần chú ý mức logic.

Sơ đồ đấu nối

Arduino phát (TX)

XL4432          Arduino Uno
--------------------------------
VCC     ------> 3.3V
GND     ------> GND
SDN     ------> GND
NSEL    ------> D10
SCLK    ------> D13
SDI     ------> D11 (MOSI)
SDO     ------> D12 (MISO)
NIRQ    ------> D2
ANT     ------> Anten 433MHz

Arduino thu (RX)

Đấu giống hệt module phát.


Thư viện

Trong Arduino IDE cài:

RadioHead

Ví dụ sử dụng driver RF22 (Si4432). Nhiều tài liệu và ví dụ của Si4432 dùng RF22/RH_RF22.


Code phát (TX)

 
#include <SPI.h>
#include <RH_RF22.h>

RH_RF22 rf22(10, 2); // CS=D10, IRQ=D2

void setup()
{
  Serial.begin(9600);

  if (!rf22.init())
  {
    Serial.println("Khoi tao XL4432 loi!");
    while (1);
  }

  rf22.setFrequency(433.0);
  rf22.setTxPower(RH_RF22_TXPOW_20DBM);
}

void loop()
{
  const char *msg = "HELLO";

  rf22.send((uint8_t*)msg, strlen(msg));
  rf22.waitPacketSent();

  Serial.println("Da gui: HELLO");

  delay(1000);
}

Code thu (RX)

 
#include <SPI.h>
#include <RH_RF22.h>

RH_RF22 rf22(10, 2); // CS=D10, IRQ=D2

void setup()
{
  Serial.begin(9600);

  if (!rf22.init())
  {
    Serial.println("Khoi tao XL4432 loi!");
    while (1);
  }

  rf22.setFrequency(433.0);
}

void loop()
{
  if (rf22.available())
  {
    uint8_t buf[RH_RF22_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);

    if (rf22.recv(buf, &len))
    {
      Serial.print("Nhan: ");
      Serial.println((char*)buf);
    }
  }
}

Nếu bị lỗi "init failed"

Các lỗi thường gặp:

  1. SDI và SDO đấu ngược.
  2. Chân NIRQ không nối D2.
  3. Nguồn 3.3V yếu.
  4. Dùng Arduino Uno 5V nhưng không chuyển mức logic xuống 3.3V.
  5. Anten chưa gắn.

Kiểm tra phần cứng bằng chương trình đọc chip

Nếu nạp code trên mà báo lỗi khởi tạo, hãy thử:

#include <SPI.h>

#define CS_PIN 10

void setup() {
  Serial.begin(9600);

  SPI.begin();

  pinMode(CS_PIN, OUTPUT);
  digitalWrite(CS_PIN, HIGH);

  digitalWrite(CS_PIN, LOW);
  SPI.transfer(0x00);
  byte value = SPI.transfer(0);
  digitalWrite(CS_PIN, HIGH);

  Serial.print("Reg0 = ");
  Serial.println(value, HEX);
}

void loop() {}

Nếu đọc được thanh ghi khác FF hoặc 00 thì SPI đã giao tiếp với XL4432.

Nếu bạn gửi ảnh chính xác module XL4432 đang có (mặt trước và mặt sau), tôi có thể vẽ sơ đồ đấu nối đúng theo chân thực tế của module đó vì có ít nhất 3 kiểu chân XL4432 bán trên thị trường.

So sánh XL4432 (SI4432)LoRa SX1278 là hai công nghệ khác nhau.

XL4432 (SI4432)

  • Chip RF: Si4432
  • Điều chế: FSK, GFSK, OOK.
  • Tần số: 433/470/868/915 MHz (tùy phiên bản).
  • Tốc độ dữ liệu cao hơn LoRa.
  • Tầm xa thường ngắn hơn LoRa.
Arduino ↔ XL4432 ))))) XL4432 ↔ Arduino

SX1278 LoRa

  • Chip RF: SX1278
  • Điều chế LoRa (Chirp Spread Spectrum).
  • Chống nhiễu rất tốt.
  • Độ nhạy thu cực cao.
  • Tầm xa hơn nhiều.
Arduino ↔ SX1278 ))))) SX1278 ↔ Arduino

So sánh nhanh

Đặc tính XL4432 (SI4432) SX1278 LoRa
Công suất phát 100 mW 100 mW
Độ nhạy thu ~ -121 dBm tới ~ -148 dBm
Tầm xa thực tế 0.5–1.5 km 2–10 km+
Tốc độ Cao Thấp hơn
Chống nhiễu Khá Rất tốt

Điểm quan trọng là:

  • XL4432 không giao tiếp được với SX1278.
  • Hai đầu phải cùng loại:
    • XL4432 ↔ XL4432
    • SX1278 ↔ SX1278

Nếu mục tiêu của bạn là điều khiển Arduino hoặc gửi dữ liệu cảm biến trong phạm vi khoảng 1 km, XL4432 có thể đáp ứng khi dùng anten tốt và môi trường thông thoáng.

Nếu muốn 1 km thật ổn định hoặc xa hơn, SX1278 LoRa thường là lựa chọn tốt hơn.

Bình luận
Nội dung này chưa có bình luận, hãy gửi bình luận đầu tiên của bạn.
VIẾT BÌNH LUẬN CỦA BẠN