ESP32开发板单向点对点ESP-NOW无线通信

news2024/9/24 15:24:58

ESP32开发板单向点对点ESP-NOW无线通信

    • 简介
    • 读取ESP32接收方Receiver的MAC地址
    • ESP32发送方Sender程序
    • ESP32接收方Receiver程序
    • ESP-NOW通信验证
    • 总结

简介

本例程通过两个ESP32开发板实现单向点对点ESP-NOW无线通信,一个ESP32开发板作为Sender发送方,另一个开发板作为Receiver接收方接收发送方的数据。
在这里插入图片描述

读取ESP32接收方Receiver的MAC地址

#include <WiFi.h>
#include <esp_wifi.h>

void readMacAddress(){
  uint8_t baseMac[6];
  esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);
  if (ret == ESP_OK) {
    Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
                  baseMac[0], baseMac[1], baseMac[2],
                  baseMac[3], baseMac[4], baseMac[5]);
  } else {
    Serial.println("Failed to read MAC address");
  }
}

void setup(){
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin();
  Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
  readMacAddress();
}
 
void loop(){

}

在这里插入图片描述

ESP32发送方Sender程序

把接收方ESP32开发板读取到的MAC地址填入以下程序第4行中

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

// REPLACE WITH YOUR RECEIVER MAC Address
uint8_t broadcastAddress[] = {0x54, 0x43, 0xb2, 0x7f, 0x00, 0x60};

// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
  char a[32];
  int b;
  float c;
  bool d;
} struct_message;

// Create a struct_message called myData
struct_message myData;
esp_now_peer_info_t peerInfo;

// 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); 
  // 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;
  }

  // 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
  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() {
  // Set values to send
  strcpy(myData.a, "THIS IS A CHAR");
  myData.b = random(1,20);
  myData.c = 1.2;
  myData.d = false;  
  // Send message via ESP-NOW
  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(2000);
}

ESP32接收方Receiver程序

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

// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
    char a[32];
    int b;
    float c;
    bool d;
} struct_message;

// Create a struct_message called myData
struct_message myData;

// callback function that will be executed when data is received
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.println();
}
 
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;
  }
  
  // Once ESPNow is successfully Init, we will register for recv CB to
  // get recv packer info
  esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv));
}
 
void loop() {

}

ESP-NOW通信验证

上传发送方和接收方的程序到ESP32开发板,打开两个串口助手分别显示发送方和接收方的打印结果情况
ESP32发送方:发送结构体struct_message数据并显示发送成功
在这里插入图片描述
ESP32接收方:显示接收到的发送方发送的结构体struct_message的具体数据
在这里插入图片描述

总结

通过以上例程验证了ESP32开发板之间单向点对点的ESP-NOW无线通信,接下来的篇章将继续验证多个的ESP32开发板之间实现一对多的ESP-NOW无线通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP-J复赛 模拟题6 解析

此题为水题不讲解 根据无解析写代码1&#xff1a; #include <bits/stdc.h> using namespace std; string s; int main(){getline(cin,s);int lens.length();for(int i0;i<len;i){if(s[i]>A && s[i]<Z){s[i]32;}else if(s[i]>a && s[i]<z…

python自动化笔记:配置文件.ini及yml文件

目录 一、.ini配置文件1.1、ini编写格式1.2、读取.ini配置文件的数据1.3、编辑&#xff1a;写入和删除&#xff08;了解即可&#xff09; 二、yaml文件2.1、yaml编写语法规则2.2、yaml三种数据结构2.3、yaml文件的读取和写入 一、.ini配置文件 后缀名.ini 用于存储项目全局配置…

【单片机开发软件】使用VSCode开发STM32环境搭建

&#x1f48c; 所属专栏&#xff1a;【单片机开发软件技巧】 &#x1f600; 作  者&#xff1a; 于晓超 &#x1f680; 个人简介&#xff1a;嵌入式工程师&#xff0c;专注嵌入式领域基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大家&#xff1…

随笔-见字如面

不出意外&#xff0c;7月的工时干成了部门第一&#xff0c;36个人天。 昨天洗头的时候&#xff0c;揉了两下头发&#xff0c;看了一眼&#xff0c;手里全是碎发&#xff0c;吓了一跳&#xff0c;赶紧冲掉了&#xff0c;这内力又精进了。最近加班有些疲惫了&#xff0c;总是感觉…

MySQL笔记(十):MySQL管理

一、用户管理 #用户管理 -- 原因&#xff1a;当我们做项目开发时&#xff0c;可以根据不同的开发人员&#xff0c;赋给她相应的mysql操作权限。 -- 所以&#xff0c;mysql数据库管理人员&#xff08;root&#xff09;&#xff0c;根据需要创建不同的用户&#xff0c;赋给相应的…

SparkSQL中的JSON内置函数全解析

SparkSQL中的JSON函数快速入门 目录 SparkSQL中的JSON函数快速入门为什么需要JSON函数?SparkSQL JSON函数概览get_json_object: JSON字段提取利器json_tuple: 多字段提取神器from_json: JSON转结构化数据的桥梁to_json: 结构化数据转JSON的便捷工具schema_of_json: JSON Schem…

加密创投周期进化论(上篇):再造新世界

