ESP8266 ESP-NOW 多设备通信:单片代码兼容收发数据
#include <espnow.h> #include <WiFi.h>
#define LED_PIN 2 // 用于测试的LED引脚
uint8_t macAddress[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 存储自己的mac地址 uint8_t destAddress[] = {0x84, 0xCC, 0xA8, 0x84, 0x20, 0x58}; // 目标设备的mac地址
void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(115200); WiFi.mode(WIFI_STA); esp_now_init(); esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER); esp_now_add_peer(destAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0); memcpy(macAddress, WiFi.macAddress().toByteArray(), 6); // 获取自己的mac地址 }
void loop() { int sensorValue = analogRead(A0); // 读取A0口的数据 uint8_t data[2]; data[0] = (uint8_t) (sensorValue >> 8); // 将数据拆分成两个字节 data[1] = (uint8_t) (sensorValue & 0xFF); esp_now_send(destAddress, data, sizeof(data)); // 发送数据给目标设备
delay(1000);
// 接收来自1设备的数据 uint8_t receivedData[2]; uint8_t senderAddress[6]; int packetSize = esp_now_recv(senderAddress, receivedData, sizeof(receivedData), 100); if (packetSize == sizeof(receivedData) && memcmp(senderAddress, destAddress, 6) == 0) { int value = (receivedData[0] << 8) + receivedData[1]; // 将数据合并成一个整数 Serial.print('Received data from device 1: '); Serial.println(value); } }
#include <espnow.h> #include <WiFi.h>
#define LED_PIN 2 // 用于测试的LED引脚
uint8_t macAddress[] = {0x84, 0xCC, 0xA8, 0x84, 0x20, 0x58}; // 存储自己的mac地址 uint8_t destAddresses[][6] = { {0xC8, 0xC9, 0xA3, 0xB9, 0x16, 0xE7}, // 设备2的mac地址 {0x48, 0xE7, 0x29, 0x48, 0xC9, 0xB3}, // 设备3的mac地址 {0x8C, 0xAA, 0xB5, 0x7B, 0x88, 0xA0} // 设备4的mac地址 };
void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(115200); WiFi.mode(WIFI_STA); esp_now_init(); esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); esp_now_register_recv_cb(onDataReceived); for (int i = 0; i < 3; i++) { esp_now_add_peer(destAddresses[i], ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0); } }
void loop() { int sensorValue = analogRead(A0); // 读取A0口的数据 uint8_t data[2]; data[0] = (uint8_t) (sensorValue >> 8); // 将数据拆分成两个字节 data[1] = (uint8_t) (sensorValue & 0xFF); for (int i = 0; i < 3; i++) { esp_now_send(destAddresses[i], data, sizeof(data)); // 发送数据给设备2,3,4 } delay(1000); }
void onDataReceived(uint8_t *senderAddress, uint8_t *data, uint8_t dataLength) { if (dataLength == 2) { int value = (data[0] << 8) + data[1]; // 将数据合并成一个整数 Serial.print('Received data from device '); for (int i = 0; i < 6; i++) { Serial.print(senderAddress[i], HEX); // 打印发送者的mac地址 } Serial.print(': '); Serial.println(value); }
原文地址: http://www.cveoy.top/t/topic/lUF0 著作权归作者所有。请勿转载和采集!