30กค65
How to connect ESP32 and ESP8266 using ESP-Now protocol
จะลองแบบนี้ดู
มีใครมีความเห็นข่วยเล่าให้ฟังบ้าง
31กค65
ผมได้ลองโค้ดแรก จากที่นี่
//ตัวส่ง ESP32
#include <esp_now.h>
#include <WiFi.h>
// แก้ไขค่า mac ตัวที่ต้องการส่งไปหา
uint8_t broadcastAddress[] = {0xEC, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz};//ส่งไปหาเฉพาะ mac address
//uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//ส่งไปหาทุกตัว
typedef struct struct_message { // สร้างตัวแปรแพ็จเกจแบบ struct
char a[32];
int b;
float c;
bool d;
} struct_message;
struct_message myData; // ตัวแปรแพ็คเกจที่ต้องการส่ง
//เมื่อส่งข้อมูลมาทำฟังก์ชั่นนี้
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() {
Serial.begin(115200);
//ตั้งเป็นโหมด Wi-Fi Station
WiFi.mode(WIFI_STA);
// สั่งให้เริ่ม ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
//เมื่อส่งให้ทำฟังก์ชั่น OnDataSend ที่เราสร้างขึ้น
esp_now_register_send_cb(OnDataSent);
// Register peer
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() {
// สร้างตัวแปรแพ็คเกจที่ต้องการส่ง
strcpy(myData.a, "THIS IS A CHAR");
myData.b = random(1, 20);
myData.c = 1.2;
myData.d = false;
// สั่งให้ส่งข้อมูล
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(2000);
}
ผมลอง verify ผ่านครับ
เริ่มต้นไม่ถูกเลยครับ…555 ดูจากที่นี่ ทีละข้อแล้วกัน
รูปตัวอย่างเพิ่อผมจะได้เข้าใจ
1.ใส่board managerของ esp8266 ลงใน arduino ide
2.ใส่ library DHT
3.ใส่ library Adafruit Unified Sensor
4.ผมเอา esp32 และ nodemcu เสียบสาย usb เข้าโน้ตบุต ตัวเดียวกัน
5.ดูใน device manager จะเห็น esp32->com3,nodemcu->com4
6.หา MAC address ของ ESP32
-เปิด new sketch ตั้งชื่อว่า 014_MAC_ADDRESS_01 (01คือ บอร์ดesp หมายเลข 1)
/*
* This sketch demonstrates how to scan WiFi networks.
* The API is almost the same as with the WiFi Shield library,
* the most obvious difference being the different file you need to include:
*/
#include "WiFi.h"
void setup()
{
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop()
{
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
Serial.print("macAddress=");
Serial.println(WiFi.macAddress());
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
-เลือก board nodemcu32s,port com3
-upload
-ได้แล้วครับ สำหรับ esp32
7.หา MAC address ของ ESP8266
ทำsketch ใหม่ เลือกบอร์ด nodemcu8266และcom4
code
#include <ESP8266WiFi.h>
void setup(){
Serial.begin(9600);
WiFi.mode(WIFI_STA);
}
void loop(){
Serial.print("macAddress=");
Serial.println(WiFi.macAddress());
}
ดูในserial monitor
ได้แล้วครับ
8.ฝั่ง nodemcu
ต่อ DHT 11 เข้า D2
เขียนโค้ด ดังนี้
`// macAddressของตัวนี้คือ=C8:C9:A3:zz:zz:zz
//macAddressของคู่ที่จะต่อด้วยเป็นesp32คือ 78:21:nn:nn:nn:nn
#include <ESP8266WiFi.h>
#include <espnow.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// REPLACE WITH THE MAC Address of your receiver
uint8_t broadcastAddress[] = {0x78, 0x21, 0xnn, 0xnn, 0xxx, 0xnn};//ของ ESP32
// Digital pin connected to the DHT sensor
#define DHTPIN D2
// Digital pin connected to the DHT sensor
#define DHTPIN D2
// Uncomment the type of sensor in use:
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
// Define variables to store DHT readings to be sent
float temperature;
float humidity;
// Define variables to store incoming readings
float incomingTemp;
float incomingHum;
// Updates DHT readings every 10 seconds
const long interval = 10000;
unsigned long previousMillis = 0; // will store last time DHT was updated
// Variable to store if sending data was successful
String success;
//Structure example to send data
//Must match the receiver structure
typedef struct struct_message {
float temp;
float hum;
} struct_message;
// Create a struct_message called DHTReadings to hold sensor readings
struct_message DHTReadings;
// Create a struct_message to hold incoming sensor readings
struct_message incomingReadings;
// Callback when data is sent
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");
}
}
// Callback when data is received
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings));
Serial.print("Bytes received: ");
Serial.println(len);
incomingTemp = incomingReadings.temp;
incomingHum = incomingReadings.hum;
}
void getReadings(){
Serial.println("ผลที่อ่านได้จาก NODEMCU 8266");
// Read Temperature
temperature = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
//float t = dht.readTemperature(true);
if (isnan(temperature)){
Serial.println("มีข้อผิดพลาด");
temperature = 0.0;
}
else
{
Serial.print("temperature=");
Serial.println(temperature);
}
humidity = dht.readHumidity();
if (isnan(humidity)){
Serial.println("มีข้อผิดพลาด");
humidity = 0.0;
}
else
{
Serial.print("humidity=");
Serial.println(humidity);
}
}
void printIncomingReadings(){
// Display Readings in Serial Monitor
Serial.println("รับจาก ESP32 ");
Serial.print("Temperature: ");
Serial.print(incomingTemp);
Serial.println(" ºC");
Serial.print("Humidity: ");
Serial.print(incomingHum);
Serial.println(" %");
}
void setup() {
// Init Serial Monitor
Serial.begin(9600);
// Init DHT sensor
dht.begin();
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
WiFi.disconnect();
// Init ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
Serial.print("macAddress=");
Serial.println(WiFi.macAddress());
// Set ESP-NOW Role
esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
// Once ESPNow is successfully Init, we will register for Send CB to
// get the status of Trasnmitted packet
esp_now_register_send_cb(OnDataSent);
// Register peer
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// Register for a callback function that will be called when data is received
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you updated the DHT values
previousMillis = currentMillis;
//Get DHT readings
getReadings();
//Set values to send
DHTReadings.temp = temperature;
DHTReadings.hum = humidity;
// Send message via ESP-NOW
esp_now_send(broadcastAddress, (uint8_t *) &DHTReadings, sizeof(DHTReadings));
// Print incoming readings
printIncomingReadings();
}
ผลฝั่งเดียวที่ออกคือ nodemcu8266
1สค65
วันนี้ได้ทำฝั่ง ESP32 ซึ่งต่อกับ DHT22 ผมได้แนวทางจากที่นี่
โค้ด
//#include <esp_now.h>
//#include <WiFi.h>
//#include <Wire.h>
//#include <Adafruit_Sensor.h>
//#include <Adafruit_BME280.h>
///o
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <esp_now.h>
#include <WiFi.h>
float humidity ;
float temperature;
///-o
//#include <Adafruit_GFX.h>
//#include <Adafruit_SSD1306.h>
//#define SCREEN_WIDTH 128 // OLED display width, in pixels
//#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//Adafruit_BME280 bme;
// REPLACE WITH THE MAC Address of your receiver
//uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
///o
uint8_t broadcastAddress[] = {0xC8, 0xC9, 0x84, 0xzz, 0xzz, 0xzz};
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
///-o
// Define variables to store BME280 readings to be sent
//float temperature;
//float humidity;
//float pressure;
// Define variables to store incoming readings
//float incomingTemp;
//float incomingHum;
//float incomingPres;
///o
float incomingTemperature;
float incomingHumidity;
///-o
// Variable to store if sending data was successful
//String success;
///o
const long interval = 10000;
unsigned long previousMillis = 0; // will store last time DHT was updated
// Variable to store if sending data was successful
String success;
///-o
//Structure example to send data
//Must match the receiver structure
//typedef struct struct_message {
// float temp;
// float hum;
// float pres;
//} struct_message;
///o
typedef struct struct_message {
float temp;
float hum;
} struct_message;
///-o
// Create a struct_message called BME280Readings to hold sensor readings
//struct_message BME280Readings;
///o
struct_message DHTReadings;
///-o
// Create a struct_message to hold incoming sensor readings
struct_message incomingReadings;
esp_now_peer_info_t peerInfo;
// Callback 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");
if (status ==0){
success = "Delivery Success :)";
}
else{
success = "Delivery Fail :(";
}
}
///o
//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");
//}
///-o
// Callback when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings));
Serial.print("Bytes received: ");
Serial.println(len);
incomingTemperature = incomingReadings.temp;
incomingHumidity = incomingReadings.hum;
// incomingPres = incomingReadings.pres;
}
void setup() {
// Init Serial Monitor
// Serial.begin(115200);
// Set device as a Wi-Fi Station
// WiFi.mode(WIFI_STA);
///o
Serial.begin(9600);
//ตั้งเป็นโหมด Wi-Fi Station
WiFi.mode(WIFI_STA);
///-o
// Init ESP-NOW
// if (esp_now_init() != ESP_OK) {
// Serial.println("Error initializing ESP-NOW");
// return;
// }
///o
// สั่งให้เริ่ม ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
///-o
// Once ESPNow is successfully Init, we will register for Send CB to
// get the status of Trasnmitted packet
// esp_now_register_send_cb(OnDataSent);
///o
//เมื่อส่งให้ทำฟังก์ชั่น OnDataSend ที่เราสร้างขึ้น
esp_now_register_send_cb(OnDataSent);
///-o
// Register peer
// memcpy(peerInfo.peer_addr, broadcastAddress, 6);
// peerInfo.channel = 0;
// peerInfo.encrypt = false;
///o
// Register peer
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
///-o
// Add peer
// if (esp_now_add_peer(&peerInfo) != ESP_OK){
// Serial.println("Failed to add peer");
// return;
// }
///o
// เชื่อมต่ออุปกรณ์ที่ต้องการสื่อสาร
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
///-o
// Register for a callback function that will be called when data is received
esp_now_register_recv_cb(OnDataRecv);
///o
Serial.println(F("DHTxx test!"));
dht.begin();
///-o
}
void loop() {
// getReadings();
///o
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you updated the DHT values
previousMillis = currentMillis;
//Get DHT readings
getReadings();
///-o
// Set values to send
// BME280Readings.temp = temperature;
// BME280Readings.hum = humidity;
// BME280Readings.pres = pressure;
///o
//Set values to send
DHTReadings.temp = temperature;
DHTReadings.hum = humidity;
///-o
// Send message via ESP-NOW
// esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &BME280Readings, sizeof(BME280Readings));
///o
// สั่งให้ส่งข้อมูล
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &DHTReadings, sizeof(DHTReadings));;
///-o
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
// updateDisplay();
printIncomingReadings();
delay(10000);
}
///o
// if (result == ESP_OK) {
// Serial.println("Sent with success");
// }
// else {
// Serial.println("Error sending the data");
// }
// delay(2000);
//}
// Print incoming readings
// printIncomingReadings();
// }
///-o
}
//void getReadings(){
// temperature = bme.readTemperature();
// humidity = bme.readHumidity();
// pressure = (bme.readPressure() / 100.0F);
//}
///o
void getReadings()
{
Serial.println("ผลที่อ่านได้จากESP32");
delay(2000);
// Read Temperature
temperature = dht.readTemperature();
delay(2000);
// Read temperature as Fahrenheit (isFahrenheit = true)
//float t = dht.readTemperature(true);
if (isnan(temperature)){
Serial.println("มีข้อผิดพลาด");
temperature = 0.0;
}
else
{
Serial.print("temperature=");
Serial.println(temperature);
}
humidity = dht.readHumidity();
delay(2000);
if (isnan(humidity)){
Serial.println("มีข้อผิดพลาด");
humidity = 0.0;
}
else
{
Serial.print("humidity=");
Serial.println(humidity);
}
}
///-o
//void updateDisplay(){
// Display Readings in Serial Monitor
// Serial.println("INCOMING READINGS");
// Serial.print("Temperature: ");
// Serial.print(incomingReadings.temp);
// Serial.println(" ºC");
// Serial.print("Humidity: ");
// Serial.print(incomingReadings.hum);
// Serial.println(" %");
// Serial.print("Pressure: ");
// Serial.print(incomingReadings.pres);
// Serial.println(" hPa");
// Serial.println();
//}
///o
void printIncomingReadings(){
// Display Readings in Serial Monitor
Serial.println("รับจาก NodeMCU8266 ");
Serial.print("Temperature: ");
Serial.print(incomingTemperature);
Serial.println(" ºC");
Serial.print("Humidity: ");
Serial.print(incomingHumidity);
Serial.println(" %");
}
///-o
สำเร็จครึ่งหนึ่งครับ 555
2สค65
แต่ละฝั่งทำงานได้ แต่ยังไม่สามารถรับข้อมูลของอีกฝั่งได้ เดี่ยวเริ่มใหม่ เอาตามเว๊บ1นี้ ก่อนนะครับ
จุดนี้ผมไม่รู้มาก่อน ว่าโค้ดมีความแตกต่างกันระหว่าง esp32 และ esp8266
-1.
ESP32
include libarary
#include <esp_now.h>
#include <WiFi.h>
(ESP8266)
#include <espnow.h>
#include <ESP8266WiFi.h>
2.
ESP32
esp_now_init() != ESP_OK
(ESP8266)
esp_now_init() != 0
3.ฟังก์ชั่น OnDataRecv
ESP32
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len)
(ESP8266)
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)
4 ฟังก์ชั่น OnDataSend
ESP32
void OnDataSent(uint8_t *mac_addr, esp_now_send_status_t status)
ESP8266
void OnDataSent(uint8_t *mac_addr, uint8_t status
5
ESP32
status == ESP_NOW_SEND_SUCCESS
ESP8266
sendStatus == 0
6
Register peer
ESP32
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
ESP8266
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
หลังแก้เสร็จ2 ฝั่ง เวลาจะ verify ให้ตรวจสอบก่อนว่า ในหัวข้อ tool ต้องให้ตรงกับชนิดของboard ด้วย มิฉะนั้นจะมี error
หลังจากแกะโค้ด แล้วมายำเป็นของผมอีกที
โค้ดนี้ สำหรับ ESP32 ที่ติดกับ DHT22 ซึ่งทำหน้าที่รับและส่ง จาก esp8266
#include <Adafruit_Sensor.h>
#include <DHT.h>
//(ESP32)
#include <esp_now.h>
#include <WiFi.h>
// (ESP8266)
//#include <espnow.h>
//#include <ESP8266WiFi.h>
float humidity ;
float temperature;
uint8_t broadcastAddress[] = {0xC8, 0xC9, 0x84, 0xA3, 0x64, 0x2B};
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
float incomingTemperature;
float incomingHumidity;
const long interval = 10000;
unsigned long previousMillis = 0; // will store last time DHT was updated
// Variable to store if sending data was successful
String success;
typedef struct struct_message {
float temp;
float hum;
} struct_message;
struct_message DHTReadings;
struct_message incomingReadings;
esp_now_peer_info_t peerInfo;
// Callback when data is sent
//4 ฟังก์ชั่น OnDataSend
//ESP8266
//void OnDataSent(uint8_t *mac_addr, uint8_t status
//ESP32
void OnDataSent(uint8_t *mac_addr, esp_now_send_status_t status)
{
Serial.print("Last Packet Send Status: ");
// 5
//ESP8266
//sendStatus == 0
//ESP32
if (status == ESP_NOW_SEND_SUCCESS){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
// Callback when data is received
//(ESP8266)
//void OnDataRecv(uint8_t * mac, uint8_t *incomingData, **uint8_t** len)
//(ESP32)
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings));
Serial.print("Bytes received: ");
Serial.println(len);
incomingTemperature = incomingReadings.temp;
incomingHumidity = incomingReadings.hum;
}
void setup() {
Serial.begin(9600);
//ตั้งเป็นโหมด Wi-Fi Station
WiFi.mode(WIFI_STA);
Serial.print("macAddress=");
Serial.println(WiFi.macAddress());
// สั่งให้เริ่ม ESP-NOW
// (ESP8266)[/u]
//esp_now_init() != 0
//(ESP32)
//esp_now_init() != ESP_OK
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Set ESP-NOW Role
// esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
// Once ESPNow is successfully Init, we will register for Send CB to
// get the status of Trasnmitted packet
esp_now_register_send_cb(OnDataSent);
// Register peer
//6
//Register peer
//ESP8266
// esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
// esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
//ESP32
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Register for a callback function that will be called when data is received
esp_now_register_recv_cb(OnDataRecv);
///-d
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you updated the DHT values
previousMillis = currentMillis;
//Get DHT readings
getReadings();
//Set values to send
DHTReadings.temp = temperature;
DHTReadings.hum = humidity;
// สั่งให้ส่งข้อมูล
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &DHTReadings, sizeof(DHTReadings));;
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
printIncomingReadings();
delay(10000);
}
}
void getReadings()
{
Serial.println("ผลที่อ่านได้จากESP32");
delay(2000);
// Read Temperature
temperature = dht.readTemperature();
delay(2000);
// Read temperature as Fahrenheit (isFahrenheit = true)
//float t = dht.readTemperature(true);
if (isnan(temperature)){
Serial.println("มีข้อผิดพลาด");
temperature = 0.0;
}
else
{
Serial.print("temperature=");
Serial.println(temperature);
}
humidity = dht.readHumidity();
delay(2000);
if (isnan(humidity)){
Serial.println("มีข้อผิดพลาด");
humidity = 0.0;
}
else
{
Serial.print("humidity=");
Serial.println(humidity);
}
}
void printIncomingReadings(){
// Display Readings in Serial Monitor
Serial.println("รับจาก NodeMCU8266 ");
Serial.print("Temperature: ");
Serial.print(incomingTemperature);
Serial.println(" ºC");
Serial.print("Humidity: ");
Serial.print(incomingHumidity);
Serial.println(" %");
}
ปรากฎมี error ว่า
Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: "NodeMCU-32S, 80MHz, 921600, None"
C:\abee_esp32\020_esp_now_MAC_ADDRESS_01_esp32\020_esp_now_MAC_ADDRESS_01_esp32.ino: In function 'void setup()':
020_esp_now_MAC_ADDRESS_01_esp32:87:28: error: invalid conversion from 'void (*)(uint8_t*, esp_now_send_status_t)' {aka 'void (*)(unsigned char*, esp_now_send_status_t)'} to 'esp_now_send_cb_t' {aka 'void (*)(const unsigned char*, esp_now_send_status_t)'} [-fpermissive]
esp_now_register_send_cb(OnDataSent);
^~~~~~~~~~
In file included from C:\abee_esp32\020_esp_now_MAC_ADDRESS_01_esp32\020_esp_now_MAC_ADDRESS_01_esp32.ino:4:
C:\Users\NECgen4UEFI\Documents\ArduinoData\packages\esp32\hardware\esp32\2.0.4/tools/sdk/esp32/include/esp_wifi/include/esp_now.h:165:54: note: initializing argument 1 of 'esp_err_t esp_now_register_send_cb(esp_now_send_cb_t)'
esp_err_t esp_now_register_send_cb(esp_now_send_cb_t cb);
~~~~~~~~~~~~~~~~~~^~
Multiple libraries were found for "Adafruit_Sensor.h"
Used: C:\Users\NECgen4UEFI\Documents\Arduino\libraries\Adafruit_Sensor-master
Not used: C:\Users\NECgen4UEFI\Documents\Arduino\libraries\Adafruit_Unified_Sensor
Multiple libraries were found for "WiFi.h"
Used: C:\Users\NECgen4UEFI\Documents\ArduinoData\packages\esp32\hardware\esp32\2.0.4\libraries\WiFi
Not used: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\libraries\WiFi
exit status 1
invalid conversion from 'void (*)(uint8_t*, esp_now_send_status_t)' {aka 'void (*)(unsigned char*, esp_now_send_status_t)'} to 'esp_now_send_cb_t' {aka 'void (*)(const unsigned char*, esp_now_send_status_t)'} [-fpermissive]
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.