回到过去&#xff0c;选择决定命运。 作者&#xff1a;Wenser&#xff1b;编辑&#xff1a;郝方舟 出品 | Odaily星球日报&#xff08;ID&#xff1a;o-daily&#xff09; 2017 年 12 月&#xff0c;以太坊联创 Vitalik 在加密货币行业市值触及 5000 亿美元时&#xff0c;发出了…

C语言程序设计-[8] while语句循环结构

1、while语句循环结构定义 while语句循环结构的一般形式、流程图和执行过程如下&#xff1a; 注1&#xff1a;与前面一样&#xff0c;表达式可以是任意的&#xff0c;只要有值就行&#xff0c;遵循非0即真的原则。 注2&#xff1a;一个循环结构由四个要素构成&#xff1a;循环…

【漏洞复现】某赛通电子文档安全管理系统 NavigationAjax SQL注入漏洞

0x01 产品简介 某赛通电子文档安全管理系统&#xff08;简称&#xff1a;CDG&#xff09;是一款电子文档安全加密软件&#xff0c;该系统利用驱动层透明加密技术&#xff0c;通过对电子文档的加密保护&#xff0c;防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&…

【机器学习】Caltech-101的基本概念和使用方法以及Caltech-101和ImageNet的联系和区别

引言 Caltech-101数据集是一个广泛用于对象识别任务的数据库&#xff0c;它包含了大约9,000张图像&#xff0c;这些图像来自101个不同的对象类别。每个类别包含的图像数量大约在40到800张之间&#xff0c;大多数类别大约有50张图像。图像的分辨率大致为300200像素 文章目录 引言…

sleuth+zipkin分布式链路追踪

概述 结构图 常见的链路追踪 cat zipkin pinpoint skywalking sleuth Sleuth介绍 Trace Span Annotation 使用Sleuth 添加依赖 <!--sleuth--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starte…

DSL domain specific language of Kola

How we design Kola - ApiHugKola background, Kola a consumer driver tester frameworkhttps://apihug.com/zhCN-docs/kola/003_dsl_contract Concept 在 Kola 定位中 Kola 是什么, 是致力于提供一个让相关各方都能够理解共同创造的测试框架和工具。 同时 Kola 是建立于业界…

AcWing双链表

0索引记录头结点&#xff0c;1索引是尾节点&#xff0c;idx从2开始记录 L和R是前面的索引和后面索引的数组&#xff0c;e是存储的元素的数组&#xff0c;k1的原因&#xff1a;k是表示第k个插入的元素&#xff0c; k ∈ [ 1 , inf ⁡ ] k\in [1,\inf] k∈[1,inf].但是 i d x ∈ …

卷爆大模型,引发硅谷大厂打擂台赛的AI Agent到底是何方神圣?

AI Agent是何方神圣&#xff1f; 让比尔盖茨在2023年预言&#xff1a;未来五年内有望正式迎来它&#xff0c;彻底改变人类的生产力与生活方式。 让吴恩达教授在AI Ascent 2024演讲中高赞&#xff1a;今年得益于它的工作流的帮助&#xff0c; 人工智能的能力范围将持续拓展&am…

VBA经典应用69例应用6:Range.NumberFormat属性

《VBA经典应用69例》&#xff08;版权10178981&#xff09;&#xff0c;是我推出的第九套教程&#xff0c;教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开&#xff0c;这套教程案例众多&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以便…

2023年中国城市统计年鉴(PDF+excel)

2023年中国城市统计年鉴 1、时间&#xff1a;1985-2023年 2、格式&#xff1a;PDFexcel 3、说明&#xff1a;中国城市统计年鉴收录了全国各级城市社会经济发展等方面的主要统计数据&#xff0c;数据来源于各城市的相关部门。本年鉴内容共分四个部分&#xff1a;第一部分是全…

HDFS 之 文件流

org.apache.hadoop.hdfs.DFSInputStream read 接口的关键逻辑在以下 pread 接口。 private int pread(long position, ByteBuffer buffer)throws IOException {// sanity checksdfsClient.checkOpen();if (closed.get()) {throw new IOException("Stream closed");}…

24/8/8算法笔记 决策树构建鸢尾花

决策树是一种由算法自动设计的模型。在机器学习中&#xff0c;构建决策树的过程通常遵循以下步骤&#xff1a; 特征选择&#xff1a;算法会评估每个特征&#xff0c;并选择一个特征作为节点分裂的依据。这个选择基于某种准则&#xff0c;如信息增益&#xff08;ID3算法&#xf…

手把手教你去掉WinRAR中的广告?

你是否在使用WinRAR的时候&#xff0c;打开压缩包的时候&#xff0c;它就会给你弹出一个广告窗口&#xff0c;是不是很烦人。本章教程&#xff0c;教你如何将它去除掉。 1、下载所需软件 通过百度网盘分享的文件&#xff1a;reshacker 链接&#xff1a;https://pan.baidu.com/s…

基础复习(前端部分)

MVVM(Model-View-ViewModel)的前端开发思想 Model: 数据模型&#xff0c;特指前端中通过请求从后台获取的数据 View: 视图&#xff0c;用于展示数据的页面&#xff0c;可以理解成我们的htmlcss搭建的页面&#xff0c;但是没有数据 ViewModel: 数据绑定到视图&#xff0c;负责…