Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save cyrusmeh/de541609d90fcf5271198ce16eb5f8ba to your computer and use it in GitHub Desktop.

Select an option

Save cyrusmeh/de541609d90fcf5271198ce16eb5f8ba to your computer and use it in GitHub Desktop.
#include <Wire.h>
#include <TM1637Display.h>
#include <Keypad.h>
#include <esp_now.h>
#include <WiFi.h>
// TM1637 Setup
#define CLK 4
#define DIO 5
TM1637Display tm1637(CLK, DIO);
// Keypad Setup
const byte ROW_NUM = 4;
const byte COLUMN_NUM = 3;
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROW_NUM] = {13, 12, 14, 27};
byte pin_column[COLUMN_NUM] = {26, 25, 33};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
// ESPNOW Setup
typedef struct struct_message {
int number;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo1, peerInfo2;
///////////////////////////
// Variables for Input Handling
String input = ""; // Stores keypad input
//////////////////////////
// Setup Wi-Fi
void setup() {
Serial.begin(115200);
// Initialize the keypad and display
tm1637.setBrightness(0x0f);
WiFi.mode(WIFI_STA);
esp_now_init();
// Set up ESPNOW peer
memcpy(peerInfo1.peer_addr, "\x24\x6f\x28\x29\xb8\x10", 6); // Replace with MAC address of Board 2
peerInfo1.channel = 0;
peerInfo1.encrypt = false;
esp_now_add_peer(&peerInfo1);
memcpy(peerInfo2.peer_addr, "\xa0\xa3\xb3\x28\xa7\xe0", 6); // Replace with MAC address of Board 3
peerInfo2.channel = 0;
peerInfo2.encrypt = false;
esp_now_add_peer(&peerInfo2);
// Set up ESPNOW send function
esp_now_register_send_cb(OnDataSent);
}
void loop() {
// char key = keypad.getKey();
// if (key == '1') {
// myData.number = 1012;
// tm1637.showNumberDec(myData.number); // Display 10
// sendData();
// }
////////////////////////////////////
char key = keypad.getKey(); // Check keypad input
if (key) {
handleKeypadInput(key); // Process input
}
///////////////////////////////////
}
///////////////////////////////////////
// Function to handle keypad inputs
void handleKeypadInput(char key) {
if (key >= '0' && key <= '9') {
input += key; // Accumulate numeric input
// displayMessage("Input:", input);
// Check for valid combinations
if (input == "17") {
myData.number = 1712;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "16") {
myData.number = 1612;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "11") {
myData.number = 1112;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "12") {
myData.number = 1212;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "13") {
myData.number = 1312;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "14") {
myData.number = 1412;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "15") {
myData.number = 1512;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "21") {
myData.number = 2112;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "22") {
myData.number = 2212;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "23") {
myData.number = 2312;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "24") {
myData.number = 2412;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "48") {
myData.number = 4812;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "49") {
myData.number = 4912;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "50") {
myData.number = 5012;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "51") {
myData.number = 5112;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "52") {
myData.number = 5212;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "53") {
myData.number = 5312;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "55") {
myData.number = 5512;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "58") {
myData.number = 5812;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "59") {
myData.number = 5912;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "61") {
myData.number = 6112;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "62") {
myData.number = 6212;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "63") {
myData.number = 6312;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "65") {
myData.number = 6512;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "69") {
myData.number = 6912;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "70") {
myData.number = 7012;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "71") {
myData.number = 7112;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "72") {
myData.number = 7212;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input == "73") {
myData.number = 7312;
tm1637.showNumberDec(myData.number); // Display 10
sendData();
input = ""; // Reset input
} else if (input.length() > 2) {
// Invalid input reset
// displayMessage("Error:", "Invalid input");
input = "";
}
} else if (key == '*') {
input = ""; // Clear input
// displayMessage("Input cleared", "");
}
}
///////////////////////////////////////
void sendData() {
esp_now_send(peerInfo1.peer_addr, (uint8_t *)&myData, sizeof(myData));
esp_now_send(peerInfo2.peer_addr, (uint8_t *)&myData, sizeof(myData));
}
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
if (status == ESP_NOW_SEND_SUCCESS) {
Serial.println("Data sent successfully!");
} else {
Serial.println("Data send failed!");
}
}
#include <Wire.h>
#include <TM1637Display.h>
#include <Keypad.h>
#include <esp_now.h>
#include <WiFi.h>
// TM1637 Setup
#define CLK 4
#define DIO 5
TM1637Display tm1637(CLK, DIO);
// Keypad Setup
const byte ROW_NUM = 4;
const byte COLUMN_NUM = 3;
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROW_NUM] = {13, 12, 14, 27};
byte pin_column[COLUMN_NUM] = {26, 25, 33};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
// ESPNOW Setup
typedef struct struct_message {
int number;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo1, peerInfo2;
///////////////////////////
// Variables for Input Handling
String input = ""; // Stores keypad input
//////////////////////////
// Setup Wi-Fi
void setup() {
Serial.begin(115200);
// Initialize the keypad and display
tm1637.setBrightness(0x0f);
WiFi.mode(WIFI_STA);
esp_now_init();
// Set up ESPNOW peer for Board 1
memcpy(peerInfo1.peer_addr, "\x24\x6f\x28\x29\xc4\xc8", 6); // Replace with MAC address of Board 1
peerInfo1.channel = 0;
peerInfo1.encrypt = false;
esp_now_add_peer(&peerInfo1);
// Set up ESPNOW peer for Board 3
memcpy(peerInfo2.peer_addr, "\xa0\xa3\xb3\x28\xa7\xe0", 6); // Replace with MAC address of Board 3
peerInfo2.channel = 0;
peerInfo2.encrypt = false;
esp_now_add_peer(&peerInfo2);
// Register callback function to receive data
esp_now_register_recv_cb(OnDataReceived);
}
void loop() {
// char key = keypad.getKey();
// if (key == '1') {
// myData.number = 1072;
// tm1637.showNumberDec(myData.number); // Display 10
// sendDataToBoard3();
// }
////////////////////////////////////
char key = keypad.getKey(); // Check keypad input
if (key) {
handleKeypadInput(key); // Process input
}
///////////////////////////////////
}
///////////////////////////////////////
// Function to handle keypad inputs
void handleKeypadInput(char key) {
if (key >= '0' && key <= '9') {
input += key; // Accumulate numeric input
// displayMessage("Input:", input);
// Check for valid combinations
if (input == "17") {
myData.number = 1772;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "16") {
myData.number = 1672;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "11") {
myData.number = 1172;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "12") {
myData.number = 1272;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "13") {
myData.number = 1372;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "14") {
myData.number = 1472;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "15") {
myData.number = 1572;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "21") {
myData.number = 2172;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "22") {
myData.number = 2272;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "23") {
myData.number = 2372;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "24") {
myData.number = 2472;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "48") {
myData.number = 4872;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "49") {
myData.number = 4972;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "50") {
myData.number = 5072;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "51") {
myData.number = 5172;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "52") {
myData.number = 5272;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "53") {
myData.number = 5372;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "55") {
myData.number = 5572;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "58") {
myData.number = 5872;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "59") {
myData.number = 5972;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "61") {
myData.number = 6172;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "62") {
myData.number = 6272;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "63") {
myData.number = 6372;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "65") {
myData.number = 6572;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "69") {
myData.number = 6972;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "70") {
myData.number = 7072;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "71") {
myData.number = 7172;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "72") {
myData.number = 7272;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input == "73") {
myData.number = 7372;
tm1637.showNumberDec(myData.number); // Display 10
sendDataToBoard3();
input = ""; // Reset input
} else if (input.length() > 2) {
// Invalid input reset
// displayMessage("Error:", "Invalid input");
input = "";
}
} else if (key == '*') {
input = ""; // Clear input
// displayMessage("Input cleared", "");
}
}
///////////////////////////////////////
void sendDataToBoard3() {
esp_now_send(peerInfo2.peer_addr, (uint8_t *)&myData, sizeof(myData));
}
void OnDataReceived(const esp_now_recv_info* info, const uint8_t* data, int len) {
if (len == sizeof(myData)) {
memcpy(&myData, data, sizeof(myData));
tm1637.showNumberDec(myData.number); // Display received number
// Forward the number to Board 3
sendDataToBoard3();
}
}
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <esp_now.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ESPNOW Setup
typedef struct struct_message {
int number;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo1, peerInfo2, peerInfo3; // Declare the peer information structure
void setup() {
Serial.begin(115200);
// Initialize the display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(F("OLED Display Working!"));
display.display();
delay(2000);
// Initialize Wi-Fi and ESPNOW
WiFi.mode(WIFI_STA);
esp_now_init();
// Set up ESPNOW peer for Board 1
memcpy(peerInfo1.peer_addr, "\x24\x6f\x28\x29\xc4\xc8", 6);
peerInfo1.channel = 0;
peerInfo1.encrypt = false;
esp_now_add_peer(&peerInfo1);
// Set up ESPNOW peer for Board 2
memcpy(peerInfo2.peer_addr, "\x24\x6f\x28\x29\xb8\x10", 6);
peerInfo2.channel = 0;
peerInfo2.encrypt = false;
esp_now_add_peer(&peerInfo2);
// Set up ESPNOW peer for Board 4
memcpy(peerInfo3.peer_addr, "\xa0\xa3\xb3\x28\x93\x10", 6);
peerInfo3.channel = 0;
peerInfo3.encrypt = false;
esp_now_add_peer(&peerInfo3);
// Register callback function to receive data
esp_now_register_recv_cb(OnDataReceived);
}
void loop() {
// Nothing to do in loop as everything is handled via ESPNOW callback
}
void OnDataReceived(const esp_now_recv_info* info, const uint8_t* data, int len) {
if (len == sizeof(myData)) {
memcpy(&myData, data, sizeof(myData));
// Clear the display
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
if (myData.number == 1712) {
display.println("Device 112-Active Part Not Approved");
} else if (myData.number == 1612) {
display.println("Device 112-Active Material Feeding in Progress");
} else if (myData.number == 1112) {
display.println("Device 112-Active Normal Operation");
} else if (myData.number == 1212) {
display.println("Device 112-Active Material Testing");
} else if (myData.number == 1312) {
display.println("Device 112-Active Mold Testing");
} else if (myData.number == 1412) {
display.println("Device 112-Active In Setup Process");
} else if (myData.number == 1512) {
display.println("Device 112-Active In Startup Process");
} else if (myData.number == 2112) {
display.println("Device 112-Normal Under Maintenance");
} else if (myData.number == 2212) {
display.println("Device 112-Maintenance Delay Due to Lack of Maintenance Personnel");
} else if (myData.number == 2312) {
display.println("Device 112-Maintenance Delay Due to Production Scheduling");
} else if (myData.number == 2412) {
display.println("Device 112-Maintenance Delay Due to Lack of Spare Parts");
} else if (myData.number == 4812) {
display.println("Device 112-Power Outage");
} else if (myData.number == 4912) {
display.println("Device 112-Machine Failure");
} else if (myData.number == 5012) {
display.println("Device 112-Mold Failure");
} else if (myData.number == 5112) {
display.println("Device 112-Operator Shortage");
} else if (myData.number == 5212) {
display.println("Device 112-Mold Replacement");
} else if (myData.number == 5312) {
display.println("Device 112-No Order");
} else if (myData.number == 5512) {
display.println("Device 112-Holidays");
} else if (myData.number == 5812) {
display.println("Device 112-Other");
} else if (myData.number == 5912) {
display.println("Device 112-Material Shortage");
} else if (myData.number == 6112) {
display.println("Device 112-Chiller Failure");
} else if (myData.number == 6212) {
display.println("Device 112-Material Feeder Failure");
} else if (myData.number == 6312) {
display.println("Device 112-Hot Runner System Failure");
} else if (myData.number == 6512) {
display.println("Device 112-Air Pump Failure");
} else if (myData.number == 6912) {
display.println("Device 112-Nozzle Section");
} else if (myData.number == 7012) {
display.println("Device 112-Pallet,Carton,Basket");
} else if (myData.number == 7112) {
display.println("Device 112-Semi-Finished (Insert)");
} else if (myData.number == 7212) {
display.println("Device 112-Runner Blockage");
} else if (myData.number == 7312) {
display.println("Device 112-Material Backflow");
} else if (myData.number == 1772) {
display.println("Device 172-Active Part Not Approved");
} else if (myData.number == 1672) {
display.println("Device 172-Active Material Feeding in Progress");
} else if (myData.number == 1172) {
display.println("Device 172-Active Normal Operation");
} else if (myData.number == 1272) {
display.println("Device 172-Active Material Testing");
} else if (myData.number == 1372) {
display.println("Device 172-Active Mold Testing");
} else if (myData.number == 1472) {
display.println("Device 172-Active In Setup Process");
} else if (myData.number == 1572) {
display.println("Device 172-Active In Startup Process");
} else if (myData.number == 2172) {
display.println("Device 172-Normal Under Maintenance");
} else if (myData.number == 2272) {
display.println("Device 172-Maintenance Delay Due to Lack of Maintenance Personnel");
} else if (myData.number == 2372) {
display.println("Device 172-Maintenance Delay Due to Production Scheduling");
} else if (myData.number == 2472) {
display.println("Device 172-Maintenance Delay Due to Lack of Spare Parts");
} else if (myData.number == 4872) {
display.println("Device 172-Power Outage");
} else if (myData.number == 4972) {
display.println("Device 172-Machine Failure");
} else if (myData.number == 5072) {
display.println("Device 172-Mold Failure");
} else if (myData.number == 5172) {
display.println("Device 172-Operator Shortage");
} else if (myData.number == 5272) {
display.println("Device 172-Mold Replacement");
} else if (myData.number == 5372) {
display.println("Device 172-No Order");
} else if (myData.number == 5572) {
display.println("Device 172-Holidays");
} else if (myData.number == 5872) {
display.println("Device 172-Other");
} else if (myData.number == 5972) {
display.println("Device 172-Material Shortage");
} else if (myData.number == 6172) {
display.println("Device 172-Chiller Failure");
} else if (myData.number == 6272) {
display.println("Device 172-Material Feeder Failure");
} else if (myData.number == 6372) {
display.println("Device 172-Hot Runner System Failure");
} else if (myData.number == 6572) {
display.println("Device 172-Air Pump Failure");
} else if (myData.number == 6972) {
display.println("Device 172-Nozzle Section");
} else if (myData.number == 7072) {
display.println("Device 172-Pallet,Carton,Basket");
} else if (myData.number == 7172) {
display.println("Device 172-Semi-Finished (Insert)");
} else if (myData.number == 7272) {
display.println("Device 172-Runner Blockage");
} else if (myData.number == 7372) {
display.println("Device 172-Material Backflow");
}
display.display();
// Send the received data to Board 4
esp_now_send(peerInfo3.peer_addr, (uint8_t*)&myData, sizeof(myData));
}
}
#include <Wire.h>
#include <WiFi.h>
#include <esp_now.h>
#include <HardwareSerial.h>
#define RTC_ADDRESS 0x68
HardwareSerial mySerial(2); // Serial2 for OpenLog (TX2: 17, RX2: 16)
HardwareSerial espSerial(1); // Serial1 for second ESP32 (TX1: 4, RX1: 5)
typedef struct struct_message {
int number;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo3;
byte lastSecond, lastMinute, lastHour, lastDay, lastDate, lastMonth, lastYear;
bool hasValidTime = false;
byte bcd2dec(byte val) {
return (val / 16 * 10) + (val % 16);
}
void readRTC(byte *second, byte *minute, byte *hour, byte *day, byte *date, byte *month, byte *year) {
Wire.beginTransmission(RTC_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(RTC_ADDRESS, 7);
*second = bcd2dec(Wire.read() & 0x7F);
*minute = bcd2dec(Wire.read());
*hour = bcd2dec(Wire.read() & 0x3F);
*day = bcd2dec(Wire.read());
*date = bcd2dec(Wire.read());
*month = bcd2dec(Wire.read());
*year = bcd2dec(Wire.read());
}
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 16, 17); // OpenLog data logger
espSerial.begin(115200, SERIAL_8N1, 4, 5); // Communication with second ESP32
Wire.begin();
WiFi.mode(WIFI_STA);
esp_now_init();
memcpy(peerInfo3.peer_addr, "\xa0\xa3\xb3\x28\xa7\xe0", 6);
peerInfo3.channel = 0;
peerInfo3.encrypt = false;
esp_now_add_peer(&peerInfo3);
esp_now_register_recv_cb(OnDataReceived);
}
void loop() {
}
void OnDataReceived(const esp_now_recv_info *info, const uint8_t *data, int len) {
if (len == sizeof(myData)) {
memcpy(&myData, data, sizeof(myData));
String logMessage = "";
if (myData.number == 1712) {
logMessage = "Device 112-Active Part Not Approved";
} else if (myData.number == 1612) {
logMessage = "Device 112-Active Material Feeding in Progress";
} else if (myData.number == 1112) {
logMessage = "Device 112-Active Normal Operation";
} else if (myData.number == 1212) {
logMessage = "Device 112-Active Material Testing";
} else if (myData.number == 1312) {
logMessage = "Device 112-Active Mold Testing";
} else if (myData.number == 1412) {
logMessage = "Device 112-Active In Setup Process";
} else if (myData.number == 1512) {
logMessage = "Device 112-Active In Startup Process";
} else if (myData.number == 2112) {
logMessage = "Device 112-Normal Under Maintenance";
} else if (myData.number == 2212) {
logMessage = "Device 112-Maintenance Delay Due to Lack of Maintenance Personnel";
} else if (myData.number == 2312) {
logMessage = "Device 112-Maintenance Delay Due to Production Scheduling";
} else if (myData.number == 2412) {
logMessage = "Device 112-Maintenance Delay Due to Lack of Spare Parts";
} else if (myData.number == 4812) {
logMessage = "Device 112-Power Outage";
} else if (myData.number == 4912) {
logMessage = "Device 112-Machine Failure";
} else if (myData.number == 5012) {
logMessage = "Device 112-Mold Failure";
} else if (myData.number == 5112) {
logMessage = "Device 112-Operator Shortage";
} else if (myData.number == 5212) {
logMessage = "Device 112-Mold Replacement";
} else if (myData.number == 5312) {
logMessage = "Device 112-No Order";
} else if (myData.number == 5512) {
logMessage = "Device 112-Holidays";
} else if (myData.number == 5812) {
logMessage = "Device 112-Other";
} else if (myData.number == 5912) {
logMessage = "Device 112-Material Shortage";
} else if (myData.number == 6112) {
logMessage = "Device 112-Chiller Failure";
} else if (myData.number == 6212) {
logMessage = "Device 112-Material Feeder Failure";
} else if (myData.number == 6312) {
logMessage = "Device 112-Hot Runner System Failure";
} else if (myData.number == 6512) {
logMessage = "Device 112-Air Pump Failure";
} else if (myData.number == 6912) {
logMessage = "Device 112-Nozzle Section";
} else if (myData.number == 7012) {
logMessage = "Device 112-Pallet,Carton,Basket";
} else if (myData.number == 7112) {
logMessage = "Device 112-Semi-Finished (Insert)";
} else if (myData.number == 7212) {
logMessage = "Device 112-Runner Blockage";
} else if (myData.number == 7312) {
logMessage = "Device 112-Material Backflow";
} else if (myData.number == 1772) {
logMessage = "Device 172-Active Part Not Approved";
} else if (myData.number == 1672) {
logMessage = "Device 172-Active Material Feeding in Progress";
} else if (myData.number == 1172) {
logMessage = "Device 172-Active Normal Operation";
} else if (myData.number == 1272) {
logMessage = "Device 172-Active Material Testing";
} else if (myData.number == 1372) {
logMessage = "Device 172-Active Mold Testing";
} else if (myData.number == 1472) {
logMessage = "Device 172-Active In Setup Process";
} else if (myData.number == 1572) {
logMessage = "Device 172-Active In Startup Process";
} else if (myData.number == 2172) {
logMessage = "Device 172-Normal Under Maintenance";
} else if (myData.number == 2272) {
logMessage = "Device 172-Maintenance Delay Due to Lack of Maintenance Personnel";
} else if (myData.number == 2372) {
logMessage = "Device 172-Maintenance Delay Due to Production Scheduling";
} else if (myData.number == 2472) {
logMessage = "Device 172-Maintenance Delay Due to Lack of Spare Parts";
} else if (myData.number == 4872) {
logMessage = "Device 172-Power Outage";
} else if (myData.number == 4972) {
logMessage = "Device 172-Machine Failure";
} else if (myData.number == 5072) {
logMessage = "Device 172-Mold Failure";
} else if (myData.number == 5172) {
logMessage = "Device 172-Operator Shortage";
} else if (myData.number == 5272) {
logMessage = "Device 172-Mold Replacement";
} else if (myData.number == 5372) {
logMessage = "Device 172-No Order";
} else if (myData.number == 5572) {
logMessage = "Device 172-Holidays";
} else if (myData.number == 5872) {
logMessage = "Device 172-Other";
} else if (myData.number == 5972) {
logMessage = "Device 172-Material Shortage";
} else if (myData.number == 6172) {
logMessage = "Device 172-Chiller Failure";
} else if (myData.number == 6272) {
logMessage = "Device 172-Material Feeder Failure";
} else if (myData.number == 6372) {
logMessage = "Device 172-Hot Runner System Failure";
} else if (myData.number == 6572) {
logMessage = "Device 172-Air Pump Failure";
} else if (myData.number == 6972) {
logMessage = "Device 172-Nozzle Section";
} else if (myData.number == 7072) {
logMessage = "Device 172-Pallet,Carton,Basket";
} else if (myData.number == 7172) {
logMessage = "Device 172-Semi-Finished (Insert)";
} else if (myData.number == 7272) {
logMessage = "Device 172-Runner Blockage";
} else if (myData.number == 7372) {
logMessage = "Device 172-Material Backflow";
}
byte second, minute, hour, day, date, month, year;
readRTC(&second, &minute, &hour, &day, &date, &month, &year);
if (year < 25 || month == 0 || month > 12 || date == 0 || date > 31 || hour > 23 || minute > 59 || second > 59) {
if (hasValidTime) {
second = lastSecond;
minute = lastMinute;
hour = lastHour;
day = lastDay;
date = lastDate;
month = lastMonth;
year = lastYear;
} else {
Serial.println("Invalid RTC data detected, skipping log entry.");
return;
}
} else {
lastSecond = second;
lastMinute = minute;
lastHour = hour;
lastDay = day;
lastDate = date;
lastMonth = month;
lastYear = year;
hasValidTime = true;
}
String logEntry = String(2000 + year) + "/" + String(month) + "/" + String(date) + " "
+ String(hour) + ":" + String(minute) + ":" + String(second) + " - "
+ logMessage;
mySerial.println(logEntry); // Log to OpenLog
Serial.println(logEntry); // Display on Serial Monitor
espSerial.println(logEntry); // Send to second ESP32
}
}
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "POCOX3GT";
const char* password = "q2fghwvray2023rty";
WebServer server(80);
HardwareSerial espSerial(1); // Serial1 (TX1: 4, RX1: 5)
// Use PROGMEM to store constant HTML strings in Flash memory
const char HTML_HEADER[] PROGMEM = "<html><head><meta http-equiv='refresh' content='5'></head><body>";
const char HTML_FOOTER[] PROGMEM = "</body></html>";
#define MAX_MESSAGES 2000 // Max messages before reset
String messageBuffer[MAX_MESSAGES]; // Store messages in an array
int messageCount = 0; // Number of unique messages
void setup() {
Serial.begin(115200);
espSerial.begin(115200, SERIAL_8N1, 4, 5); // Receiving from first ESP32
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
server.on("/", HTTP_GET, []() {
server.send(200, "text/html", getHTMLPage());
});
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
if (espSerial.available()) {
String receivedData = espSerial.readStringUntil('\n'); // Read incoming data
Serial.println("Received: " + receivedData);
// Extract timestamp from the message (assuming format: "YYYY/MM/DD HH:MM:SS - Device ...")
String timestamp = receivedData.substring(0, receivedData.indexOf(" - "));
// Check if this timestamp already exists in the buffer
bool isDuplicate = false;
for (int i = 0; i < messageCount; i++) {
if (messageBuffer[i].startsWith(timestamp)) {
isDuplicate = true;
break;
}
}
// Store only if it's not a duplicate
if (!isDuplicate) {
if (messageCount < MAX_MESSAGES) {
messageBuffer[messageCount] = receivedData;
messageCount++;
} else {
// Reset buffer when full
messageCount = 0;
}
}
}
}
String getHTMLPage() {
String htmlPage = FPSTR(HTML_HEADER);
htmlPage += "<h2>Device Logs</h2><pre>";
for (int i = 0; i < messageCount; i++) {
htmlPage += messageBuffer[i] + "\n";
}
htmlPage += "</pre><h3>Total Unique Messages: " + String(messageCount) + "</h3>";
htmlPage += FPSTR(HTML_FOOTER);
return htmlPage;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment