一、ESP-NOW介绍

乐鑫官网:

(写完上传第一遍报错,不知道这个地方是不是广告,没有打广告)

乐鑫官网提供 Wi-Fi、蓝牙芯片和 AIoT 解决方案 I 乐鑫科技 (espressif.com.cn)https://www.espressif.com.cn/zh-hans/

ESP-NOW 是由乐鑫开发的无线通信协议,可以使多个设备在没有或不使用 Wi-Fi 的情况下进行通信。当设备配对后,设备之间的连接是持续的、点对点的,并且不需要握手协议。ESP-NOW作为短数据传输、无连接的快速通信技术,当某一设备突然断电之后,通电重启,会自动连接到对应节点中,实现快速通信。

ESP-NOW特性如下:

  • 单播包加密或单播包不加密通信;
  • 加密配对设备和非加密配对设备混合使用;
  • 可携带最长为 250 字节的有效 payload 数据;
  • 支持设置发送回调函数以通知应用层帧发送失败或成功。

ESP-NOW目前的局限性:

  • 暂时不支持广播包;
  • 加密配对设备有限制,Station 模式下最多支持10 个加密配对设备;SoftAP 或 SoftAP + Station 混合模式下最多支持 6 个加密配对设备。非加密配对设备支持若干,与加密设备总数和不超过 20 个;
  • 有效 payload 限制为 250 字节。

ESP-NOW通信方式:一对一通信、一对多单向通信、多对一单向通信、双向通信。

参考网站:Getting Started with ESP-NOW (ESP32 with Arduino IDE) | Random Nerd Tutorials

作为点对点通信的ESP-NOW,在发送数据的时候必须指定接收设备,在网络通信中,初步了解设备间可以依靠IP地址和端口号作为身份证进行通信。MAC地址就是ESP-NOW通信的身份证,模块的MAC地址是唯一的,依此进行通信。

二、一对一单向通信

单向通信是通信的一方接收数据,另一方发送数据。示意图如上图所示。

2、1    获取模块的MAC地址

打开VScode,安装PlatformIO。相比于之前使用的编译器arduino,PlatformIO更加智能。

新建工程

选择对应开发板,文件保存位置,点击新建。第一次添加开发板时间会很长,很慢,请耐心等待,当然,网要快一点最好。

建立工程完成后,文件夹如下:

设置波特率,最好先添加波特率设置,不然在程序里设置了,串口还是乱码。

找到platformio.ini文件,添加一句

monitor_speed=115200   波特率设置为115200

这时我们打开 main.cpp文件,添加程序如下获取MAC地址

#include <Arduino.h>
#include <ESP8266WiFi.h>void setup(){Serial.begin(115200);WiFi.mode(WIFI_MODE_STA);Serial.println("hello");//加打印hello原因是模块刚上电有点乱码Serial.println(WiFi.macAddress());
}void loop(){}

点击对钩编译,运行程序。

将程序上传,查看MAC地址 如下

接收方模块MAC地址:

30:83:98:B1:D1:93     由于我们做的是单向通信,只需一个Mac地址

2、2   程序

我加了一个小灯,便于观察发送消息状况。

发送端依次发送让接收方亮红、黄、绿灯消息,在让其一起灭灯。

发送方程序

#include <ESP8266WiFi.h>
#include <espnow.h>
//对方MAC地址
uint8_t broadcastAddress[] = {0x30, 0x83, 0x98, 0xB1, 0xD1, 0x93};typedef struct struct_message {int a;String d;
} struct_message;//创建一个新的类型变量
struct_message myData;
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {Serial.print("Last Packet Send Status: ");//将消息是否发送成功打印出来if (sendStatus == 0) {Serial.println("Delivery success");}else {Serial.println("Delivery fail");}
}void setup() {//初始化串行监视器以进行调试Serial.begin(115200);//将设备设置为Wi-Fi站点WiFi.mode(WIFI_STA);//立即初始化ESPif (esp_now_init() != 0) {Serial.println("Error initializing ESP-NOW");return;}esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);//先前创建的功能。esp_now_register_send_cb(OnDataSent);//与另一个ESP-NOW设备配对以发送数据esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}void loop() {//配置要发送的值myData.a = 4;//发送消息esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));//延时两秒delay(3000);myData.a = 5;//发送消息esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));//延时两秒delay(3000);myData.a = 2;//发送消息esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));//延时两秒delay(3000);myData.a = 0;esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));delay(2000);
}

接收方程序

