價格挺便宜的,而且好像是台灣自產的模組
基於挺台灣應用,就買了一塊來玩玩
發射端我使用 Arduino UNO ,接收端我用 Wemos D1(ESP8266)
模組買來是一對的,並且在上頭會有標籤寫上 ID 以及 S0、S1 字樣
每對的 ID 不同意謂著如果我有數塊這種模組,彼此之間是不會產生干擾的
而每對又各有一個 S0(接收端) 及 S1(發射端)
這似乎意味著這個無線通訊只能從 S1 傳送訊息到 S0 ,是一個單向的無線傳輸
後敘的 muart1 指的是貼有 S1 貼紙的模組(發射端)
muart0 指的是貼有 S0 的模組(接收端)
接線部分若不用到什麼 IN0 OUT0 的功能(後敘) 是滿簡單的,如下圖
因發射端我使用 Arduino UNO ,接收端我用 Wemos D1(ESP8266)
且我額外使用 I/O 腳位來模擬 uart 端口,而不使用原生的 rx/tx 口(因我們必須將原生的 rx/tx 用來跟電腦進行通訊)
接線部分配合我的程式為
Arduino UNO :
Pin 2 接至 muart1(標籤為S1) 之 TxD
Pin 3 接至 muart1 之 RxD
Pin 4 接至按鈕的 OUT 腳位(用來觸發 mySerial.print() )
muart1 之 5V 接至 5V(這邊我另外用一個 5V 的電源供應器)
Gnd 接至 muart1 之 CEB
按鈕的 5V 上拉至 5V
Gnd 接至按鈕的 Gnd
WeMosD1 (ESP8266)
Pin D5 接至 muart0 之 TxD
Pin D6 接至 muart0 之 RxD
Pin D3 接至 LED 之正極(負極接Gnd)
muart0 之 5V 接至 5V(這邊我另外用一個 5V 的電源供應器)
Gnd 接至 muart0 之 CEB
最後,整個系統全部共地( Arduino 、 WeMosD1 、電源供應器 、 muart0 、 muart1 所有 GND 共接)
程式碼部分
Arduino UNO
#include
SoftwareSerial mySerial(2, 3); // RX, TX
const int Button = 4;
const int LED = 13;
void setup() {
Serial.begin(9600);
pinMode(LED,OUTPUT);
pinMode(Button,INPUT);
mySerial.begin(9600);
}
void loop() {
if (!digitalRead(Button)){
delay(100);
if (!digitalRead(Button)){
mySerial.print("L");
Serial.println("L");
digitalWrite(LED,!digitalRead(LED));
}
}
delay(50);
}
WeMosD1(ESP8266)
#include
SoftwareSerial mySerial(D5, D6); // RX, TX
int incomingByte = 0;
const int LED = D3;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(LED,OUTPUT);
}
void loop() {
if (mySerial.available()) {
incomingByte = mySerial.read();
Serial.print(incomingByte);
if (incomingByte == 'L'){
digitalWrite(LED,!digitalRead(LED));
}
}
}
完成後,按下 Arduino Uno 接在 Pin 4 的按鈕,就會觸發接在 WeMos D1 的 D3 腳位的 LED 燈號反轉
並且每次 muart0 接收到來自 muart1 的訊息時, muart0 的板上 LED(紅) 會閃爍一下
Muart0 - S -1 -1 獨立運作
事實上這個模組是可以有獨立運作的功能的,但不能用來傳輸數據,只能控制 I/O 的 High/LOW,可喜的是這樣的方式它是雙向的(也就是不分 mart0 / mart1。
這部分在廠商給的資料裡面,圖示的不是很清楚,而且經由我實驗過後認為資料有誤
首先
接線部分,兩個模組的 RxD, TxD 都不用接(但 5V, Gnd , CEB 如前述連接)
Hint : 實驗後發現與廠商文件中所述的狀態相反
搭配一個獨立開關
搭配一個獨立開關,並且可以回傳另一端的狀態
參考連結
廠商資料1
廠商資料2