The skin second laser can decompose the pigment under the skin, to remove the pigment effect, multifunctional laser beauty instrument can achieve eyebrow washing, tattoo washing, freckle removal (freckles, coffee spots, age spots, pigmentation), remove eyeliner, Ota nevus and other beauty functions. This project plans a simple and portable beauty instrument with low cost, stable performance and simple operation.
The laser beauty instrument display interface using 5.6 inches STONE serial screen, backlight, rich color, a serial port is convenient and the main control board communication, touch input also omit the keyboard, the appearance of the whole beauty instrument is more simple and generous.
Main interface

The two functions achieved (eyebrow washing and tattoo washing) can be switched by the convenient part slider view designed by STONE DESIGNER, a new version of development tool. The energy, frequency adjustment and selection can be realized by the text selector part, which is coordinated with button control, status indicator, temperature, count and so on. The same interface presentation, intuitive and convenient. See Figure (1) and Figure (2) above. See the accompanying video for the effects of the switch.

STONE Features of the serial port screen
From using the old version of STONE serial screen to now using the new version of STONE serial screen, I feel that the new version of STONE screen is more convenient and better to use. The new version of STONE designer tool is still in the process of function upgrading, and there are many enhanced view controls to enrich the user experience of STONE screen interface. However, some of these enhanced controls have not yet been developed, looking forward to the new version instinct to give us more surprises! Last time, I used the new version of the curve function to do a monitor project, the real-time depiction of curves is very smooth, I think the new version of the screen should be able to draw real-time curves of 6 channels at the same time, or more channels, indicating that the master speed is high enough to meet higher application requirements.
Slider view is used for mode switching
Structure:
The slider view effect is a feature of the Slider view widget. Its structure is shown in Figure (3), where tattoo washing is component view1 and index is 0; The brow wash is part view2, and the index is 1. When sliding and switching, the index number will be fed back to the main control module from the serial port of the display (the ESP32 development board NODEMCU-32 is used for demonstration in this project).

Instruction:
When you switch to tattoo washing through sliding mode, the command feedback from the serial port is:
ST<0x11 0x20 0x00 0x0F slide_view1 0x00 0x00 0x00 0x00>ET
When switching to eyebrow washing through sliding mode, the serial port feedback instruction is as follows:
ST<0x11 0x20 0x00 0x0F slide_view1 0x00 0x00 0x00 0x01>ET
You can also change the view by setting it as follows:
set_view: Toggles the interface by index number
ST < {” cmd_code “:” set_view “, “type” : “slide_view”, “widget” : “slide_view1”, “index” : 0} > ET switch to wash the tattoo
ST < {” cmd_code “:” set_view “, “type” : “slide_view”, “widget” : “slide_view1”, “index” : 1} > ET switch to wash the eyebrow
“set_auto_play” : automatic switch interface function
ST < {” cmd_code “:” set_auto_play “, “type” : “slide_view”, “widget” : “slide_view1”, “auto_play” : 0} > ET cancelled automatically
ST<{“cmd_code”:”set_auto_play”,”type”:”slide_view”,”widget”:”slide_view1″,”auto_play”:1000}>ET switch automatically at an interval of 1 second
ST < {” cmd_code “:” set_auto_play “, “type” : “slide_view”, “widget” : “slide_view1”, “auto_play” : 3000} > ET automatic switching between 3 seconds
Set the current view autoplay (automatically switch the interface)
get_view: reads the index number of the current interface. ST<{“cmd_code”:”get_view”,”type”:”slide_view”,”widget”:”slide_view1″}>ET
When the interface mode is in tattoo washing, the serial port feedback:
ST<0x11 0x20 0x00 0x0F slide_view1 0x00 0x00 0x00 0x00>ET
When the interface mode is in eyebrow washing, the serial port feedback:
ST<0x11 0x20 0x00 0x0F slide_view1 0x00 0x00 0x00 0x01>ET
Note: The index number starts at 0. When the index number is 1, it is actually view2.
slide_indicator1:
This is the interface position indicator. You can set a more prominent color in the properties window, so that the interface is beautiful and clear. As shown in Figure (4), you can set the bandwidth of the indicator, the height, the selected color, the size of the indicator, and the X/Y position of the indicator (anchor_x, anchor_y).

png m2.jpg m2.jpg screen display will be messed up!
Text selector is used to adjust a value
The power and frequency adjustments are all part of this text selector widget.

