Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .github/updateversion.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
print("Usage: python3 updateversion.py <version>")
sys.exit(1)

tag = sys.argv[1]
# Ensure the filename will not be a directory path by replacing '/' with '-'
tag = sys.argv[1].replace('/', '-')

content_new = ''
with open ('./src/PixelIt.ino', 'r' ) as f:
with open ('./platformio.ini', 'r' ) as f:
content = f.read()
content_new = re.sub('(#define\s+VERSION\s+\")(.*)(\")', r'\g<1>'+ tag + r'\g<3>', content, flags = re.M)
content_new = re.sub('pixelit_version\s*=\s*.*', 'pixelit_version = ' + tag, content, flags = re.M)
f.close()

if content_new != "":
with open ('./src/PixelIt.ino', 'w' ) as f:
with open ('./platformio.ini', 'w' ) as f:
f.write(content_new)
f.close()
2 changes: 1 addition & 1 deletion .github/workflows/build-and-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:
run: |
python .github/webui.py

- name: Update version in PixelIt.ino 🔧
- name: Update version in platformio.ini 🔧
run: |
python .github/updateversion.py ${{ github.ref_name }}

Expand Down
31 changes: 7 additions & 24 deletions extra_script.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,17 @@
import mmap
import os
import re
Import("env")

SOURCECODE = "./src/PixelIt.ino"

# Access to global construction environment
build_tag = env['PIOENV']

# Read version from platformio.ini [common].pixelit_version
version = env.GetProjectConfig().get("common", "pixelit_version")

# Dump construction environment (for debug purpose)
# print(env.Dump())

# Search Version
version = ""
file1 = open(SOURCECODE, 'r')
Lines = file1.readlines()

count = 0
# Strips the newline character
for line in Lines:
match = re.search(r"^#define\s+VERSION\s+[\"'](.*)[\"'].*$", line)
if match:
version = match.group(1)
file1.close
break
prog_name = f"firmware_v{version}_{build_tag}"

if version == "":
raise Exception(f"No version found in {SOURCECODE}")
print(f"[extra_script] build_tag: {build_tag}")
print(f"[extra_script] version: {version}")
print(f"[extra_script] PROGNAME: {prog_name}")

# Rename binary according to environnement/board
# ex: firmware_esp32dev.bin or firmware_nodemcuv2.bin
env.Replace(PROGNAME=f"firmware_v{version}_{build_tag}")
env.Replace(PROGNAME=prog_name)
64 changes: 52 additions & 12 deletions include/Tools.h
Original file line number Diff line number Diff line change
Expand Up @@ -253,12 +253,35 @@ float CelsiusToFahrenheit(float celsius)
return (celsius * 9 / 5) + 32;
}

/// <summary>
/// RGB Color struct.
///
/// Can be auto casted to uint16_t using Framebuffer_GFX::Color()
///
/// Default: RGB(255, 255, 255) = White
/// </summary>
struct RGBColor
{
uint8_t r = 255;
uint8_t g = 255;
uint8_t b = 255;

RGBColor() {}
RGBColor(uint8_t _r, uint8_t _g, uint8_t _b) : r(_r), g(_g), b(_b) {}

// Auto cast to uint16_t using Framebuffer_GFX::Color()
operator uint16_t() const
{
return Framebuffer_GFX::Color(r, g, b);
}
};

// RGBtoHEX
String RGBtoHEX(int r, int g, int b)
String RGBtoHEX(RGBColor color)
{
String rs = String(r, HEX);
String gs = String(g, HEX);
String bs = String(b, HEX);
String rs = String(color.r, HEX);
String gs = String(color.g, HEX);
String bs = String(color.b, HEX);

if (rs.length() == 1)
rs = "0" + rs;
Expand All @@ -271,7 +294,7 @@ String RGBtoHEX(int r, int g, int b)
}

// HEXtoRGB
void HEXtoRGB(String hex, uint8_t &r, uint8_t &g, uint8_t &b)
void HEXtoRGB(String hex, RGBColor &result)
{
// Remove # if it exists
hex.replace("#", "");
Expand All @@ -281,14 +304,31 @@ void HEXtoRGB(String hex, uint8_t &r, uint8_t &g, uint8_t &b)
// regex: ^#?([a-f0-9]{6}|[a-f0-9]{3})$
if (hex.length() == 6)
{
r = strtol(hex.substring(0, 2).c_str(), nullptr, 16);
g = strtol(hex.substring(2, 4).c_str(), nullptr, 16);
b = strtol(hex.substring(4, 6).c_str(), nullptr, 16);
result.r = strtol(hex.substring(0, 2).c_str(), nullptr, 16);
result.g = strtol(hex.substring(2, 4).c_str(), nullptr, 16);
result.b = strtol(hex.substring(4, 6).c_str(), nullptr, 16);
}
else
{
r = 0;
g = 0;
b = 0;
result.r = 0;
result.g = 0;
result.b = 0;
}
}
}

