使用两块ESP8266实现ESP-NOW通信

2024-05-25 18:36

本文主要是介绍使用两块ESP8266实现ESP-NOW通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ESP-NOW简介

ESP-NOW是Espressif开发的一种基于Wi-Fi的低功耗通信协议。与传统Wi-Fi通信不同,ESP-NOW不需要配对过程,设备间可以直接通信,非常适合需要快速传输小数据包的应用,如传感器网络、遥控器和智能家居设备。它的优势在于低延迟、低功耗和无需网络路由器的直连通信。

使用两块ESP8266实现ESP-NOW通信

要使用两块ESP8266实现ESP-NOW通信,我们需要配置一块作为发送设备,另一块作为接收设备。首先,确保你已经安装了Arduino IDE,并添加了ESP8266的开发板支持。

准备工作

  1. 安装Arduino IDE和ESP8266支持包

    • 打开Arduino IDE,导航到File > Preferences,在“Additional Boards Manager URLs”字段中添加以下链接:
      http://arduino.esp8266.com/stable/package_esp8266com_index.json
      
    • 然后,打开Tools > Board > Boards Manager,搜索esp8266并安装。
  2. 库文件

    • 安装ESP-NOW库:打开Sketch > Include Library > Manage Libraries,搜索ESP8266WiFi并安装。

发送端代码

以下是ESP8266作为发送端的Arduino代码:

#include <ESP8266WiFi.h>
#include <espnow.h>// 广播地址,所有设备均可接收
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};// 发送数据结构
typedef struct struct_message {char message[32];
} struct_message;struct_message myData;void setup() {// 初始化串口监视器Serial.begin(115200);// 初始化Wi-FiWiFi.mode(WIFI_STA);// 初始化ESP-NOWif (esp_now_init() != 0) {Serial.println("Error initializing ESP-NOW");return;}// 注册发送回调esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
}void loop() {// 填充发送数据strcpy(myData.message, "Hello, ESP-NOW!");// 发送数据esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));// 打印发送信息Serial.println("Message sent: " + String(myData.message));// 每隔2秒发送一次delay(2000);
}

接收端代码

以下是ESP8266作为接收端的Arduino代码:

#include <ESP8266WiFi.h>
#include <espnow.h>// 接收数据结构
typedef struct struct_message {char message[32];
} struct_message;struct_message myData;// 接收回调函数
void onDataRecv(uint8_t *mac, uint8_t *incomingData, uint8_t len) {memcpy(&myData, incomingData, sizeof(myData));Serial.print("Received message: ");Serial.println(myData.message);
}void setup() {// 初始化串口监视器Serial.begin(115200);// 初始化Wi-FiWiFi.mode(WIFI_STA);// 初始化ESP-NOWif (esp_now_init() != 0) {Serial.println("Error initializing ESP-NOW");return;}// 注册接收回调esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);esp_now_register_recv_cb(onDataRecv);
}void loop() {// 空闲
}

总结

ESP-NOW是一个强大的协议,可以在没有Wi-Fi网络的情况下实现设备间的快速通信。通过以上步骤,你可以使用两块ESP8266开发板建立一个简单的ESP-NOW通信系统。这种方式特别适用于低功耗、低延迟和无需网络基础设施的应用场景。希望这篇博客能帮你快速入门ESP-NOW,开启你的无线通信开发之旅。

这篇关于使用两块ESP8266实现ESP-NOW通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002297

相关文章

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("