close

草稿改編,紀錄使用

ESP32 master端,傳送資料給slave端

#include <esp_now.h>
#include <WiFi.h>
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;

//////////////////要接收資料的ESP32(salve)的MAC位址/////////////////////////////////////////
uint8_t broadcastAddress[] = {0x84, 0xCC, 0xA8, 0x6D, 0x29, 0xA8};

///////////////////////callback when data is sent//////////////////////////////////////////
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
  //Serial.print("\r\nLast Packet Send Status:\t");
  //Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
 
void setup() {
  // Init Serial Monitor
  Serial.begin(115200);
  //////////////////////////////LIDAR/////////////////////////////////////////////////
  Wire.begin();
  //每500毫秒執行一次  
  sensor.setTimeout(500);  
  if (!sensor.init())
  {
   //Serial.println("Failed to detect and initialize sensor!");
   while (1) {}
  }
  /////////////////////////////設定TOF為持續執行狀態////////////////////////////////////
  sensor.startContinuous();
  
  ////////////////// Set device as a Wi-Fi Station/////////////////////////////////////
  WiFi.mode(WIFI_STA);

  ///////////////////////////初始化 ESP-NOW////////////////////////////////////////////
  if (esp_now_init() != ESP_OK) {
    //Serial.println("Error initializing ESP-NOW");
    return;
  }
  // Once ESPNow is successfully Init, we will register for Send CB to
  // get the status of Trasnmitted packet
  esp_now_register_send_cb(OnDataSent);  
  // Register peer
  esp_now_peer_info_t peerInfo;
  memcpy(peerInfo.peer_addr, broadcastAddress, 6);
  peerInfo.channel = 0;  
  peerInfo.encrypt = false;  
  // Add peer        
  if (esp_now_add_peer(&peerInfo) != ESP_OK){
    //Serial.println("Failed to add peer");
    return;
  }
}
 
void loop() {
  //////////////////////////////////////Lidar/////////////////////////////////
  ///////////////////////////////設定DDD值為測距數據//////////////////////////////
  float DDD=sensor.readRangeContinuousMillimeters();
  
    Serial.println(DDD);
  //Serial.flush(); 
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
  
  //////////////////////////////////傳送資料給指定的MAC位置////////////////////////////////////
  esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &DDD, sizeof(DDD));
   
 if (result == ESP_OK) {
  Serial.println("Sent with success");
 }
  else {
  Serial.println("Error sending the data");
  }
  
}

Slave端 接收master傳送過來的訊息

 

#include <esp_now.h>
#include <WiFi.h>

//////////////////////////必須和master所傳送的型別一致///////////////////////////////////////
float DDD;

/////////////////callback function that will be executed when data is received////////////
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
///////////將incomingData(記憶體位置) 複製到 DDD的記憶體位置 (&DDD 為DDD的記憶體位置)//////
//////////意思DDD和incomingData同一個記憶體位置,所以值是相同的///////////////////////////
  memcpy(&DDD, incomingData, sizeof(DDD));
  Serial.println (DDD);
}
 
void setup() {
  // Initialize Serial Monitor
  Serial.begin(115200);
  
  /////////////////Set device as a Wi-Fi Station//////////////////////////
  WiFi.mode(WIFI_STA);  

  //////////////////////////Init ESP-NOW////////////////////////////////
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }  
  /////////////////////接收master傳送過來的訊息////////////////////////////////////
  // Once ESPNow is successfully Init, we will register for recv CB to
  // get recv packer info
  esp_now_register_recv_cb(OnDataRecv);
}
 
void loop() {

}

 

 

 

 
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 a15001500 的頭像
    a15001500

    麵包雜記

    a15001500 發表在 痞客邦 留言(0) 人氣()