/// <summary>
/// Converts a JSON object with either a hexColor or r,g,b values to an RGBColor struct
/// </summary>
void JsonToRGB(JsonVariant parent, RGBColor &result)
{
if (parent["hexColor"].is<const char *>())
{
HEXtoRGB(parent["hexColor"], result);
}
else if (parent["color"]["r"].is<uint8_t>() && parent["color"]["g"].is<uint8_t>() && parent["color"]["b"].is<uint8_t>())
{
result.r = parent["color"]["r"];
result.g = parent["color"]["g"];
result.b = parent["color"]["b"];
}
}
32 changes: 15 additions & 17 deletions include/UpdateScreen.h
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
#include <ArduinoJson.h>

void BuildUpdateScreenJSON(JsonObject &root)
void BuildUpdateScreenJSON(JsonDocument doc)
{

JsonObject &text = root.createNestedObject("text");
JsonObject text = doc["text"].add<JsonObject>();
text["textString"] = "New FW available";
text["hexColor"] = "#FFFFFF";
text["scrollText"] = true;

JsonObject position = text["position"].add<JsonObject>();
position["x"] = 7;
position["y"] = 1;

JsonObject &text_position = text.createNestedObject("position");
text_position["x"] = 7;
text_position["y"] = 1;

JsonObject &bitmapAnimation = root.createNestedObject("bitmapAnimation");
JsonObject bitmapAnimation = doc["bitmapAnimation"].add<JsonObject>();
bitmapAnimation["animationDelay"] = 400;
bitmapAnimation["limitLoops"] = 0;

JsonArray &bitmapAnimation_data = bitmapAnimation.createNestedArray("data");

JsonArray &bitmapAnimation_data_0 = bitmapAnimation_data.createNestedArray();
JsonArray bitmapAnimation_data = bitmapAnimation["data"].to<JsonArray>();
JsonArray bitmapAnimation_data_0 = bitmapAnimation_data.add<JsonVariant>().to<JsonArray>();
bitmapAnimation_data_0.add(0);
bitmapAnimation_data_0.add(0);
bitmapAnimation_data_0.add(0);
Expand Down Expand Up @@ -84,7 +82,7 @@ void BuildUpdateScreenJSON(JsonObject &root)
bitmapAnimation_data_0.add(0);
bitmapAnimation_data_0.add(0);

JsonArray &bitmapAnimation_data_1 = bitmapAnimation_data.createNestedArray();
JsonArray bitmapAnimation_data_1 = bitmapAnimation_data.add<JsonVariant>().to<JsonArray>();
bitmapAnimation_data_1.add(0);
bitmapAnimation_data_1.add(0);
bitmapAnimation_data_1.add(0);
Expand Down Expand Up @@ -150,7 +148,7 @@ void BuildUpdateScreenJSON(JsonObject &root)
bitmapAnimation_data_1.add(63488);
bitmapAnimation_data_1.add(0);

JsonArray &bitmapAnimation_data_2 = bitmapAnimation_data.createNestedArray();
JsonArray bitmapAnimation_data_2 = bitmapAnimation_data.add<JsonVariant>().to<JsonArray>();
bitmapAnimation_data_2.add(0);
bitmapAnimation_data_2.add(0);
bitmapAnimation_data_2.add(0);
Expand Down Expand Up @@ -216,7 +214,7 @@ void BuildUpdateScreenJSON(JsonObject &root)
bitmapAnimation_data_2.add(0);
bitmapAnimation_data_2.add(0);

JsonArray &bitmapAnimation_data_3 = bitmapAnimation_data.createNestedArray();
JsonArray bitmapAnimation_data_3 = bitmapAnimation_data.add<JsonVariant>().to<JsonArray>();
bitmapAnimation_data_3.add(0);
bitmapAnimation_data_3.add(0);
bitmapAnimation_data_3.add(0);
Expand Down Expand Up @@ -282,7 +280,7 @@ void BuildUpdateScreenJSON(JsonObject &root)
bitmapAnimation_data_3.add(0);
bitmapAnimation_data_3.add(0);

JsonArray &bitmapAnimation_data_4 = bitmapAnimation_data.createNestedArray();
JsonArray bitmapAnimation_data_4 = bitmapAnimation_data.add<JsonVariant>().to<JsonArray>();
bitmapAnimation_data_4.add(0);
bitmapAnimation_data_4.add(0);
bitmapAnimation_data_4.add(63517);
Expand Down Expand Up @@ -348,7 +346,7 @@ void BuildUpdateScreenJSON(JsonObject &root)
bitmapAnimation_data_4.add(0);
bitmapAnimation_data_4.add(0);

JsonArray &bitmapAnimation_data_5 = bitmapAnimation_data.createNestedArray();
JsonArray bitmapAnimation_data_5 = bitmapAnimation_data.add<JsonVariant>().to<JsonArray>();
bitmapAnimation_data_5.add(0);
bitmapAnimation_data_5.add(0);
bitmapAnimation_data_5.add(0);
Expand Down Expand Up @@ -414,7 +412,7 @@ void BuildUpdateScreenJSON(JsonObject &root)
bitmapAnimation_data_5.add(0);
bitmapAnimation_data_5.add(0);

JsonArray &bitmapAnimation_data_6 = bitmapAnimation_data.createNestedArray();
JsonArray bitmapAnimation_data_6 = bitmapAnimation_data.add<JsonVariant>().to<JsonArray>();
bitmapAnimation_data_6.add(0);
bitmapAnimation_data_6.add(0);
bitmapAnimation_data_6.add(0);
Expand Down
33 changes: 17 additions & 16 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ framework = arduino
monitor_speed = 115200
upload_speed = 460800
extra_scripts = pre:extra_script.py
pixelit_version = 0.0.0-dev
build_flags =
-DMATRIX_WIDTH=32 ; Pixel cols
-DMATRIX_HEIGHT=8 ; Pixel rows
-DPIXELIT_VERSION=\"${common.pixelit_version}\"
esp32_build_flags =
${common.build_flags}
-DLDR_PIN=34
Expand All @@ -36,32 +38,33 @@ esp8266_build_flags =
-DDEFAULT_PIN_SDA="Pin_D3"
-DDEFAULT_PIN_DFPRX="Pin_D7"
-DDEFAULT_PIN_DFPTX="Pin_D8"
-DDEFAULT_PIN_ONEWIRE="Pin_D1"
-DDEFAULT_PIN_ONEWIRE="Pin_D1"
-DDEFAULT_MATRIX_TYPE=1
-DDEFAULT_LDR=GL5516
-DVBAT_PIN=0
lib_deps =
adafruit/Adafruit BME280 Library@2.2.4
adafruit/Adafruit BME680 Library@2.0.4
adafruit/Adafruit BMP280 Library@2.6.8
adafruit/Adafruit BusIO@1.16.1
adafruit/Adafruit GFX Library@1.11.11
adafruit/Adafruit BME280 Library@2.3.0
adafruit/Adafruit BME680 Library@2.0.6
adafruit/Adafruit BMP280 Library@3.0.0
adafruit/Adafruit BusIO@1.17.4
adafruit/Adafruit GFX Library@1.12.6
adafruit/Adafruit SHT31 Library@2.2.2
adafruit/Adafruit Unified Sensor@1.1.4
adafruit/Adafruit Unified Sensor@1.1.15
arduino-libraries/ArduinoHttpClient@0.6.1
bakercp/CRC32 @ 2.0.0
bblanchon/ArduinoJson@5.13.4
bakercp/CRC32 @ 2.0.1
bblanchon/ArduinoJson@7.4.3
beegee-tokyo/DHT sensor library for ESPx@1.19.0
claws/BH1750@1.3.0
fastled/FastLED@3.7.0
fastled/FastLED@3.10.3
knolleary/PubSubClient@2.8.0
Hash = https://github.com/bbx10/Hash_tng.git#1f100823284a28e8aedeae7e7f593e189fe16982
LightDependentResistor=https://github.com/QuentinCG/Arduino-Light-Dependent-Resistor-Library.git#1.4.0
links2004/WebSockets@2.4.1
links2004/WebSockets@2.7.3
marcmerlin/FastLED NeoMatrix@1.2.0
powerbroker2/DFPlayerMini_Fast@1.2.4
robtillaart/Max44009@0.6.0
robtillaart/Max44009@0.6.2
TimeLib = https://github.com/PaulStoffregen/Time.git#v1.6.1
tzapu/WiFiManager@^2.0.17

[env:ESP32_generic]
platform = espressif32
Expand All @@ -78,11 +81,10 @@ platform_packages =
framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.17
lib_deps =
${common.lib_deps}
plerup/EspSoftwareSerial@^8.2.0
WiFiManager = https://github.com/tzapu/WiFiManager.git#v2.0.17
plerup/EspSoftwareSerial@^6.11.4

[env:ESP8266_generic]
platform = espressif8266@2.6.3
platform = espressif8266@4.2.1
board = esp12e
framework = ${common.framework}
board_build.filesystem = littlefs
Expand All @@ -94,7 +96,6 @@ build_flags =
-DBUILD_SECTION="ESP8266_generic"
lib_deps =
${common.lib_deps}
tzapu/WiFiManager@^0.16.0

[env:ESP8266_d1_mini]
extends = env:ESP8266_generic
Expand Down
Loading