RF 433MHz Transmitter and Receiver with Arduino - 아두이노로 RF 433MHz 무선 통신 하기
Raspberry Pi & Arduino 2020. 11. 24. 11:56 |반응형
아두이노로 간단히 RF433MHz 통신이 가능하다.
왼쪽이 리시버, 오른쪽이 트랜스미터다.
송신기와 수신기를 아두이노에 연결해 준다. RadioHead Packet Radio library를 다운받고 아래와 같이 아두이노 라이브러리에 복사한다.
특별한 설치 과정은 없다. 그냥 복사한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // ask_transmitter.pde // -*- mode: C++ -*- // Simple example of how to use RadioHead to transmit messages // with a simple ASK transmitter in a very simple way. // Implements a simplex (one-way) transmitter with an TX-C1 module // Tested on Arduino Mega, Duemilanova, Uno, Due, Teensy, ESP-12 #include <RH_ASK.h> #ifdef RH_HAVE_HARDWARE_SPI #include <SPI.h> // Not actually used but needed to compile #endif RH_ASK driver; // RH_ASK driver(2000, 4, 5, 0); // ESP8266 or ESP32: do not use pin 11 or 2 // RH_ASK driver(2000, 3, 4, 0); // ATTiny, RX on D3 (pin 2 on attiny85) TX on D4 (pin 3 on attiny85), // RH_ASK driver(2000, PD14, PD13, 0); STM32F4 Discovery: see tx and rx on Orange and Red LEDS void setup() { #ifdef RH_HAVE_SERIAL Serial.begin(9600); // Debugging only #endif if (!driver.init()) #ifdef RH_HAVE_SERIAL Serial.println("init failed"); #else ; #endif else Serial.println("init succeeded"); } void loop() { const char *msg = "Hello Wireless World!"; driver.send((uint8_t *)msg, strlen(msg)); driver.waitPacketSent(); #ifdef RH_HAVE_SERIAL Serial.println("Message sent."); #endif delay(200); } |
Transmitter 소스를 컴파일하고 아두이노에 업로드한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | // ask_receiver.pde // -*- mode: C++ -*- // Simple example of how to use RadioHead to receive messages // with a simple ASK transmitter in a very simple way. // Implements a simplex (one-way) receiver with an Rx-B1 module // Tested on Arduino Mega, Duemilanova, Uno, Due, Teensy, ESP-12 #include <RH_ASK.h> #ifdef RH_HAVE_HARDWARE_SPI #include <SPI.h> // Not actually used but needed to compile #endif RH_ASK driver; // RH_ASK driver(2000, 4, 5, 0); // ESP8266 or ESP32: do not use pin 11 or 2 // RH_ASK driver(2000, 3, 4, 0); // ATTiny, RX on D3 (pin 2 on attiny85) TX on D4 (pin 3 on attiny85), // RH_ASK driver(2000, PD14, PD13, 0); STM32F4 Discovery: see tx and rx on Orange and Red LEDS void setup() { #ifdef RH_HAVE_SERIAL Serial.begin(9600); // Debugging only #endif if (!driver.init()) #ifdef RH_HAVE_SERIAL Serial.println("init failed"); #else ; #endif else Serial.println("init succeeded"); } void loop() { uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]; memset(buf, 0, RH_ASK_MAX_MESSAGE_LEN); uint8_t buflen = sizeof(buf); if (driver.recv(buf, &buflen)) // Non-blocking { // Message with a good checksum received, dump it. driver.printBuffer("Got:", buf, buflen); #ifdef RH_HAVE_SERIAL String message = (char*)buf; Serial.print("Message: "); Serial.println(message); #endif } delay(200); } |
Receiver 소스를 컴파일하고 아두이노에 업로드한다.
송신기에서는 계속 메세지를 보낸다.
송신기에서 보낸 메세지를 수신기에서 받는다. printBuffer()로 출력한 메세지는 각 문자의 아스키 코드값이다.
void RHGenericDriver::printBuffer(const char* prompt, const uint8_t* buf, uint8_t len)
Parameters
[in] prompt string to preface the print
[in] buf Location of the buffer to print
[in] len Length of the buffer in octets.
Prints a data buffer in HEX. For diagnostic use
※ 참고: RH_ASK Class Reference
반응형
'Raspberry Pi & Arduino' 카테고리의 다른 글
L293D DC Motor Driver with Arduino - L293D로 DC 모터 제어하기 (2) | 2020.12.17 |
---|---|
Read and Write Radio-Frequency IDentification(RFID) cards with Arduino using RC522 (0) | 2020.12.16 |
DFPlayer Mini with Arduino - 아두이노로 MP3 플레이하기 (0) | 2020.11.20 |
ILI9341 TFT LCD with Arduino - 아두이노로 ILI9341 사용하기 (2) | 2020.11.19 |
MX1508 Motor Driver - MX1508 모터 드라이버 (0) | 2020.11.18 |