本文將介紹如何使用 Arduino 和 RadioHead 庫實現 315MHz(或 433MHz)ASK 無線通信。通過兩個 Arduino 控制板,一個作為發射端,一個作為接收端,實現“按鍵控制 → 無線發送 → LED 控制”的基礎通信功能,非常適合無線控制、遙控器替代等場景。
接收端接線,中間兩個引腳,任意接一個即可
發射端接線
安裝 RadioHead 庫
打開 Arduino IDE → 工具 → 管理庫
搜索 RadioHead
點擊安裝
發射端代碼如下:
#include <RH_ASK.h>
#include <SPI.h> // 必須包含,即使不用 SPIRH_ASK driver; // 默認使用 D12 發射(可改)void setup() {Serial.begin(9600);if (!driver.init()) {Serial.println("發射器初始化失敗");}
}void loop() {const char *msg = "Hello";driver.send((uint8_t *)msg, strlen(msg));driver.waitPacketSent();Serial.println("已發送:Hello");delay(1000);
}
接收端代碼如下,這里接收到信息,板載led會亮,如果沒有加裝天線的話,兩個模塊需要靠的非常近才能進行信息傳輸
#include <RH_ASK.h>
#include <SPI.h>RH_ASK driver;
const int ledPin = 13;void setup() {Serial.begin(9600);pinMode(ledPin, OUTPUT);if (!driver.init()) {Serial.println("接收器初始化失敗");}
}void loop() {uint8_t buf[12];uint8_t buflen = sizeof(buf);if (driver.recv(buf, &buflen)) {buf[buflen] = '\0'; // 添加字符串結束符Serial.print("接收到:");Serial.println((char *)buf);if (strcmp((char *)buf, "Hello") == 0) {digitalWrite(ledPin, HIGH);delay(500);digitalWrite(ledPin, LOW);}}
}
將發射端代碼上傳到 Arduino A
將接收端代碼上傳到 Arduino B
打開兩個串口監視器(波特率 9600)
發射端每秒發送一次 “Hello”
接收端成功接收后會串口輸出 “接收到: Hello”,并點亮 LED