Nodemcu-เลี้ยงไก่-ปลูกผักกินเอง(ตอน3)

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 ถ้าใครมีโค้ด แชร์หน่อยครับ