-
-
-
Tổng tiền thanh toán:
-
Sơ đồ và code Arduino phát / thu XL4432
22/05/2026
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:
- SDI và SDO đấu ngược.
- Chân NIRQ không nối D2.
- Nguồn 3.3V yếu.
- Dùng Arduino Uno 5V nhưng không chuyển mức logic xuống 3.3V.
- 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) và 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.