#include <ESP8266WiFi.h>
#include <espnow.h>int r = 4;
int g = 5;
int y = 2;
typedef struct struct_message {int a;String d;
} struct_message;//创建结构体变量
struct_message myData;//创建一个回调函数作为接收数据后的串口显示
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {memcpy(&myData, incomingData, sizeof(myData));Serial.print("String: ");Serial.println(myData.d);Serial.println(myData.a);//接收数据亮灯关灯if(myData.a ==0){Serial.println("122");digitalWrite(4, 0);digitalWrite(5, 0);digitalWrite(2, 0);}if(myData.a != NULL){digitalWrite(myData.a, 1);delay(2000);}}
void setup() {//初始化窗口Serial.begin(115200);pinMode(4, OUTPUT);pinMode(5, OUTPUT);pinMode(2, OUTPUT);//设置ESP8266模式WiFi.mode(WIFI_STA);//初始化 ESP-NOWif (esp_now_init() != 0) {Serial.println("Error initializing ESP-NOW");return;}//设置ESP8266角色:esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);//先前创建的功能 测试ESP-NOW通信esp_now_register_recv_cb(OnDataRecv);
}void loop() {}

实验现象:

1、断电重启自动连接,在视频结尾我有测试。

2、发送方通过MAC给接收方发消息,消息收发稳定。

esp8266 ESP-NOW通信测试视频

完整工程下载:(使用arduino编译或者复制代码vscode编译也可)

qq-hh/my_project_esp8266 (github.com)

ESP-NOW组网(esp8266)相关推荐

  1. esp虚拟服务器,esp8266接入云服务器

    esp8266接入云服务器 内容精选 换一换 公有云平台提供的云监控,可以对云耀云服务器的运行状态进行日常监控.您可以通过管理控制台,直观地查看云耀云服务器的各项监控指标.云耀云服务器正常运行.关机. ...

  2. 【ESP系列】ESP8266的AT固件烧录

    前言   这几天突然想用ESP01的AT指令玩玩,但是那模块突然坏了.只能利用手头上的ESP8266-12F模块,来使用AT指令,因为是第一次用ESP8266-12F的AT指令,不知道它的AT指令固件 ...

  3. 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统

    简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习.特别是对于基于ESP8266的特殊的一些外设的测试. 关键词: ESP8266,MicroPyth ...

  4. esp8266介绍和使用

    ESP8266的简介 Wifi协议内容网络结构相对zigbee来说并不复杂,下面结合具体芯片来对wifi的组网模式及步骤进行解释: 硬件结构及功能 ESP8266 尺寸为5x5 mm,ESP8266 ...

  5. 基于RK3399ESP8285自动售货柜项目—ESP8266(8285)程序编写与烧录

    基于RK3399&ESP8285自动售货柜项目-ESP8266(8285)程序编写与烧录 本系列文章讲详细讲解该基于RK3399及ESP8285自动售货柜的完整实现方法,从硬件连接到网络通信再 ...

  6. arduino安装esp8266库

    给arduino安装esp8266库 开发板的一个好处就是板子设计者已经给初学者排查了硬件连接错误,可以使初学者专注于软件开发,加快学习进度.目前比较火的一款ESP8266开发板就是NodeMcu,其 ...

  7. 十、stm32-ESP8266(串口透传、MCU透传、控制LED亮灭)

    目录 一.固件库模板 二.准备资料 三.简介 1. 引脚 2. 无线组网 2.1 ESP8266 在 SoftAP 模式 2.2 ESP8266 在 station 模式 2.3 ESP8266 在 ...

  8. MicroPython_ESP8266_IoT——第四回 初入联网(接入了贝壳物联)

    第四回 初入联网(接入了贝壳物联) 本来计划先把所有的硬件介绍完,再介绍如何介入贝壳物联的.但是那样就比较枯燥,还是先尝试接入贝壳物联,来增加ESP8266模块的可玩性. 需要了解[贝壳物联平台通信协 ...

  9. 【从0到1搭建LoRa物联网】13、低成本单通道网关(一)

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  10. 深入了解ESP8266WIFI模块的工作原理及特点---AT指令详解---透传概念----TCP和UDP的特点与区别-嵌入式软件面试常问

    ESP8266-AT指令--透传--TCP-UDP 我们来先认识一下ESP8266模块: 模块实物图 资源介绍 原理图 功能介绍 无线组网 SoftAP: Station: SoftAP + stat ...

最新文章

  1. Python logging 模块
  2. 关于ie,火狐,谷歌浏览器滚动条的隐藏以及自定义样式
  3. php new redis错误,解决PHP Redis扩展无法加载的问题(zend_new_interned_string in Unknown on line 0)...
  4. python 操作fit文件图像
  5. 检验xpath的小妙招
  6. python3.7.4-Centos7升级Python3.7.4
  7. RocketMQ(十一)——消费的幂等性
  8. 掌趣科技:游戏《一拳超人:最强之男》累计收入近5亿元
  9. 姐弟恋的人最后都是什么结局?
  10. 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
  11. linux 进程间通信机制(IPC机制)一消息队列
  12. 软件的开发模型之瀑布型和快速原型
  13. 多功能科学计算机.,科学计算器多功能版
  14. SecKill学习初步框架时报错记录
  15. 一次性餐具 disposable dishware
  16. 哪款软件可以测试刘海,什么脸型适合什么刘海 5款自测你适合哪种
  17. Mysql安装后打开MySQL Command Line Client闪退处理办法,亲测有效
  18. python中geometry用法_pythongdal教程之:几何形状geometry与投影projection
  19. 国内主流平台QMT和Ptrade哪个软件更好用?应该怎么选择?
  20. python五子棋单机版源代码_Python基于pygame实现单机版五子棋对战

热门文章

  1. 反戈一击-流氓软件之父的嬗变之谜
  2. Java泛型概念及作用
  3. c语言小游戏 三子棋,C语言实现简单的三子棋小游戏
  4. Python 生成器 思维导图
  5. 销售客户拜访时要获取客户的哪些信息
  6. Java中父类引用指向子类对象好处
  7. 【树莓派】搭建LAMP(Linux Apache Mysql PHP)服务器
  8. 企业如何理性看待移动CRM?
  9. 万物互联潮流下 英特尔的转型
  10. python散点图怎么显示点的值_Python散点图如何查看每个点的条目数