文章程式碼顯示

2018年7月15日 星期日

《進階※應用篇》寫程式Arduino教學 - 06:無線 uart 串列傳輸 Muart0-S-1-1

最近在網上看到一個走 2.4G 的無線 uart
價格挺便宜的,而且好像是台灣自產的模組
基於挺台灣應用,就買了一塊來玩玩



發射端我使用 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

↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引