From a7e39756191f5dde8c04b7212cc5a09ec6e3d828 Mon Sep 17 00:00:00 2001 From: lexa Date: Fri, 28 Aug 2020 19:42:51 +0300 Subject: [PATCH] Added stop --- Curt_MidRoom/src/main.cpp | 47 +++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/Curt_MidRoom/src/main.cpp b/Curt_MidRoom/src/main.cpp index 56556ca..cdf1d22 100644 --- a/Curt_MidRoom/src/main.cpp +++ b/Curt_MidRoom/src/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #define LED_WF (14) #define LED_MQ (12) @@ -40,6 +41,8 @@ WiFiEventHandler wifiConnectHandler; WiFiEventHandler wifiDisconnectHandler; Ticker wifiReconnectTimer; +SoftwareSerial softSer; + void connectToWifi(); void connectToMqtt(); void onWifiConnect(const WiFiEventStationModeGotIP& event); @@ -54,6 +57,7 @@ void writeHex(std::string data); void setup(){ Serial.begin(9600); + softSer.begin(9600, SWSERIAL_8N1, D5, D6, false); WiFi.mode(WIFI_STA); WiFi.hostname("Cur-MidRoom"); Serial.begin(9600); @@ -110,8 +114,8 @@ void loop(){ ArduinoOTA.handle(); crc = 0; offset = 0; - while(Serial.available()){ - readByte(Serial.read()); + while(softSer.available()){ + readByte(softSer.read()); } if(cRun + 999 < millis()){ cRun = millis(); @@ -175,10 +179,39 @@ void onMqttSubscribe(uint16_t packetId, uint8_t qos) { void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) { if(strcmp("/home/midroom/curtcmd", topic) == 0){ - + crc = 0; + switch(atoi(payload)){ + case 1: + writeHex(TUYA_CLOSE); + writeByte(crc); + break; + case 2: + writeHex(TUYA_OPEN); + writeByte(crc); + break; + case 3: + writeHex(TUYA_STOP); + writeByte(crc); + break; + } + mqttClient.publish("/home/midroom/curtcmd", 0, false, "0"); } else if(strcmp("/home/midroom/curtpos_set", topic) == 0){ - + int pos = atoi(payload); + crc = 0; + if(pos == 100){ + writeHex(TUYA_CLOSE); + writeByte(crc); + } + else if(pos == 0){ + writeHex(TUYA_OPEN); + writeByte(crc); + } + else if (pos > 0 && pos < 100){ + writeHex(TUYA_SET_POSITION); + writeByte(100 - pos); + writeByte(crc); + } } } @@ -194,7 +227,7 @@ void readByte(uint8_t data) { if (sum == crc) { uint8_t cmd_type = buffer[3]; uint8_t data_id = buffer[6]; - uint8_t data_size = buffer[9]; // only 1byte or 4bytes values + //uint8_t data_size = buffer[9]; // only 1byte or 4bytes values switch (cmd_type) { case 0x07: { switch (data_id) { @@ -248,12 +281,12 @@ void readByte(uint8_t data) { } void writeByte(uint8_t data) { - Serial.write(data); + softSer.write(data); crc += data; } void writeHex(std::string data) { - int i = 0; + uint16_t i = 0; while (i < data.length()) { const char hex[2] = {data[i++], data[i++]}; uint8_t d = strtoul(hex, NULL, 16);