2สค65
ตอนนี้ลองเข้าเว๊บ ที่ 3
esp32-ตัวส่ง
/*
ESP-NOW Demo - Transmit
esp-now-demo-xmit.ino
Sends data to Responder
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
//esp32a
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
// Include Libraries
#include <esp_now.h>
#include <WiFi.h>
// Variables for test data
int int_value;
float float_value;
bool bool_value = true;
// MAC Address of responder - edit as required
uint8_t broadcastAddress[] = {0x58, 0xBF, 0x25, 0x9F, 0xCA, 0x1C};//ส่งไป esp32_02
// Define a data structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
} struct_message;
// Create a structured object
struct_message myData;
// Peer info
esp_now_peer_info_t peerInfo;
// Callback function called when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
void setup() {
// Set up Serial Monitor
Serial.begin(115200);
// Set ESP32 as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Initilize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register the send callback
esp_now_register_send_cb(OnDataSent);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
}
void loop() {
// Create test data
// Generate a random integer
int_value = random(1,20);
// Use integer to make a new float
float_value = 1.3 * int_value;
// Invert the boolean value
bool_value = !bool_value;
// Format structured data
strcpy(myData.a, "Welcome to the Workshop!");
myData.b = int_value;
myData.c = float_value;
myData.d = bool_value;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sending confirmed");
}
else {
Serial.println("Sending error");
}
delay(2000);
}
esp32-ตัวรับ
/*
ESP-NOW Demo - Transmit
esp-now-demo-xmit.ino
Sends data to Responder
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
//esp32a
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
/*
ESP-NOW Demo - Receive
esp-now-demo-rcv.ino
Reads data from Initiator
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
// Include Libraries
#include <esp_now.h>
#include <WiFi.h>
// Define a data structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
} struct_message;
// Create a structured object
struct_message myData;
// Callback function executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Data received: ");
Serial.println(len);
Serial.print("Character Value: ");
Serial.println(myData.a);
Serial.print("Integer Value: ");
Serial.println(myData.b);
Serial.print("Float Value: ");
Serial.println(myData.c);
Serial.print("Boolean Value: ");
Serial.println(myData.d);
Serial.println();
}
void setup() {
// Set up Serial Monitor
Serial.begin(115200);
// Set ESP32 as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Initilize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register callback function
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
}
เป็นแบบ one way
ส่งได้ครับ ลอกโค้ด 100% ยกเว้น ค่า mac address
แบบที่2 ให้esp32ตัวที่1 ส่งค่าdht22ไปesp32ตัวที่2
โค้ดตัวที่1
/*
ESP-NOW Demo - Transmit
esp-now-demo-xmit.ino
Sends data to Responder
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
//esp32a
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
// Include Libraries
#include <esp_now.h>
#include <WiFi.h>
#include <DHT.h>
#define DHT_SENSOR_PIN 2 // ESP32 pin GIOP21 connected to DHT22 sensor
#define DHT_SENSOR_TYPE DHT22
DHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);
// Variables for test data
int int_value;
float float_value;
bool bool_value = true;
// MAC Address of responder - edit as required
uint8_t broadcastAddress[] = {0x58, 0xBF, 0x25, 0x9F, 0xCA, 0x1C};//ส่งไป esp32_02
// Define a data structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
float hu;
float te;
} struct_message;
// Create a structured object
struct_message myData;
// Peer info
esp_now_peer_info_t peerInfo;
// Callback function called when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
void setup() {
dht_sensor.begin(); // initialize the DHT sensor
// Set up Serial Monitor
Serial.begin(115200);
// Set ESP32 as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Initilize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register the send callback
esp_now_register_send_cb(OnDataSent);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
}
void loop() {
float humi = dht_sensor.readHumidity();
// read temperature in Celsius
float tempC = dht_sensor.readTemperature();
delay(2000);
// Create test data
// Generate a random integer
int_value = random(1,20);
// Use integer to make a new float
float_value = 1.3 * int_value;
// Invert the boolean value
bool_value = !bool_value;
// Format structured data
strcpy(myData.a, "Welcome to the Workshop!");
myData.b = int_value;
myData.c = float_value;
myData.d = bool_value;
myData.hu = humi;
myData.te = tempC;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sending confirmed");
}
else {
Serial.println("Sending error");
}
// read humidity
}
และโค้ดตัวที่ 2
/*
ESP-NOW Demo - Transmit
esp-now-demo-xmit.ino
Sends data to Responder
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
//esp32a
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
/*
ESP-NOW Demo - Receive
esp-now-demo-rcv.ino
Reads data from Initiator
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
// Include Libraries
#include <esp_now.h>
#include <WiFi.h>
// Define a data structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
float hu;
float te;
} struct_message;
// Create a structured object
struct_message myData;
// Callback function executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Data received: ");
Serial.println(len);
Serial.print("Character Value: ");
Serial.println(myData.a);
Serial.print("Integer Value: ");
Serial.println(myData.b);
Serial.print("Float Value: ");
Serial.println(myData.c);
Serial.print("Boolean Value: ");
Serial.println(myData.d);
Serial.print("ความชื้น: ");
Serial.println(myData.hu);
Serial.print("อุณหภูมิ: ");
Serial.println(myData.te);
Serial.println();
}
void setup() {
// Set up Serial Monitor
Serial.begin(115200);
// Set ESP32 as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Initilize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register callback function
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
}
สามารถส่งได้สำเร็จ
2WAY ระหว่าง ESP32และESP32
คือแต่ละตัวจะรับและส่งได้พร้อมกัน
โค้ดตัวที่ 1
/*
ESP-NOW Demo - Transmit
esp-now-demo-xmit.ino
Sends data to Responder
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
//esp32a
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
// Include Libraries
#include <esp_now.h>
#include <WiFi.h>
#include <DHT.h>
#define DHT_SENSOR_PIN 2 // ESP32 pin GIOP21 connected to DHT22 sensor
#define DHT_SENSOR_TYPE DHT22
DHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);
// Variables for test data
int int_value;
float float_value;
bool bool_value = true;
// MAC Address of responder - edit as required
uint8_t broadcastAddress[] = {0x58, 0xBF, 0x25, 0x9F, 0xCA, 0x1C};//ส่งไป esp32_02
// Define a data structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
float hu;
float te;
} struct_message;
// Create a structured object
struct_message myData;
struct_message myData_esp02;
// Peer info
esp_now_peer_info_t peerInfo;
// Callback function called when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
// Callback function executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData_esp02, incomingData, sizeof(myData_esp02));
Serial.print("Data received: ");
Serial.println(len);
Serial.print("Character Value: ");
Serial.println(myData_esp02.a);
Serial.print("Integer Value: ");
Serial.println(myData_esp02.b);
Serial.print("Float Value: ");
Serial.println(myData_esp02.c);
Serial.print("Boolean Value: ");
Serial.println(myData_esp02.d);
Serial.print("ความชื้น: ");
Serial.println(myData_esp02.hu);
Serial.print("อุณหภูมิ: ");
Serial.println(myData_esp02.te);
Serial.println();
}
void setup() {
dht_sensor.begin(); // initialize the DHT sensor
// Set up Serial Monitor
Serial.begin(115200);
// Set ESP32 as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Initilize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register the send callback
esp_now_register_send_cb(OnDataSent);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
// Register callback function
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
float humi = dht_sensor.readHumidity();
// read temperature in Celsius
float tempC = dht_sensor.readTemperature();
delay(2000);
// Create test data
// Generate a random integer
int_value = random(1,20);
// Use integer to make a new float
float_value = 1.3 * int_value;
// Invert the boolean value
bool_value = !bool_value;
// Format structured data
strcpy(myData.a, "Welcome to the Workshop!");
myData.b = int_value;
myData.c = float_value;
myData.d = bool_value;
myData.hu = humi;
myData.te = tempC;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sending confirmed");
}
else {
Serial.println("Sending error");
}
// read humidity
}
โค้ดตัวที่2
/*
ESP-NOW Demo - Transmit
esp-now-demo-xmit.ino
Sends data to Responder
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
//esp32a
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
/*
ESP-NOW Demo - Receive
esp-now-demo-rcv.ino
Reads data from Initiator
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
// MAC Address of responder - edit as required
uint8_t broadcastAddress[] = {0x78, 0x21, 0x84, 0x7A, 0xB3, 0x88};//ส่งไป esp32_01
// Include Libraries
#include <esp_now.h>
#include <WiFi.h>
// Variables for test data
int int_value1;
float float_value1;
bool bool_value1 = true;
// Define a data structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
float hu;
float te;
} struct_message;
// Define a data structure
//typedef struct struct_message {
// char a[32];
// int b;
// float c;
// bool d;
// float hu;
// float te;
//} struct_message;
// Create a structured object
struct_message myData;
// Create a structured object
struct_message myData_esp02;
// Peer info
esp_now_peer_info_t peerInfo;
// Callback function called when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
// Callback function executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Data received: ");
Serial.println(len);
Serial.print("Character Value: ");
Serial.println(myData.a);
Serial.print("Integer Value: ");
Serial.println(myData.b);
Serial.print("Float Value: ");
Serial.println(myData.c);
Serial.print("Boolean Value: ");
Serial.println(myData.d);
Serial.print("ความชื้น: ");
Serial.println(myData.hu);
Serial.print("อุณหภูมิ: ");
Serial.println(myData.te);
Serial.println();
}
void setup() {
// Set up Serial Monitor
Serial.begin(115200);
// Set ESP32 as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Register the send callback
esp_now_register_send_cb(OnDataSent);
// Initilize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
// Register callback function
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
float humi=0 ;// = dht_sensor.readHumidity();
// read temperature in Celsius
float tempC=0;// = dht_sensor.readTemperature();
// Generate a random integer
int_value1 = random(1,20);
// Use integer to make a new float
float_value1 = 1.3 * int_value1;
// Invert the boolean value
bool_value1 = !bool_value1;
// Format structured data
strcpy(myData_esp02.a, "02ส่งจาก ESP32_");
myData_esp02.b = int_value1;
myData_esp02.c = float_value1;
myData_esp02.d = bool_value1;
myData_esp02.hu = humi;
myData_esp02.te = tempC;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData_esp02, sizeof(myData_esp02));
delay(2000);
if (result == ESP_OK) {
Serial.println("Sending confirmed");
}
else {
Serial.println("Sending error");
}
// read humidity
}
ส่งได้แล้วครับ DHTติดตัวเดียว อีกตัวไม่ได้ติด
ที่ยังทำไม่ได้ คือการส่งข้อมูลระหว่าง ESP32 กับ ESP8266 ใครทำได้บ้าง ช่วยแชร์ด้วยครับ
2สค65
เจอโค้ด ที่ สามารถส่งข้อมูลจาก ESP8266 ไปแสดง ใน ESP32 ได้แล้วครับ
โค้ด ESP8266
//https://www.survivingwithandroid.com/esp-now-esp32-esp8266/
/**
* ESP-NOW
//esp32
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
*
* Sender
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <espnow.h>
// Mac address of the slave
//uint8_t peer1[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
uint8_t peer1[] = {0x78, 0x21, 0x84, 0x7A, 0xB3, 0x88};//ส่งไป esp32_01
typedef struct message {
int red;
int green;
int blue;
};
struct message msg_from_esp8266_01;
void onSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.println("Status:");
Serial.println(sendStatus);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Get Mac Add
Serial.print("Mac Address: ");
Serial.print(WiFi.macAddress());
Serial.println("ESP-Now Sender");
// Initializing the ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Problem during ESP-NOW init");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
// Register the peer
Serial.println("Registering a peer");
esp_now_add_peer(peer1, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
Serial.println("Registering send callback function");
esp_now_register_send_cb(onSent);
}
void loop() {
msg_from_esp8266_01.red = 10;
msg_from_esp8266_01.green = 80;
msg_from_esp8266_01.blue = 180;
Serial.println("Send a new message");
esp_now_send(NULL, (uint8_t *) &msg_from_esp8266_01, sizeof(msg_from_esp8266_01));
delay(60000);
}
โค้ดฝั่ง ESP32
/*
ESP-NOW Demo - Transmit
esp-now-demo-xmit.ino
Sends data to Responder
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
//esp32a
//ผลที่ได้คือ01= 78:21:84:7A:B3:88
// 02= 58:BF:25:9F:CA:1C
//ESP8266_01)ตัวนี้คือ=C8:C9:A3:64:9E:2B
// Include Libraries
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
typedef struct message {
float temperature;
float humidity;
};
struct message myMessage;
void onDataReceiver(const uint8_t * mac, const uint8_t *incomingData, int len) {
Serial.println("Message received.");
// We don't use mac to verify the sender
// Let us transform the incomingData into our message structure
memcpy(&myMessage, incomingData, sizeof(myMessage));
Serial.println("=== Data ===");
Serial.print("Mac address: ");
for (int i = 0; i < 6; i++) {
Serial.print("0x");
Serial.print(mac[i], HEX);
Serial.print(":");
}
Serial.print("\n\nTemperature: ");
Serial.println(myMessage.temperature);
Serial.print("\nHumidity: ");
Serial.println(myMessage.humidity);
Serial.println();
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Get Mac Add
Serial.print("Mac Address: ");
Serial.print(WiFi.macAddress());
Serial.println("ESP32 ESP-Now Broadcast");
// Initializing the ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Problem during ESP-NOW init");
return;
}
esp_now_register_recv_cb(onDataReceiver);
}
void loop() {
// put your main code here, to run repeatedly:
}
****
ยังขาด แบบเดียว คือ จาก ESP32 ส่งไปยัง ESP8266 ถ้าใครมีโค้ด แชร์หน่อยครับ