发送端
- /*
- //查询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);
- }