Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
a1d389f225 | |||
72698ddaaf | |||
1c08d32e20 | |||
e310ef6573 |
@ -29,3 +29,5 @@ See [here](https://github.com/aZholtikov/ESP-NOW-Window-Door-Sensor/tree/main/ha
|
|||||||
5. For using this firmware on Tuya/SmartLife WiFi window/door sensors, the WiFi module must be replaced with an ESP8266 compatible module (if necessary).
|
5. For using this firmware on Tuya/SmartLife WiFi window/door sensors, the WiFi module must be replaced with an ESP8266 compatible module (if necessary).
|
||||||
6. Highly recommended connect an external power supply during setup/upgrade.
|
6. Highly recommended connect an external power supply during setup/upgrade.
|
||||||
7. Because this sensor is battery operated, it has an additional controller (MCU) that controls the power of the WiFi module (Module) and transmits data to it for transmission to the network. The communication is done via UART at 9600 speed. Make sure that the protocol is correct before flashing. Details [here](https://github.com/aZholtikov/ESP-NOW-Window-Door-Sensor/tree/main/doc).
|
7. Because this sensor is battery operated, it has an additional controller (MCU) that controls the power of the WiFi module (Module) and transmits data to it for transmission to the network. The communication is done via UART at 9600 speed. Make sure that the protocol is correct before flashing. Details [here](https://github.com/aZholtikov/ESP-NOW-Window-Door-Sensor/tree/main/doc).
|
||||||
|
|
||||||
|
Any feedback via [e-mail](mailto:github@zh.com.ru) would be appreciated. Or... [Buy me a coffee](https://paypal.me/aZholtikov).
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<body onload="load();">
|
<body onload="load();">
|
||||||
<form class="box">
|
<form class="box">
|
||||||
<h1>ESP-NOW Window Sensor </h1>
|
<h1>ESP-NOW Window Sensor</h1>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<p class="text">Firmware:</p>
|
<p class="text">Firmware:</p>
|
||||||
<p class="text" id="version"></p>
|
<p class="text" id="version"></p>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Tested on
|
# Tested on
|
||||||
|
|
||||||
1. Model D06 Type 1. Built on Tuya WiFi module TYWE3S (ESP8266 chip). Analogue of ESP-01. Does not require replacement. Total triggering time about 1.5 sec. [Photo](https://github.com/aZholtikov/ESP-NOW-Window-Door-Sensor/tree/main/hardware/Model_D06_Type_1).
|
1. MODEL D06 TYPE 1. Built on Tuya WiFi module TYWE3S (ESP8266 chip). Analogue of ESP-01. Does not require replacement. Total triggering time about 1.5 sec. [Photo](https://github.com/aZholtikov/ESP-NOW-Window-Door-Sensor/tree/main/hardware/Model_D06_Type_1).
|
||||||
2. Model D06 Type 2. Built on Tuya WiFi module CBU (BK7231N chip). Replacement required. No physical equivalent (as of this writing). Performed replacement with ESP-M2 (ESP8285 chip) because it was in stock. It can be replaced with any ESP8266 compatible. Total response time about 0.5 sec. [Photo](https://github.com/aZholtikov/ESP-NOW-Window-Door-Sensor/tree/main/hardware/Model_D06_Type_2).
|
2. MODEL D06 TYPE 2. Built on Tuya WiFi module CBU (BK7231N chip). Replacement required. No physical equivalent (as of this writing). Performed replacement with ESP-M2 (ESP8285 chip) because it was in stock. It can be replaced with any ESP8266 compatible. Total response time about 0.5 sec. [Photo](https://github.com/aZholtikov/ESP-NOW-Window-Door-Sensor/tree/main/hardware/Model_D06_Type_2).
|
||||||
|
63
src/main.cpp
63
src/main.cpp
@ -20,17 +20,16 @@ void sendAttributesMessage(void);
|
|||||||
|
|
||||||
struct deviceConfig
|
struct deviceConfig
|
||||||
{
|
{
|
||||||
const String firmware{"1.3"};
|
|
||||||
String espnowNetName{"DEFAULT"};
|
String espnowNetName{"DEFAULT"};
|
||||||
String deviceName = "ESP-NOW window " + String(ESP.getChipId(), HEX);
|
String deviceName = "ESP-NOW window " + String(ESP.getChipId(), HEX);
|
||||||
uint8_t deviceClass{HABSDC_WINDOW};
|
uint8_t deviceClass{HABSDC_WINDOW};
|
||||||
} config;
|
} config;
|
||||||
|
|
||||||
|
const String firmware{"1.31"};
|
||||||
|
|
||||||
char receivedBytes[128]{0};
|
char receivedBytes[128]{0};
|
||||||
uint8_t counter{0};
|
uint8_t counter{0};
|
||||||
uint8_t messageLenght{0};
|
bool isDataReceived{false};
|
||||||
bool dataReceiving{false};
|
|
||||||
bool dataReceived{false};
|
|
||||||
bool semaphore{false};
|
bool semaphore{false};
|
||||||
|
|
||||||
const char initialMessage[] = {0x55, 0xAA, 0x00, 0x01, 0x00, 0x00, 0x00};
|
const char initialMessage[] = {0x55, 0xAA, 0x00, 0x01, 0x00, 0x00, 0x00};
|
||||||
@ -64,57 +63,27 @@ void setup()
|
|||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
if (Serial.available() > 0 && !dataReceived)
|
if (isDataReceived)
|
||||||
{
|
{
|
||||||
char receivedByte[1];
|
if (receivedBytes[0] == 0x55 && receivedBytes[3] == 0x01) // MCU system information.
|
||||||
Serial.readBytes(receivedByte, 1);
|
|
||||||
if (receivedByte[0] == 0x55)
|
|
||||||
{
|
|
||||||
dataReceiving = true;
|
|
||||||
receivedBytes[counter++] = receivedByte[0];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (dataReceiving)
|
|
||||||
{
|
|
||||||
if (counter == 5)
|
|
||||||
messageLenght = 6 + int(receivedByte[0]);
|
|
||||||
if (counter == messageLenght)
|
|
||||||
{
|
|
||||||
receivedBytes[counter] = receivedByte[0];
|
|
||||||
counter = 0;
|
|
||||||
dataReceiving = false;
|
|
||||||
dataReceived = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
receivedBytes[counter++] = receivedByte[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dataReceived)
|
|
||||||
{
|
|
||||||
if (receivedBytes[3] == 0x01) // MCU system information.
|
|
||||||
{
|
{
|
||||||
Serial.write(connectedMessage, sizeof(connectedMessage));
|
Serial.write(connectedMessage, sizeof(connectedMessage));
|
||||||
Serial.flush();
|
Serial.flush();
|
||||||
dataReceived = false;
|
|
||||||
}
|
}
|
||||||
if (receivedBytes[3] == 0x02) // MCU confirmation message.
|
if (receivedBytes[0] == 0x55 && receivedBytes[3] == 0x03) // Message for switching to setting mode.
|
||||||
dataReceived = false;
|
|
||||||
if (receivedBytes[3] == 0x03) // Message for switching to setting mode.
|
|
||||||
{
|
{
|
||||||
Serial.write(settingMessage, sizeof(settingMessage));
|
Serial.write(settingMessage, sizeof(settingMessage));
|
||||||
Serial.flush();
|
Serial.flush();
|
||||||
Serial.end();
|
Serial.end();
|
||||||
dataReceived = false;
|
|
||||||
WiFi.mode(WIFI_AP);
|
WiFi.mode(WIFI_AP);
|
||||||
WiFi.softAP(("ESP-NOW window " + String(ESP.getChipId(), HEX)).c_str(), "12345678", 1, 0);
|
WiFi.softAP(("ESP-NOW window " + String(ESP.getChipId(), HEX)).c_str(), "12345678", 1, 0);
|
||||||
setupWebServer();
|
setupWebServer();
|
||||||
ArduinoOTA.begin();
|
ArduinoOTA.begin();
|
||||||
}
|
}
|
||||||
if (receivedBytes[3] == 0x08) // Sensor status message.
|
if (receivedBytes[0] == 0x55 && receivedBytes[3] == 0x08) // Sensor status message.
|
||||||
{
|
{
|
||||||
if (receivedBytes[7] == 0x01) // Battery status.
|
if (receivedBytes[7] == 0x01) // Battery status.
|
||||||
{
|
{
|
||||||
dataReceived = false;
|
|
||||||
Serial.write(confirmationMessage, sizeof(confirmationMessage));
|
Serial.write(confirmationMessage, sizeof(confirmationMessage));
|
||||||
Serial.flush();
|
Serial.flush();
|
||||||
}
|
}
|
||||||
@ -127,7 +96,6 @@ void loop()
|
|||||||
if (receivedBytes[17] == 0x00)
|
if (receivedBytes[17] == 0x00)
|
||||||
json["state"] = "CLOSED";
|
json["state"] = "CLOSED";
|
||||||
json["battery"] = round((double(system_get_vdd33()) / 1000) * 100) / 100;
|
json["battery"] = round((double(system_get_vdd33()) / 1000) * 100) / 100;
|
||||||
dataReceived = false;
|
|
||||||
serializeJsonPretty(json, outgoingData.message);
|
serializeJsonPretty(json, outgoingData.message);
|
||||||
char temp[sizeof(esp_now_payload_data_t)]{0};
|
char temp[sizeof(esp_now_payload_data_t)]{0};
|
||||||
memcpy(&temp, &outgoingData, sizeof(esp_now_payload_data_t));
|
memcpy(&temp, &outgoingData, sizeof(esp_now_payload_data_t));
|
||||||
@ -135,11 +103,24 @@ void loop()
|
|||||||
semaphore = true;
|
semaphore = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
isDataReceived = false;
|
||||||
|
counter = 0;
|
||||||
|
memset(&receivedBytes, 0, 128);
|
||||||
}
|
}
|
||||||
myNet.maintenance();
|
myNet.maintenance();
|
||||||
ArduinoOTA.handle();
|
ArduinoOTA.handle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void serialEvent()
|
||||||
|
{
|
||||||
|
while (Serial.available())
|
||||||
|
{
|
||||||
|
receivedBytes[counter++] = Serial.read();
|
||||||
|
delay(2);
|
||||||
|
}
|
||||||
|
isDataReceived = true;
|
||||||
|
}
|
||||||
|
|
||||||
void onConfirmReceiving(const uint8_t *target, const uint16_t id, const bool status)
|
void onConfirmReceiving(const uint8_t *target, const uint16_t id, const bool status)
|
||||||
{
|
{
|
||||||
if (semaphore)
|
if (semaphore)
|
||||||
@ -201,7 +182,7 @@ void setupWebServer()
|
|||||||
{
|
{
|
||||||
String configJson;
|
String configJson;
|
||||||
DynamicJsonDocument json(256); // To calculate the buffer size uses https://arduinojson.org/v6/assistant.
|
DynamicJsonDocument json(256); // To calculate the buffer size uses https://arduinojson.org/v6/assistant.
|
||||||
json["firmware"] = config.firmware;
|
json["firmware"] = firmware;
|
||||||
json["espnowNetName"] = config.espnowNetName;
|
json["espnowNetName"] = config.espnowNetName;
|
||||||
json["deviceName"] = config.deviceName;
|
json["deviceName"] = config.deviceName;
|
||||||
json["deviceClass"] = config.deviceClass;
|
json["deviceClass"] = config.deviceClass;
|
||||||
@ -258,7 +239,7 @@ void sendAttributesMessage()
|
|||||||
json["Type"] = "ESP-NOW window sensor";
|
json["Type"] = "ESP-NOW window sensor";
|
||||||
json["MCU"] = "ESP8266";
|
json["MCU"] = "ESP8266";
|
||||||
json["MAC"] = myNet.getNodeMac();
|
json["MAC"] = myNet.getNodeMac();
|
||||||
json["Firmware"] = config.firmware;
|
json["Firmware"] = firmware;
|
||||||
json["Library"] = myNet.getFirmwareVersion();
|
json["Library"] = myNet.getFirmwareVersion();
|
||||||
serializeJsonPretty(json, outgoingData.message);
|
serializeJsonPretty(json, outgoingData.message);
|
||||||
char temp[sizeof(esp_now_payload_data_t)]{0};
|
char temp[sizeof(esp_now_payload_data_t)]{0};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user