ESP8266上如何同时使用ESP-NOW 和WiFi。-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1321|回复: 8

ESP8266上如何同时使用ESP-NOW 和WiFi。

[复制链接]
发表于 2022-4-16 13:01 | 显示全部楼层 |阅读模式
如题  WiFi.mode(WIFI_STA);  WiFi.disconnect();
  // Init ESP-NOW
  if (esp_now_init() != 0)//初始化espnow
  {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  else
  {
    Serial.println("esp_now init success");
  }

WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

如何同时使用?单用ESP-NOW没问题,两种合起来用就收不到ESP-NOW信号了。有人在ESP8266上使用过吗?



发表于 2022-4-17 13:43 来自手机 | 显示全部楼层
我是一个变量存在eeprom,,,变量为0启动wifi,,,变量为1启动espnow,,,这样二选一启动
 楼主| 发表于 2022-4-18 09:05 | 显示全部楼层
找到原因了, WiFi.disconnect();这句代码惹的祸!不知道网上很多ESP-NOW例程都加上这句,不用也一样使用,关键是和WiFi使用一定不能用这句。
发表于 2022-6-17 16:59 | 显示全部楼层
jiangguoxin 发表于 2022-4-18 09:05
找到原因了, WiFi.disconnect();这句代码惹的祸!不知道网上很多ESP-NOW例程都加上这句,不用也一样使用, ...

这是断开wifi连接
发表于 2022-6-17 17:08 | 显示全部楼层
谢谢楼主的解答
发表于 2022-6-19 22:17 | 显示全部楼层
为什么我的esp now无法实现通信,是因为我的库不兼容的问题吗。你们用的是什么版本的库


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

// 设置掌控板声音传感器与光线传感器引脚编号
const int soundPin = 33;
const int lightPin = 25;

// 设置数据结构体
typedef struct struct_message {
  String board_name;
  double light;
  double sound;
} struct_message;

struct_message myData;

// 接收设备的 MAC 地址
uint8_t broadcastAddress[] = {0xe8, 0x31, 0xcd, 0x32, 0x1c, 0x28};
//内置天线模块MAC e8:31:cd:32:1c:28
//外置天线模块MAC 0x78, 0x21, 0x84, 0x7C, 0x74, 0xA8
// 数据发送回调函数
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
  char macStr[18];
  Serial.print("Packet to: ");
  snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
           mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
  Serial.println(macStr);
  Serial.print("Send status: ");
  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
  Serial.println();
}

void setup() {
  Serial.begin(9600);

  // 初始化 ESP-NOW
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }

  // 设置发送数据回调函数
  esp_now_register_send_cb(OnDataSent);

  // 绑定数据接收端
  esp_now_peer_info_t peerInfo;
  memcpy(peerInfo.peer_addr, broadcastAddress, 6);
  peerInfo.channel = 0;
  peerInfo.encrypt = false;

  // 检查设备是否配对成功
  if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("Failed to add peer");
    return;
  }
}

void loop() {
  // 设置要发送的数据
  myData.board_name = "Happyboard_#1";
  myData.light = 15;//analogRead(lightPin);
  myData.sound = 78;//analogRead(soundPin);

  // 发送数据
  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(1000);
}


用的是这个例程,
https://www.arduino.cn/forum.php ... highlight=esp%2Bnow
 楼主| 发表于 2022-7-22 07:46 | 显示全部楼层
HLT253 发表于 2022-6-19 22:17
为什么我的esp now无法实现通信,是因为我的库不兼容的问题吗。你们用的是什么版本的库

WIFI_STA模式通信时 注意信道会变化,两个通信模组信道要一致才能通信。LOOP中加入信道输出语句,看是否变化或和另一模组一致。现在总算理解WiFi.disconnect();这句的意思了 相当于不搜索路由。固定信道。
发表于 2022-7-23 18:34 | 显示全部楼层
请问楼主解决了吗 我也很困扰
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:48 , Processed in 0.083765 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表