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


    发送端

    1. /*
    2. //查询esp32的mac地址
    3. #include "WiFi.h"
    4. void setup(){
    5. Serial.begin(115200);
    6. WiFi.mode(WIFI_MODE_STA);
    7. Serial.println(WiFi.macAddress()); //40:22:D8:EB:0F:88 非TYPE C接口的esp32接口的esp32
    8. }
    9. void loop(){
    10. Serial.println(WiFi.macAddress());
    11. delay(10000);
    12. }
    13. */
    14. #include
    15. #include
    16. #include
    17. // 读取模拟量的引脚 34 接线 正3.3V 负 GND OUT 34
    18. const int potPin = 34;
    19. // 保存读取到的模拟量值
    20. int potValue = 0;
    21. // 接收端的MAC地址 TYPE C接口的esp32
    22. uint8_t broadcastAddress[] = {0x08, 0xD1, 0xF9, 0xE1, 0x8D, 0xE4};
    23. // 发送结构体类型
    24. typedef struct struct_message {
    25. char a[32];
    26. int b;
    27. float c;
    28. bool d;
    29. int x; //读取的模拟量数值
    30. int y;
    31. } struct_message;
    32. // 创建一个结构体变量
    33. struct_message myData;
    34. // 回调函数,函数将在发送消息时执行。此函数告诉我们信息是否成功发送;
    35. void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
    36. Serial.print("\r\nLast Packet Send Status:\t");
    37. Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
    38. }
    39. void setup() {
    40. // 初始化串口波特率
    41. Serial.begin(115200);
    42. // 设置WIFI模式为STA模式,即无线终端
    43. WiFi.mode(WIFI_STA);
    44. // 初始化ESP-NOW
    45. if (esp_now_init() != ESP_OK) {
    46. Serial.println("Error initializing ESP-NOW");
    47. return;
    48. }
    49. //注册回调函数
    50. esp_now_register_send_cb(OnDataSent);
    51. // 注册通信频道
    52. esp_now_peer_info_t peerInfo;
    53. memcpy(peerInfo.peer_addr, broadcastAddress, 6);
    54. peerInfo.channel = 0; //通道
    55. peerInfo.encrypt = false;//是否加密为False
    56. if (esp_now_add_peer(&peerInfo) != ESP_OK){
    57. Serial.println("Failed to add peer");
    58. return;
    59. }
    60. }
    61. void loop() {
    62. potValue = analogRead(potPin);
    63. Serial.print("ADC_Value:");
    64. Serial.println(potValue);
    65. //设置要发送的值
    66. strcpy(myData.a, "THIS IS A CHAR");
    67. myData.b = random(1,20);
    68. myData.c = 1.2;
    69. myData.d = false;
    70. myData.x = potValue; //读取到的模拟量数值
    71. myData.y = 0;
    72. //发送信息到指定ESP32上
    73. esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
    74. //判断是否发送成功
    75. if (result == ESP_OK) {
    76. Serial.println("Sent with success");
    77. }
    78. else {
    79. Serial.println("Error sending the data");
    80. }
    81. delay(10);
    82. }

    接收端

    1. /*
    2. //查询esp32的mac地址
    3. #include "WiFi.h"
    4. void setup(){
    5. Serial.begin(115200);
    6. WiFi.mode(WIFI_MODE_STA);
    7. Serial.println(WiFi.macAddress()); //08:D1:F9:E1:8D:E4 TYPE C接口的esp32
    8. }
    9. void loop(){
    10. Serial.println(WiFi.macAddress());
    11. delay(10000);
    12. }
    13. */
    14. #include
    15. #include
    16. #include
    17. //接线 控制端VCC--3.3V GND--GND SIG --15 电源 VIN --电池正极 GND --电池负极 负载 V+ --电机 V- --电机
    18. // 输出pwm信号的引脚 一个引脚只能绑定一个通道 一个通道可以绑定多个引脚
    19. const int x_pwm_pin = 15;
    20. int freq = 2000; //设置PWM波的频率
    21. int channel = 0; //设置通道,共16个通道,0~15
    22. int resolution = 10; //分辨率,取值0~20 duty的最大值为 2^resolution-1 pwm范围0-1023
    23. // 创建一个结构体接收数据
    24. typedef struct struct_message {
    25. char a[32];
    26. int b;
    27. float c;
    28. bool d;
    29. int x; //保存获取到的模拟量值
    30. int y;
    31. } struct_message;
    32. // 创建一个结构体变量
    33. struct_message myData;
    34. // 回调函数,当收到消息时会调佣该函数
    35. void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
    36. memcpy(&myData, incomingData, sizeof(myData));
    37. Serial.print("Bytes received: ");
    38. Serial.println(len);
    39. Serial.print("Char: ");
    40. Serial.println(myData.a);
    41. Serial.print("Int: ");
    42. Serial.println(myData.b);
    43. Serial.print("Float: ");
    44. Serial.println(myData.c);
    45. Serial.print("Bool: ");
    46. Serial.println(myData.d);
    47. Serial.print("X: "); //获取到的模拟量值
    48. Serial.println(myData.x);
    49. Serial.print("Y: ");
    50. Serial.println(myData.y);
    51. Serial.println();
    52. }
    53. void setup() {
    54. // 初始化串口波特率
    55. Serial.begin(115200);
    56. // 设置wifi模式
    57. WiFi.mode(WIFI_STA);
    58. // 初始化esp-now
    59. if (esp_now_init() != ESP_OK) {
    60. Serial.println("Error initializing ESP-NOW");
    61. return;
    62. }
    63. //注册接收信息的回调函数
    64. esp_now_register_recv_cb(OnDataRecv);
    65. ledcSetup(channel,freq,resolution); //设置通道0的相关参数
    66. ledcAttachPin(x_pwm_pin,channel); //将通道0和引脚连接起来
    67. }
    68. void loop() {
    69. int tmp_x = map(myData.x,0,4095,0,1023); //myData.x 的范围在 0-4095 转化后的数据范围在0-1023
    70. ledcWrite(channel,tmp_x);
    71. Serial.print("tmp_x:");
    72. Serial.println(tmp_x);
    73. delay(10);
    74. }

  • 相关阅读:
    学生DW静态网页设计——html+css+javascript+jquery+bootstarp马尔代夫旅游响应式网站
    牛客 HJ30 字符串合并处理
    22noip10连 day7--考后总结
    Python学习笔记合集(Matplotlib总结)
    学习笔记——路由网络基础——等开销负载均衡
    中枢神经系统解剖结构图,神经系统的解剖结构
    创建型模式-工厂方法模式(二)
    JavaWeb--Maven
    凌恩客户文章|《Microbiome》:宏基因组构建反刍动物全消化道超1万个MAGs新进展
    快慢指针判断是不是回文链表
  • 原文地址:https://blog.csdn.net/weixin_42854045/article/details/134472776