Semi-Smart Remix for several LCD & OLED Screens and Digital LED Strip Lighting
Obliczymy ostateczną cenę na podstawie wybranego pliku. Sprawdzisz ją i zaakceptujesz przed płatnością.
Zapisane na tym urządzeniu.
Adding a support for color OLED and bigger LCD screens with modified UI and new features.
- Ocena
- 5 / 5
- Polubienia
- 20
- Pobrania
- 51
- Wydruki
- 3
- Wyświetlenia
- 315
- Oceny
- 2
Aktualizacja u źródła:
Informacje o modelu
- Źródło
- Printables
- Kategoria
- Prusa Parts & Upgrades
- Licencja
- Creative Commons — Attribution — Noncommercial — Share Alike
Features and Functionality (updated 2026-05-08)
v1.0.0:
Added functionality: It is now selectable to run the heater (CYCLING) and get it controlled either by Temperature or by Humidity.
When temperature has reached the target setting it turns off the heater, but keeps the fans on until the temperature starts to descend and then turns off the fans. This way, the residual heat is taken care of. When the temperature decreseas to 3 degrees under the set target temp, the heater and fans turns on again, and cycles like this indefinitely until you turn off the heater (SYS OFF). The humidity option works the same way.
This is selectable with the MODE setting. (USER TEMP, USER HUM, AUTO TEMP, AUTO HUM). The AUTO options are only there for when you have the GPIO option on, to steer the Semismart when you print.
The Timer option has an option to set the time for how long it will stay on and heat to the set target temp, and then it will turn off.
There is also a setting to set for how long it will stay off until it starts to heat again. (Set to 0 minutes to turn off repetitions).
Added some animation on some icons for fun!
Added the Voxel logo at the startup screen as well.
The UI is based on the original UI from the Semismart, which means that the MODE is selected when "CYCLING" is on, and the 4 different modes (2 if you don't have th GPIO setting on) are selected with the upper button.
The lower button in the same "CYCLING" mode changes the LED-strip if the feature is turned on. I can see that the LED-strip used the D12 pin on the NANO. It is normally used with for receiving data with SPI communication, but it is not used with screens, as we only send to screens and never receive.
To turn on the modes "DRYING" or "PRINTING" manually, you have to have set the Mode at "CYCLING" to "USER TEMP" or "USER HUM". Then press the middle button for more than 2 seconds.
Once in "DRYING" or "PRINTING" mode, you can select these 2 options with the lower button, getting into "Operation Mode". To select mode, press the middle button to open selection, then press either upper button for "By Humid" = "Drying", or lower button for "Dry Timer" = "Printing". Press the middle button again to save your selection. And press the lower button to get to the selected operational mode.
In "Drying" mode the target temperature, a run-timer and a standby-timer is set. The target temperature sets when the heater should turn off. Fans will still be running. The Run-timer sets (in minutes) for how long you want the Heater and fans to be on, and the Standby-timer sets for how long the Heater and fans are off, until they turn on again. The timers repeat untill the Semismart is turned to a different mode or OFF. If the Standby timer is set to 0, there is no repetition. The the Run-timer has reached "ETA 0:00", it turns off the Heater and fans permanently "SYS OFF".
Temperature and timers are set by pressing the upper button, rolling through Temperature, Run-Time, and Standby-timer. Press the middle button to open the settting-mode and select up/down with the upper and lower buttons. Press middle button again to save your setting.
In "Printing" mode the setting are Temperature and Humidity, again rolling through with the upper button. This mode will run for as long you have it in this mode. This is also the mode that is turned on automatically (at "AUTO TEMP" and "AUTO HUM") when the GPIO feature is on. The fans and heater is controlled by the set Temp and Humidity.
To turn these modes off, you need to long press (2 seconds) the middle button to turn off the Semismart. "SYS OFF". The fans will stay on for 45 seconds, in COOLING mode, and then turn off.
v1.1.0: (updated 2026-03-29)
Dropped support for Arduino NANO. The added features in this version finally outgrew the flash-size on the ordinary Arduino NANO. Even with the previous version there are artifacts on the 1306-screen (that I can't get rid of), due to memory area collisions from the SW and the screen.
Added Power Loss memory of previous state. In "DRYING" or "PRINTING" mode, the lower button that selects the "Operation Mode", yet another press of the button will get you to "State at Power Return", where you can select (again with the middle button first to open the selection, and then either upper or lower button to select), either "Last Mode" which remembers the state the Semismart was in before the mains power was cut, the mains return, or "Power Off", which takes the Semismart to "SYS OFF" state regardless of how it was before the power cut.
Added a Screen saver function. As you all know OLED screens have a burn in effect and given the much static text and icons, this is very obvious on the screen, even after a few weeks of run. I added a screen saver mode, that turns the screen off after 1 minute of idle time. The screen will turn on again at the press of any button. There is a setting screen where the Screen Saving timeout will be selectable, with "0" (Zero) for no screen saver.

The darker spots you see on the white border next to "PRINTING" text, is not an effect of a bad photo, but burn in effects on the OLED-pixels
v2.0.0 (updated 2026-04-13)
Added support for the Arduino Nano ESP32 Wifi module, which is more or less pin compatible with the Arduino Nano R4. The ESP32 does on the other hand not have 5 volts tolerance on the pins, which means that the pin that is the input to the Thermo sensor (Is called "Heater Temp" on the schematics and is connected to pin A7), needs some adjustement on the PCB to only allow 3.3V instead of 5V. Other than that pin, everything else should work like a charm. If you don't want to mess with the PCB and the temp sensor, there is a setting in the file "user_config.h", #define TEMP_SENSOR 1 on row 44, that can be set to 0 instead, and the system runs without the temp sensor. <-- This is not advisable if you want to get high temperatures inside your Boxx.
The system starts the whole module on Bluetooth (BT). Use your mobile phone and find a Bluetooth app that has a serial interface. For Android there is an App called "Serial Bluetooth". I have done the simplest connection possible with BT, without any passwords or keys. Once connected with BT the module starts searching for existing Wifi-networks.

On the pictures you see that it found my 2 SSID WiFi networks. Select the Wifi you wish to connect to by entering on the mobile app, the number in front of your network and it will be selected. On the following screen you are asked to insert the passphrase (password) for the Wifi-network, again using your mobile phone and the "Serial Bluetooth" app. Once connected to Wifi, it disconnects and turns off the Bluetooth section and the Semismart is now connected to Wifi.
Next step is to start up the Web-server part. and the idea is that you would be able to see all values you see on the display, on a web-page as well. On top of that, you will be able to control all functionality from the said web-page. The whole page is very rudementary, with everything (Temp, Humidity, readings, Target Temp & Humidity settings, and whatever other system settings you can set with the buttons) on one page.
The Arduino Nano ESP32 is only about 4-5 euros more than the Nano R4 ( I bought them from the official Arduino store), so totally worth it.
v2.1.1 + v2.1.2 (updated 2026-04-16)
Added OTA (Over the Air) SW update. Ofcourse this is only for the Arduino Nano ESP32 Wifi. It will be much easiser to do any SW update now, when you don't have to take down the Semismart, power it off, and remove the Arduino Nano ESP32 from the Semismart PCB.
Easiest is to use the Arduino IDE. I use (still) version 2. Set all setting you want in file "user_config.h". The process is this:
While you do have the Arduino connected to your Wifi-network.
Set all your setting in file "user_config.h"
Go to "Sketch" up on the Arduino IDE menu and select "Export Compiled Binary".
The file is created inside the folder where you have all source code. (Typically in folder "semismart_exztra". It will have created a new folder called "Build" and inside that there is another folder called "arduino.esp32.nano_nora". Inside that folder you will find the binary you will need called "semismart_exztra.ino.bin".
Open on your web browser the web-UI for the Semismart Exztra by using the IP-adress that it has gotten from your router. If you don't know what it is, press the reset button once and let the Semismart reboot. It will show the IP-address for about 10 seconds. (I.e. http://nnn.nnn.nnn.nnn)
At the bottom of the UI, there is a new section called "Firmware Upload"

Press the "Select Firmware" button and locate the binary file that I described above "semismart_exztra.ino.bin".
The press the "Upload Firmware" button to load the new firmware. When the status bar has reached 100% the Semismart will reboot automatically, and after about 10-15 seconds it will have gone back to the state that it was before you started the SW-upgrade. You should see the Splash screen on the display and then the Network status page.
v2.1.2 (updated 2026-04-17) contains bugfixes and improved temp sensor reading.
v2.2.0 (updated 2026-04-18)
I have added control on the LED-strip ov the web User interface (webUI). It is possible to select and set any of the 15 LED-stripe patterns, through a scroll down list. It is also possible to set the brightness in 5 steps. All changes are also reflected on the Display in real time. Changes made directly on the SemiSmart are also reflected on the webUI in real time.

It is much easier to select the LED Stripe pattern through the webUI, as you don't need to cycle the patterns with the buttons.
v2.2.3 (updated 2026-05-08)
I have changed the max temperature thresholds to accomodate for higher temperatures inside the BOXX. Also added the Heater temp value on the webUI. I added an algorith to make sure that the heater temp stays high without tripping the temp fuse.
After putting the INBXX together with the Semismart on Arduino Nano ESP32 and the new Heater body, I realized some things: It is not advisable to run the system WITHOUT the temperature sensor, as I had suggested previously. If you run with the Arduino NANO ESP32, you should solder a single wire to the 3.3V output on the SemiSmart PCB, and connect the temperature wire that usually gets 5V to this single soldered wire.

See pin locations in the picture.
The temperature threshold settings in the software needed some adjustments. When setting the temperature on the display or the webUI to let's say 40C degrees, the built-in security thermostat cuts the heater power already when the heater body temperature (i.e. the temperature the heater blows out from the heater element and the fans), reaches 55C degrees, and turns back on at 40C degrees. This makes it impossible to reach anything above 35C degrees inside the INBXX. I tried to set the max security temperature to 70C degrees, but then the temp-fuse cut the power at about 62-65C degrees, even though I changed the fuse to the new 70C 15A fuse as per the new instructions from Voxel. And the temp fuse does not turn back on until the temp reaches about 38-40C degrees. Again, this makes it very hard to reach more than 35-36C degrees inside the INBXX.
Now I have set the max security temp to 60C degrees to which the heater turns off and then it turns back on at 58C degrees or 30 seconds after max threshold was reached, which makes the heater operate between 58-60C degrees, which is enough the get the temperature inside the INBXX to reach the at least 40C degrees. If you still run wihout the temp sensor (and set the "TEMP_SENSOR" in "user_config.h" to 0), you should know that the heater will run too hot and the temp fuse will trigger. I have uploaded version 2.2.3 to Printables with these settings. Mind you it takes a loooong time to reach 40C degrees.
Electrical connections
YOU ONLY NEED TO DO THIS IF YOU HAVE A SCREEN WITH SPI COMMUNICATION!
Start with removing 2 SMD resistors. R10 and R14.

Remove these 2 resistors
Next you need to solder 7 wires to the backside of the Semismart PCB. Easiest to solder on the pins where the Arduino goes.

Connect these wires to your SPI screen accordningly. Some (most?) LCD screens also have LED/BLK pin that needs 5V to turn on the backlight. I soldered a wire from the VCC/5V directly to this pin on the Screen itself. SPI communication usually requires MOSI, MISO and SCK, but we don't need the MISO-pin (D12) as we are not receiveing any data from the screen.

This is the ST7796S 4" screen connector

This is the 1,5" OLED Color screen
This screen does not have the BLK/LED pin as OLED screens do not have backlighting as LCD screens have. Mind you that the pins are not in the same order for different screens, so make sure you get it right.
The code have the following SPI pins assigned to the Arduino Nano R4:
CS
SPI | Arduino |
|---|---|
CS | A0 |
RST/RES | A1 |
DC | A2 |
SDA/MOSI | D11 |
SCL/SCK | D13 |
Compile the code
Start with unzipping the Source code files.
I work with the Arduino IDE, but it is your own choice where you compile the code.
You need to preset some things before compilation and uploading to the NANO (or NANO R4).
In the file "user_config.h":
There is a section to select which screen you will use:
// ===================== Display configuration =====================
// Supported displays: Adafruit_SSD1306, Adafruit_SH110X, Adafruit ST7796S, Adafruit SSD1351
// (Set 1 for the one you are using, and 0 for the others to save memory)
#define DISPLAY_TYPE_SSD1306 0
#define DISPLAY_TYPE_SH110X 1
#define DISPLAY_TYPE_SSD1351 0
#define DISPLAY_TYPE_ST7796S 0You need to select ONE and only one of these screens, by setting "1" on your choise and "0" on the rest, otherwise the compilation will error.
With the latest updates i have done to the code, the size is finally too large to fit to the regular Arduino NANO, so I have decided to drop support to that module. Only Arduino NANO R4 is now supported by the versions after 1.0.0. Even with v1.0.0 there are artifacts on the small SSD1306 screens, because of memory area issues on the regular NANO.
This is ONLY for version 1.0.0:
You need to select if you use the NANO R4.
// Set to 1 if using Arduino Nano R4 (Cortex-M4), which has more memory
// and may allow for additional features or optimizations.
// Adjust pin definitions accordingly in system_config.h if needed.
// For other screens than the small SH1306, this is required.
#define ARDUINO_NANO_R4 0Set to "1", if you are using the NANO R4, which is required if you use any screen other than the SSD1306, which is the original smaller OLED screen, that was included in the Semismart package. You can ofcourse also use the NANO R4 with the smaller screen.
The rest of the text is for all versions.
In this file you also enable the LED-strip feature if you want:
// With Arduino Nano R4 (Cortex-M4), which has more memory,
// we can enable additional features like LED animations. Disable if you don't intend
// to use LED strip to save memory for other features.
#define LED_MANAGER_ENABLED 0 // Enable LED animations (requires WS2812B LEDs)Set "LED_MANAGER_ENABLED" to "1" if you want the feature, otherwise set to "0", which it already is per default.
V1.0.0:Select the correct Arduino (NANO or NANO R4) and the correct COM-port, compile and upload to the module.
I have not pre-compiled and uploaded any files here, as the selection is up to you.
Breadboard experimentation
In the file "user_config.h":
Change the "BREADBOARD" setting from 0 to 1.
// ===================== Breadboard usage =====================
// Set this setting to 1 of you want to use the Arduino on a
// breadboard to test out functionality or do own coding.
#define BREADBOARD 0 <---- Change this to 1 to get the setup to run on a breadboard
// ==============================================================================You can play around with the code on a breadboard you can simulate the temperature and humidity values by installing 2 potentiometers each on A3 and A6 pin on the Arduino. All setting such as the temp and humidity sensor error, will be removed with the above setting.
Remember to set the "BREADBOARD" back to "0" before you compile for your production SemiSmart.
Disclaimers
You do all this on your own responsibility. I cannot be held responsible for any mistakes or actions that may harm yourselves and/or your equipment. Only do the electrical changes on the board, if you are certain that yo uhave the adequate skills for it. Otherwise I urge you to either continue to use the small OLED screen or the larger 128x128 SH1107 screen which also runs on I2C. Mind you that the pins are not in the same order between those 2 screens.
If you find any errors in the code, please let me know and I will fix it.
If you find any of the instructions misleading or strange, please let me know and I can explain and update the text for others.