diff --git a/src/mqtt_esp32/mqtt_esp32.ino b/src/mqtt_esp32/mqtt_esp32.ino index 890e69b8c25ff8013978ce3ad968290a03e3bf7a..a9a75580c52bcef5ff639f76b7175b76747456c3 100644 --- a/src/mqtt_esp32/mqtt_esp32.ino +++ b/src/mqtt_esp32/mqtt_esp32.ino @@ -88,52 +88,69 @@ uint8_t* mqtt_packet_to_raw(uint8_t* packet, unsigned int* length) void send_data_to_matrix(uint8_t idx, uint8_t idy, uint8_t* data, uint32_t length) { + uint8_t raw_data[202]; + raw_data[0] = idx; + raw_data[1] = idy; - // ADD ID TO LEN - length += 2; - - // SEND UART PACKET HEADER - SerialPort.print((char)0x77); - SerialPort.print((char)length-100); - uint8_t crc = 0; - - // SEND MATRIX ID - SerialPort.print((char)idx); - SerialPort.print((char)idy); - - // COMPUTE CRC FOR ID - crc = crc ^ idx; - crc = crc ^ idy; + uint8_t send_len = 2; // SEND RGB DATA for(int i = 0; i < length; i+=3) { - Serial.print((char)data[i]); - Serial.print((char)data[i+1]); - Serial.print((char)data[i+2]); + // Serial.print((char)data[i]); + // Serial.print((char)data[i+1]); + // Serial.print((char)data[i+2]); // COMPUTE COLOR IN 16 BITS uint8_t r = data[i] & 0x1F; uint8_t g = data[i+1] & 0x3F; uint8_t b = data[i+2] & 0x1F ; uint16_t rgb = r << 11 | g << 5 | b; + // Serial.print(rgb); + // Serial.print(' '); // SPLIT ON 8 BITS uint8_t rgb_0 = rgb >> 8; - uint8_t rgb_1 = rgb & 0x0F; - - // COMPUTE CRC - crc = crc ^ rgb_0; - crc = crc ^ rgb_1; + uint8_t rgb_1 = rgb & 0xFF; + //Serial.println(rgb_0); + // Serial.print(' '); + //Serial.println(rgb_1); // SEND RGB - SerialPort.print((char) rgb_0); - SerialPort.print((char) rgb_1); + //SerialPort.print((char) rgb_0); + //SerialPort.print((char) rgb_1); + //send_len += 2; + raw_data[send_len++] = rgb_0; + raw_data[send_len++] = rgb_1; + } + // // SEND MATRIX ID + // Serial.println(idx); + // Serial.println(idy); + Serial.println(send_len); + + // SEND UART PACKET HEADER + SerialPort.print((char)0x77); + SerialPort.print((char)202); + uint8_t crc = 0; + + for(int i = 0; i < send_len; i++) + { + if(raw_data[i] == 0x77 || raw_data[i] == 0x10 || raw_data[i] == 0xAA) + { + crc = crc ^ 0x10; + SerialPort.print((char)0x10); + Serial.println(0x10); + } + crc = crc ^ raw_data[i]; + SerialPort.print((char)raw_data[i]); + Serial.println(raw_data[i]); } // SEND UART PACKET FOOTER - SerialPort.print((char)(crc ^ (length-100))); + SerialPort.print((char)(crc ^ send_len)); SerialPort.print((char)0xAA); + + Serial.println(crc ^ send_len); } void callback(char *topic, byte *payload, unsigned int length) @@ -142,6 +159,16 @@ void callback(char *topic, byte *payload, unsigned int length) Serial.print("Message arrived in topic: "); Serial.println(topic); + // // TEMP + // SerialPort.print((char)0x77); + // SerialPort.print((char)202); + // for(int i = 0 ; i < 202; i++) + // { + // SerialPort.print((char)0x61); + // } + // SerialPort.print((char)202); + // SerialPort.print((char)0xaa); + // GET RAW DATA uint8_t* raw_data = mqtt_packet_to_raw(payload, &length); if(raw_data == NULL) @@ -154,7 +181,7 @@ void callback(char *topic, byte *payload, unsigned int length) { for(int y = cluster_size_y - 1; y >= 0; y--) { - Serial.println("FOR LOOP"); + //Serial.println("FOR LOOP"); // SEND UART PACKET send_data_to_matrix(x, y, raw_data, IMG_DATA_SIZE); diff --git a/src/mqtt_hepialight/MAIN.PY b/src/mqtt_hepialight/MAIN.PY index e0bfe0ccc5e32ceec138a1ce8097cdda171674d1..2663273a0ef14945b15adebd4c7248c868ef5477 100644 --- a/src/mqtt_hepialight/MAIN.PY +++ b/src/mqtt_hepialight/MAIN.PY @@ -29,9 +29,9 @@ def data_to_color16(data): id_x = data[0] id_y = data[1] - afficher_texte(f"{len(data)}") + #afficher_texte(f"{len(data)}") - for i in range(0, len(data), 2): + for i in range(2, len(data), 2): d_color16.append(data[i] << 8 | data[i+1]) return list(map(color16_to_32, d_color16)) @@ -39,7 +39,7 @@ def data_to_color16(data): #data32 = list(map(color16_to_32, data16)) r_data = [] while(True): - r_data = recevoir_msg(N) + r_data = recevoir_msg(S) if len(r_data) > 0: break