By setting the properties in Figure (5), the text selector part can be integrated with the background, where bg color, fg color and mask color are all set as transparent color and visible num = 1. The effect can be seen in combination with Figure (1).
The important thing here is options. Discontinuous values should be formatted like this:
1:6 00; This 50; Then 00; Then 50; “00; Gathers 50; For the 00; Procedure of 50;
If you write 100-900 and selected index = 600, there will be an exception!
Text selector part directive:
0x1081 text selector Value Delivered (int type Active delivery: Delivered immediately after the selector is adjusted)
Data format:
value Indicates the last four bytes of the data section
Example: (Frequency selector control name = text_s2, options: 5-50, current 16, select 20 again)
The hexadecimal data received by the serial Assistant is:
53 54 3C 10 81 00 08 74 65 78 74 5F 73 32 00 00 00 14 3E 45 54 ???? OK
The command sent by the screen is:
ST<0x10 0x81 0x00 0x08 text_s2 0x00 0x00 0x14 >ET text_s2 Current value :20 = 0x14
button Function button:
0x1001 button The key value is delivered automatically
Key value (last byte of data section):
0x01 press down The button is pressed
0x02 press up button released (button completed to trigger click event)
For example:
Start button (name = bt11) on the interface:
ST<0x10 0x01 0x00 0x04 bt1 0x01>ET
Serial Assistant returns hexadecimal data: Validate OK
53 54 3C 10 01 00 04 62 74 31 01 3E 45 54 ????. 53 54 3C 10 01 00 04 62 74 31 01 3E 45 54 ????
Release the button (complete the button click action) actively issue the instruction —- so that 62 74 31 02 decoding is feasible!
ST<0x10 0x01 0x00 0x04 bt1 0x02>ET
Serial Assistant returns hexadecimal data: Validate OK
53 54 3C 10 01 00 04 62 74 31 02 3E 45 54 ????. 53 54 3C 10 01 00 04 62 74 31 02 3E 45 54 ????
Note: Button bt1 (ASCII code 0x62 0x74 0x31).
label counting display:
set_text sets the text that the label displays
Example setting text:
ST < {” cmd_code “:” set_text “, “type” : “label”, “widget” : “lable6”, “text”, “” 29} > ET verified OK
Programming control name:
See Figure (1) interface:
Start button name = bt1
Stop button name = bt2
Return button name = bt3
Open button name = bt5
Close button name = bt4
Energy selector name = text_s2 range 600-950, interval 50
Frequency selector name = text_s1 range 5-50, step 1
Temperature zone label name = label5
Count area label name = label6
Laser pointer icon name = image3
Interface download
Click “debug” and “download” under main menu, select the beauty instrument folder, and a sub-folder with the same name as the project will be generated; Check the dial switch behind the STONE serial screen to the “device” position above. Connect the PC to the USB port on the display directly using the USB communication cable. A new disk folder will pop up on the PC. Copy the /default folder in the subfolder of project with the same name to the “default” folder in the display storage directory. Choose to overwrite the file with the same name in the pop-up window. After copy is complete, close the folder, eject the disk, unplug the USB download cable, and restart the display.
Hardware connection and instruction description

As shown in Figure (6), TX0, RX0 and GND of NodeMCU-32S development board should be connected to the STONE serial interface board, as shown in Figure (7), so as to complete HMI information exchange. The 232 signal on the interface of the STONE serial port screen is changed into TX and RX signals required by the MCU interface through the V1.2 switching board, so that the level can be matched. In Figure (7), the left is NodeMCU-32S board. The blue (TX0) and red (RX0) wires are connected to the jumper position of the V1.2 adapter board (beside the removed blue jumper adapter), and the black wires are connected to GND.

Note during communication: The adapter board must be connected to 12V and USB at the same time. Otherwise, the communication will be abnormal.
Debug code:
The following code is compiled and downloaded to the NodeMCU-32S V1.3 development board. Connect according to Figure (7) above. See the attached video for the test effect. The code uses three layers of nesting to achieve simple start, stop, open, close button decoding, and so on can achieve more nested accurate decoding, as well as realize the current interface of the slide view sliding window component reading. ESP32 controls display and output through key click and command. See video for effect.
/*
Frank for Multifunctional laser beauty instrument in 2022.08.15
use ESP32 of NodeMCU-32s in arduino 1.8.13
use STONE HMI in shenzhen
*/
int LED_blue = 2; // IO2, turn the LED on (HIGH is the voltage level)
int ii = 0;
int iii = 0;
int f1 = 0;
int f2 = 0;
int f_Auto_mode = 1; //
int f_Hz = 1; // 1 = 20Hz, 2 = 50Hz
int DirectLight = 0; // 0 = off 1 = on
int outPower = 0; // 0 = off 1 = on
//——time use———-2022.08.15——
unsigned int led1s=0;
unsigned int time_1s=0;
unsigned int time_1m=0;
unsigned int time_1h=0;
void setup() {
Serial.begin(115200);
pinMode(LED_blue, OUTPUT);
}
void loop() {
int inChar;
// Read the message sent by the serial port and decode it briefly:
if (Serial.available() > 0) {inChar = Serial.read();}
if (inChar == 0x62) { // 0x62 0x74 0x31 is the start key of “bt1”!
if (Serial.available() > 0){inChar = Serial.read();}
if (inChar == 0x74) {
f2 = 0;
if (Serial.available() > 0){ inChar = Serial.read();}
if (inChar == 0x31) { f1 = 1; outPower = 1; } // start
else if (inChar == 0x32){ f1 = 2; outPower = 0; } // stop
else if (inChar == 0x35){ f1 = 3; DirectLight = 1;} // open
else if (inChar == 0x34){ f1 = 4; DirectLight = 0;} // close
}
}
//—————-Direct Light image ON/OFF—————-
if(DirectLight == 1)
{
Serial.println(F(“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”image3\”,\”visible\”:true}>ET”)); //
}else{
Serial.println(F(“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”image3\”,\”visible\”:false}>ET”)); //
}
//——————outPower——————————–
if(outPower == 1)
{
digitalWrite(LED_blue, HIGH); // turn the LED on (HIGH is the voltage level)
}else{
digitalWrite(LED_blue, LOW); // turn the LED on (HIGH is the voltage level)
}
//————————————-the end———————
//—time ++ ——
ii = ii + 1;
if(ii > 29){
if(f1 == 1){time_1s = time_1s + 1;}
else if(f2 == 1){time_1s = time_1s + 1;}
ii = 0;
}
if(time_1s >= 60){
time_1s = 0;
time_1m = time_1m + 1;
if(time_1m >= 60){
time_1m = 0;
time_1h = time_1h + 1;
}
}
}