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

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

  // 初始化ESP-NOW
  if (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-Fi
  WiFi.mode(WIFI_STA);

  // 初始化ESP-NOW
  if (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,开启你的无线通信开发之旅。

相关文章
【STM32】引脚GPIO批量操作数组&for循环流水灯
【STM32】引脚GPIO批量操作数组&for循环流水灯
1195 0
|
网络安全
如何在 Debian 系统上配置 NTP,来确保计算机时间的准确同步
如何在 Debian 系统上配置 NTP,来确保计算机时间的准确同步
4025 0
如何在 Debian 系统上配置 NTP,来确保计算机时间的准确同步
交流电路理论:峰值、平均值和RMS值的计算公式
除了频率和周期之外,AC 波形的一个关键属性是振幅,它表示交变波形的最大值,或者更广为人知的是峰值。
11718 1
交流电路理论:峰值、平均值和RMS值的计算公式
|
10月前
|
存储
在Arduino中使用数学库
在Arduino中使用数学库,可以通过包含`&lt;math.h&gt;`头文件来访问一系列数学函数,如sin、cos、tan等。使用这些函数前需确保已正确引入库,并了解各函数参数与返回值类型,以便进行精准的数学运算。
|
7月前
|
人工智能 自然语言处理 算法
接入DeepSeek需要做算法备案吗?一文读懂算法备案的那些事儿
在AI快速发展的今天,算法备案成为企业合规运营的关键。本文通过五个案例解析接入DeepSeek是否需备案:1) 微调模型需备案,流程4-6个月;2) 面向公众服务需备案;3) 内部使用通常无需备案;4) 个人自用无需备案;5) 面向特定专业人士通常无需备案。了解这些要求,确保企业在享受AI红利的同时合规运营,规避风险。
|
11月前
|
Python
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
本文提供了一份详细的PySide6与VSCode联动的操作指南,包括安装配置VSCode、安装必要的扩展、配置扩展以及编辑和运行PySide6项目。文中还提到了相关工具如uic.exe、rcc.exe和designer.exe的用途,并提供了进一步学习的资源。
1591 1
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
|
传感器 编解码 IDE
STM32CubeMX ADC采集光照和电压
STM32CubeMX ADC采集光照和电压
1253 3
|
搜索推荐
报错信息 "busy p..."
报错信息 "busy p..."
1338 1