文章程式碼顯示

2019年1月14日 星期一

《進階※應用篇》寫程式Arduino教學 - 09:Lora 長距無線傳輸 SX1278 1W 433MHZ 進階

此篇不同於基礎篇

額外使用了  SoftwareSerial.h 將 uart 通訊口獨立出來,以免跟 Arduino IDE 的監看視窗打架
並且將 "接收端的地址+波段" 與 "數據" 分隔開來

發射端代碼(同樣發射一個byte)

#include "SoftwareSerial.h"

#define AUX 5
#define LED 13

SoftwareSerial mySerial(2, 3); // RX, TX

const byte address[] = {0xEA,0x00,0x0D};
byte data = 0xBB; //預計傳送數據為 BB

void waitAUX();
void sendData1Byte (const byte* address, byte data);

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(AUX,INPUT);
  pinMode(LED,OUTPUT);
  waitAUX();
  Serial.println("Start.");
}

void loop() {
  pinMode(LED,!digitalRead(LED));
  sendData1Byte (address, data); //傳送 1 Byte 的數據
  delay(1500);
}

// ===== 等待 Lora 晶片不繁忙 =====
void waitAUX(){
  while(!digitalRead(AUX));
  delay(10);
}

// ===== sendData1Byte =====
void sendData1Byte (const byte* address, byte data){
  waitAUX();
  for(int i = 0; i < 3; i++){
    mySerial.write(address[i]);
    delay(2);
  }
  mySerial.write(data);
  delay(2);
  mySerial.flush();  
  waitAUX();
}



接收端代碼(亦改為使用SoftwareSerial.h)

#include "SoftwareSerial.h"

#define AUX 5
#define LED 13

SoftwareSerial mySerial(2, 3); // RX, TX
void waitAUX();
byte incomingByte = 0;

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(AUX,INPUT);
  pinMode(LED,OUTPUT);
  waitAUX();
  Serial.println("Start.");
}

void loop() {
  if (mySerial.available() > 0) {
    incomingByte = mySerial.read(); 
    Serial.println(incomingByte); (0xBB 十進制為 187)
    digitalWrite(LED,!digitalRead(LED));
    Serial.flush();
  }    
}

// ===== 等待 Lora 晶片不繁忙 =====
void waitAUX(){
  while(!digitalRead(AUX));
  delay(10);
}



接收端的串列埠監看視窗



接收端由 SX1278 Tx 端擷取到的數據



可以發現,接收端的 SX1278 接收到數據後,會直接僅將數據由 SX1278  Tx 發送出來,前面的"接收端的地址+波段" 並不會囊括在內


我的 Youtube 頻道,一定要訂閱
我將定期推出程式語言的新手教學影片


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

Blog 使用方針與索引