esp32之间通过espnow通信实现遥控电机的转速

发送端

/*
//查询esp32的mac地址
#include "WiFi.h"
 
void setup(){
  Serial.begin(115200);
  WiFi.mode(WIFI_MODE_STA);
  Serial.println(WiFi.macAddress());  //40:22:D8:EB:0F:88  非TYPE C接口的esp32接口的esp32
}
 
void loop(){
  Serial.println(WiFi.macAddress());
  delay(10000);
}
*/

#include 
#include 
#include 
// 读取模拟量的引脚  34   接线  正3.3V 负 GND  OUT 34
const int potPin = 34;
// 保存读取到的模拟量值
int potValue = 0;
// 接收端的MAC地址  TYPE C接口的esp32
uint8_t broadcastAddress[] = {0x08, 0xD1, 0xF9, 0xE1, 0x8D, 0xE4};
// 发送结构体类型
typedef struct struct_message {
  char a[32];
  int b;
  float c;
  bool d;
  int x;  //读取的模拟量数值
  int y;
} struct_message;
// 创建一个结构体变量
struct_message myData;
// 回调函数,函数将在发送消息时执行。此函数告诉我们信息是否成功发送;
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() {
  // 初始化串口波特率
  Serial.begin(115200);
  // 设置WIFI模式为STA模式,即无线终端
  WiFi.mode(WIFI_STA);
  //  初始化ESP-NOW
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
 //注册回调函数
  esp_now_register_send_cb(OnDataSent);
  // 注册通信频道
  esp_now_peer_info_t peerInfo;
  memcpy(peerInfo.peer_addr, broadcastAddress, 6);
  peerInfo.channel = 0;  //通道
  peerInfo.encrypt = false;//是否加密为False      
  if (esp_now_add_peer(&peerInfo) != ESP_OK){
    Serial.println("Failed to add peer");
    return;
  }
}
 
void loop() {
  potValue = analogRead(potPin);
  Serial.print("ADC_Value:");
  Serial.println(potValue);
  //设置要发送的值
  strcpy(myData.a, "THIS IS A CHAR");
  myData.b = random(1,20);
  myData.c = 1.2;
  myData.d = false;
  myData.x = potValue;  //读取到的模拟量数值
  myData.y = 0;
  //发送信息到指定ESP32上
  esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
 //判断是否发送成功
  if (result == ESP_OK) {
    Serial.println("Sent with success");
  }
  else {
    Serial.println("Error sending the data");
  }
  delay(10);
}

接收端

/*
//查询esp32的mac地址
#include "WiFi.h"
void setup(){
  Serial.begin(115200);
  WiFi.mode(WIFI_MODE_STA);
  Serial.println(WiFi.macAddress()); //08:D1:F9:E1:8D:E4  TYPE C接口的esp32
}
 
void loop(){
Serial.println(WiFi.macAddress());
  delay(10000);
}
*/
#include 
#include 
#include 
//接线  控制端VCC--3.3V  GND--GND    SIG --15    电源  VIN --电池正极   GND --电池负极    负载  V+ --电机    V- --电机
// 输出pwm信号的引脚  一个引脚只能绑定一个通道   一个通道可以绑定多个引脚
const int x_pwm_pin = 15; 
int freq = 2000;    //设置PWM波的频率
int channel = 0;    //设置通道,共16个通道,0~15
int resolution = 10; //分辨率,取值0~20 duty的最大值为 2^resolution-1      pwm范围0-1023
// 创建一个结构体接收数据
typedef struct struct_message {
    char a[32];
    int b;
    float c;
    bool d;
    int x;  //保存获取到的模拟量值
    int y;
} struct_message;

// 创建一个结构体变量
struct_message myData;
// 回调函数,当收到消息时会调佣该函数
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.print("Bytes received: ");
  Serial.println(len);
  Serial.print("Char: ");
  Serial.println(myData.a);
  Serial.print("Int: ");
  Serial.println(myData.b);
  Serial.print("Float: ");
  Serial.println(myData.c);
  Serial.print("Bool: ");
  Serial.println(myData.d);
  Serial.print("X: ");  //获取到的模拟量值
  Serial.println(myData.x);
  Serial.print("Y: ");
  Serial.println(myData.y);
  Serial.println();
}
 
void setup() {
  // 初始化串口波特率
  Serial.begin(115200); 
  // 设置wifi模式
  WiFi.mode(WIFI_STA);
  // 初始化esp-now
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  //注册接收信息的回调函数
  esp_now_register_recv_cb(OnDataRecv);
  ledcSetup(channel,freq,resolution);   //设置通道0的相关参数
  ledcAttachPin(x_pwm_pin,channel);     //将通道0和引脚连接起来
}
 
void loop() {
  int tmp_x = map(myData.x,0,4095,0,1023);  //myData.x 的范围在 0-4095  转化后的数据范围在0-1023
  ledcWrite(channel,tmp_x);
  Serial.print("tmp_x:");
  Serial.println(tmp_x);
  delay(10);
}

你可能感兴趣的:(ESP32,ESP32,espnow,pwm,ADC,adc)