Git Product home page Git Product logo

wt32-sqln's Introduction

License: MIT ESPIDF lgvl

WT32-SqLn

Getting started with Wireless Tag's WT32-SC01 Plus using SquareLine Studio, LVGL, and OTA updates.

Overview

I recently bought a WT32-SC01 Plus but quickly grew frustrated when it came time to use it. I tried programming it with a simple Arduino example using the 6" white USB-C cable that came with it. The WT32-SC01 Plus powered up nicely running the demo, but my Mac never created the serial device and I was unable to program anything. I found plenty of YouTube videos demonstrating it's amazing screen and performance, all in an under-$30 device, but somehow the "how did you compile then upload that application to the board?" question was never answered.

After plenty of digging and experiments and frustrating hours, I'm convinced the 6" white USB-C cable that came with my unit was either bad or it is a power-only cable. Once I switched to a known-good cable, things got easier. Here's a detailed description of what I learned in the process. Factual corrections and further contributions welcomed.

What you'll need

  1. A WT32-SC01 Plus board with programmer
  2. 8-pin MX1.25 PicoBlade dongles if you plan on using GPIOs

or

  1. A WT32-SC01 Plus board without programmer
  2. 7-pin MX1.25 PicoBlade dongles (get some 8-pin ones too if you plan on using GPIOs)
  3. A normally-open momentary push button

or

  1. A WT32-SC01 Plus board without programmer
  2. 7-pin MX1.25 PicoBlade dongles (get some 8-pin ones too if you plan on using GPIOs)
  3. A 3.3V USB-to-Serial communication board
  4. 2.54mm/0.1" pin header with suitable female connector housings

and:

  1. ESP-IDF v5.0
  2. SquareLine Studio
  3. USB-C 2A power supply

Programming

If you bought the version that includes the programmer, see the "Using the WT programmer" section.

If you have a momentary-closed button, see the "Using the USB-C port" section.

If you are particular masochistic (or ignorant of the above-two options like I was), see the "Using your own USB-to-serial board section

Debug Interface on WT32-SC01 Plus
Pin ESP32 Pin Voltage Range Remark Boot Button Serial
1 +5V 5V USB-to-serial not sufficient as power source open open/5V
2 +3.3V 3.3V For reference, not for power input open open
3 TXD0 3.3V TTL open Rx
4 RXD0 3.3V TTL open Tx
5 EN 0-3.3V Resets the ESP32 when pulled to GND open open
6 GPIO 0 0-3.3V Enters flashing mode when pulled to GND during reset button GND/open
7 GND 0V button GND

WT32-SC01 Plus Back

Using the WT programmer

WT32-SC01 Plus Programmer

If you ordered a WT32-SC01 Plus that came with its own custom programmer, you can connect it directly to the DEBUG port on the back of the WT32-SC01 Plus. It exposes the familiar EN and BOOT buttons.

If not, you can order a programmer here.

  1. If you are using a Windows or MacOS machine, make sure you have the necessary driver installed for your USB-to-serial board. It is probably going to be a CP210x or CH34X driver.

  2. Flash your application using the command idf.py flash. The device gets put automatically into flashing mode, and it will automatically reset upon completion and start running your program.

  3. Should the flashing application cannot find your device, force it into flashing mode by pressing your EN and BOOT buttons on the programmer, Release the EN button first, then the BOOT Button.

  4. Flash your application using the command idf.py flash. Wait until the flashing process completes with a Hard resetting via RTS pin... message.

  5. To run your application, reset the WT32-SC01 Plus again by pressing on the EN button.

Using the USB-C port

You can program via the USB-C port if the device is put into flashing mode. If the device is running normally, the idf.py flash command will automatically reset it and put it into flashing mode. But if it is hung or crashed, it will have to be put into flashing mode manually. However, since there is no BOOT button, you have to manually short the GPIO0 and GND pins on the Debug Interface.

Using a 7-pin MX1.25 PicoBlade dongle and a momentary-closed push-button, create a cable to connect the GPIO0 and GND pins to the normally-open terminals of the button.

Here's my DIY programming cable Boot Button. I was told of this option after hours of scouring the web and finally using a USB-to-serial programmer using the same approach as all other ESP32 MCUs. That this Boot Button doubles as a release for all my pent-up frustration is no accident. WT32-SC01 Plus DIY Boot Button Cable

The following steps assume you have an application succesfully compiled using idf.py build (see Build This Example section). To program, then run your application with the serial monitor, connect the WT32-SC01 Plus via its own USB-C port directly to your computer.

  1. If you are using a Windows or MacOS machine, make sure you have the necessary driver installed for your USB-to-serial board. It is probably going to be a CP210x or CH34X driver.

  2. Flash your application using the command idf.py flash. If the device gets put automatically into flashing mode, it will automatically reset upon completion and start running your program.

  3. If the flashing application cannot find your device, force it into flashing mode by pressing your Boot Button, then pressing the RST button on the back of the WT32-SC01 Plus. Release the RST button first, then the Boot Button.

  4. Flash your application using the command idf.py flash. Wait until the flashing process completes with a Hard resetting via RTS pin... message.

  5. To run your application, reset the WT32-SC01 Plus again. The serial monitor will be automatically connected.

Using your own USB-to-serial board

Using a 7-pin MX1.25 PicoBlade dongle and a 2.54mm/0.1" pin header connector housing that matches your board, create a cable to connect the TX, RX, and GND pins on the Debug Interface to the RX, TX, and GND pins respectively on your USB-to-serial communication board, and using a separate 1-pin connector housing, connect the GPIO0 pin on the Debug Interface to a second exposed GND pin on your USB-to-serial communication board. It is important that it be possible to disconnect the GPIO0 wire from the USB-to-serial board without disconnecting the other wires.

Here's my DIY programming cable. I did connect the 5V line so I could easily identify which side of the connector was "up": the red wire goes with the VCC pin. Notice how the white "GPIO0" wire is connected to a separate exposed GND pin on the programmer.

WT32-SC01 Plus DIY Programmer Cable

The following steps assume you have an application succesfully compiled using idf.py build (see Build This Example section).

  1. If you are using a Windows or MacOS machine, make sure you have the necessary driver installed for your USB-to-serial board. Refer to the documentation provided by your board vendor for details. It is probably going to be a CP210x or CH34X driver.

  2. To enter flashing mode, connect the GPIO0 wire to the GND pin, then press the RST button on the back of the WT32-SC01 Plus.

  3. Flash your application using the command idf.py flash. Wait until the flashing process completes with a Hard resetting via RTS pin... message. Skip to step 6 if you are not using the serial monitor to debug your application.

  4. Leave the GPIO0 wire connected to the GND pin and reset the WT32-SC01 Plus again.

  5. Start the serial monitor using the command idf.py monitor. Wait until the monitor is running indicated by the following message:

--- idf_monitor on /dev/cu.wchusbserial54340143141 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
  1. To run your application, disconnect the GPIO0 wire, then reset the WT32-SC01 Plus again.

OTA Updates

This trivial example application includes over-the-air (OTA) update cability. Once the example application is flashed using the serial communication board, you can use OTA updates instead for subsequent updates but takes longer to flash (approx 2mins). As long as you do not modify the code up to the point where the spash screen is replaced with the main screen, OTA should remain functional.

  1. Build the latest version of the application using the command idf.py build

  2. Start the OTA server using the command python webserver.py

  3. Reset your WT32-SC01 Plus

  4. While the splash screen is displayed, tap the project name 5 times to trigger an OTA upgrade.

For the upgrade to complete succesfully, you must have correctly specified your WiFi credentials and OTA server certificate when building.

Squareline Studio

To add support for the WT32-SC01 Plus, copy the content of the SquareLine/boards directory into your Squareline Studio installation using the command

$ cp -r SquareLine/boards/* <Path to Squareline Studio installation>/boards

e.g. on my Mac:

$ cp -r SquareLine/boards/* /Applications/Squareline_Studio.app/Contents/boards

Restart Squareline Studio if it is was already running.

You'll find the Squareline Studio project for this example in SquareLine/SquareLine_Project.spj. When exporting your UI files, export them in the main/ui directory

Building This Example

Make sure you are using esp-idf version 5.0.2. It looks like the IDF installer installs the head of the main branch, not a stable release.

% cd <path/to/your/esp-idf>
% git checkout v5.0.2
% git submodule update
% ./install.sh esp32,esp32s3

After cloning this respository:

  1. Update the component submodules using the commands git submodule init and git submodule update --progress. Be patient. This can take a while.

  2. Generate a self-signed certificate for the OTA https server using the command openssl req -x509 -newkey rsa:2048 -keyout server_certs/ca_key.pem -out server_certs/ca_cert.pem -days 365 -nodes. When prompted for the Common Name (CN), enter the IP address of the server that the WT32-SC01 Plus will connect to.

  3. Set your target device using the command idf.py set-target esp32s3

  4. Copy the file secrets.h into the 'main' directory, and edit it to specify your WiFi credentials and OTA server certificate. The certificate can be found in the file server_certs/ca_cert.pem. ToDo: replace with menuconfig and get the certificate compiled into the binary directly.

  5. Build the demo application using the command idf.py build

Screenshots

GPIOs

Only 6 GPIOs are exposed via the 8-pin MX1.25 PicoBlade Extended I/O interface.

Extended I/O Interface on WT32-SC01 Plus
Pin ESP32 Pin Voltage Range Remark
1 +5V 5V+/-5% Input or output
2 GND 0V Ground
3 GPIO 10 0-3.3V
4 GPIO 11 0-3.3V
5 GPIO 12 0-3.3V
6 GPIO 13 0-3.3V
7 GPIO 14 0-3.3V
8 GPIO 21 0-3.3V

Partitions

This example uses a custom partition for maximum application size. Even though the example application is only 1.4MB, the ESP32-S3 is configured with two 4032KB partitions, the largest OTA partitions you can have.

# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,16K,
otadata,data,ota,0xd000,8K,
phy_init,data,phy,0xf000,4K,
ota_0,app,ota_0,0x10000,4032K,
ota_1,app,ota_1,0x400000,4032K,

Refer to Partition Tables for more details about trade-offs. Note that you cannot modify partitions via OTA. A change in partitions requires serial flashing.

Lanscape Orientation

If you want to design a UI in landscape orientation, simply:

  1. In the file 'main/devices/conf_WT32SCO1-Plus.h', define the 'LANDSCAPE' symbol.
  2. In SquareLine Studio's Project Settings, set the width to 480, height to 320, and orientation to 90 degrees

Landscape Settings

ToDo

  • Get my code configurable using menuconfig

3D-Printed Cases

Here is a set of resources for 3D printed cases

References

wt32-sqln's People

Contributors

janick avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

wt32-sqln's Issues

No upload happening..

Really appreciate this detailed description of possible routes to go. I was able to upload once to this board over usb-c, not doing anything special. The second time I tried, I ran into the issue you describe.

My board came with a jst-connector, and I'm connecting pin 0 to gnd to get a boot switch. This makes my board show up on com23 instead of 22 when it's running the sketch. The problem is that nothing will upload. esptool just hangs after Serial port COM23, no errors, nothing.

I've tried pressing reset while boot is low, then releasing reset and lastly releasing boot. I've also tried holding boot the whole time while trying to upload.

CURRENT: upload_protocol = esptool
Looking for upload port...
Auto-detected: COM23
Forcing reset using 1200bps open/close on port COM23
Waiting for the new upload port...
Uploading .pio\build\WT32-SC01-PLUS\firmware.bin
esptool.py v4.5
Serial port COM23

Thank you - IO ideas

Hi Janick, just a quick thank you for now, I just found your repo. Some days ago my 2 pcs of SC01 Plus arrived, and while desperately trying to program them a Hello world with 8ms thru USB-C (seems that I managed to brick one of them, hope the right programmer revives it) and finding almost no information, you came to my rescue. I was even thinking to switch to the plain SC01 version: more info, more IO (with standard pin headers), extension boards available, but I am tempted by the prettier and faster display. have to compromise.

Your Boot Button looks great! I have a similar lying around somewhere, will do it!

I am looking to interface the SC01 Plus with some of my CNC machines first, so I will need IO to some MOSFET and relay drivers, motor control, PWM output for LED drivers, maybe I2C or SPI input. Will buy some of those 8-pin MX1.25 connectors (thank you for showing the source, I found no info how they are even called)
Do you have an idea what existing IO extension board or ICs to use, in terms of what there are more examples for, software driver libraries? Considering the few available IO lines, I may rather choose to interface everything thru the RS485, making my on data bus with all my peripherals (with PIC controllers to convert everything to RS485), but how is serial communication supported by software libraries? I do not have much experience in ESP32 programming, previously I programmed the Microchip family microcontrollers.

sorry to barrage you with questions, (there will be more if I didn't scare you away) you're my only source of wisdom for now.

Demo Squareline Project

Thanks for the useful repo. In the readme it says :

  1. Build the demo application using the command idf.py build

Where is the demo UI? Is there supposed to be some demo squareline files inside main/ui?

config psram in vscode platformio

Hello Janick

I used board wt32-sc01-plus

Can you help me to configuration platformio.ini file ?

I spend time to configuration vscode -> plateformio to use psram but it is not working.

this is my configuration file

File platformio.ini
; [env:WT32-SC01-PLUS]
[env:esp32s3box]
platform = espressif32
board = esp32s3box
framework = arduino
upload_port = COM22
monitor_speed = 115200
upload_speed = 921600
board_build.f_cpu = 240000000L
board_build.f_flash = 80000000L
board_build.arduino.partitions = default_16MB.csv
board_build.flash_mode = qio
board_build.arduino.memory_type = qio_opi
build_flags =
-DESP32S3
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-DCONFIG_MBEDTLS_DYNAMIC_BUFFER=1
-DCONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=1
-DCONFIG_SPIRAM_CACHE_WORKAROUND=1

board_upload.flash_size = 16MB
lib_deps =
SPI
lvgl/lv_arduino@^3.0.1
lovyan03/LovyanGFX@^1.1.9
bblanchon/ArduinoJson@^6.21.3

my code
float psramsize;
void setup(void)
{
SERIALBEGIN(_buad);
// init_sdcard();
lv_driver_tft();

multi_heap_info_t info;
heap_caps_get_info(&info, MALLOC_CAP_SPIRAM);
psramInit() ? Serial.println("\nThe PSRAM is correctly initialized") : Serial.println("\nPSRAM does not work");
}
unsigned long _ms = false;
void loop()
{
lv_task_handler();
if( millis() > _ms ){
_ms = millis() + 3000;
const float use_heap_memory = 100 - (static_cast(esp_get_free_heap_size())/ ESP.getHeapSize() ) * 100;
DEBUG_PRINTF("heap memory using : %.2f %%", use_heap_memory );
DEBUG_PRINTF("\tpsram : %d/%d\n", ESP.getFreePsram(), ESP.getPsramSize());
}
delay(5);
}

Thank you so much.

OTA problem

Hello sir i have WT32 and squareline i would like to run the squareline exported code on my WT32 but when i follow your instructions it says that i need to work with OTA, i do not know if i can skip this step or disable OTA in your peoject so that i just run simple sqaureline project on WT32 and if you have another way to do that i will be glad to show me.

Thanks.

Failed build

Most likely I'm missing a step but, after doing:

bringing all submodules in
idf.py set-target esp32
idf.py build

I get the following error:

/Dev/CNC/WT32-SqLn/components/LovyanGFX/src/lgfx/v1/misc/pixelcopy.cpp: In constructor 'lgfx::v1::pixelcopy_t::pixelcopy_t(const void*, lgfx::v1::color_depth_t, lgfx::v1::color_depth_t, bool, const void*, uint32_t)':
/Dev/CNC/WT32-SqLn/components/LovyanGFX/src/lgfx/v1/misc/pixelcopy.cpp:39:25: error: member 'lgfx::v1::pixelcopy_t::<anonymous>' is used uninitialized [-Werror=uninitialized]
   39 |     , src_mask  ( (1 << src_bits) - 1 )
      |                         ^~~~~~~~
/Dev/CNC/WT32-SqLn/components/LovyanGFX/src/lgfx/v1/misc/pixelcopy.cpp:40:25: error: member 'lgfx::v1::pixelcopy_t::<anonymous>' is used uninitialized [-Werror=uninitialized]
   40 |     , dst_mask  ( (1 << dst_bits) - 1 )
      |                         ^~~~~~~~
cc1plus: some warnings being treated as errors
[702/1148] Building CXX object esp-idf/...yanGFX.dir/src/lgfx/v1/LGFXBase.cpp.objninja: build stopped: subcommand failed.
ninja failed with exit code 1, output of the command is in the /Dev/CNC/WT32-SqLn/build/log/idf_py_stderr_output_44835 and /Dev/CNC/WT32-SqLn/build/log/idf_py_stdout_output_44835

Any suggestions?

Wake-up Pin

hi, esp has a function esp_sleep_enable_ext0_wakeup, tell me which pin is responsible for the output from deep sleep?

VSC no cmake list

hello, i try compile in vsc but i have problem. Who not found cmakelist?
` Executing task: cmake -G Ninja -DPYTHON_DEPS_CHECKED=1 -DESP_PLATFORM=1 -B c:\Users\Patryk\WT32-SqLn\build -S c:\Users\Patryk\WT32-SqLn

-- Found Git: C:/Users/Patryk/vsc/.espressif/tools/idf-git/2.39.2/cmd/git.exe (found version "2.39.2.windows.1")
-- Component directory C:/Users/Patryk/WT32-SqLn/components/LovyanGFX does not contain a CMakeLists.txt file. No component will be added
-- Component directory C:/Users/Patryk/WT32-SqLn/components/lvgl does not contain a CMakeLists.txt file. No component will be added
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- The ASM compiler identification is GNU
-- Found assembler: C:/Users/Patryk/vsc/.espressif/tools/xtensa-esp32-elf/esp-12.2.0_20230208/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Users/Patryk/vsc/.espressif/tools/xtensa-esp32-elf/esp-12.2.0_20230208/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Users/Patryk/vsc/.espressif/tools/xtensa-esp32-elf/esp-12.2.0_20230208/xtensa-esp32-elf/bin/xtensa-esp32-elf-g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Building ESP-IDF components for target esp32
Processing 2 dependencies:
[1/2] espressif/fmt (9.1.0)
[2/2] idf (5.1.2)
CMake Error at C:/Users/Patryk/vsc/esp/esp-idf/tools/cmake/build.cmake:266 (message):
Failed to resolve component 'LovyanGFX'.
Call Stack (most recent call first):
C:/Users/Patryk/vsc/esp/esp-idf/tools/cmake/build.cmake:302 (__build_resolve_and_add_req)
C:/Users/Patryk/vsc/esp/esp-idf/tools/cmake/build.cmake:595 (__build_expand_requirements)
C:/Users/Patryk/vsc/esp/esp-idf/tools/cmake/project.cmake:547 (idf_build_process)
CMakeLists.txt:29 (project)

-- Configuring incomplete, errors occurred!
See also "C:/Users/Patryk/WT32-SqLn/build/CMakeFiles/CMakeOutput.log".

  • The terminal process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command cmake -G Ninja -DPYTHON_DEPS_CHECKED=1 -DESP_PLATFORM=1 -B c:\Users\Patryk\WT32-SqLn\build -S c:\Users\Patryk\WT32-SqLn" terminated with exit code: 1. `

ZIP-file for SquareLine

Hello.
The wt32_sc01_plus.zip is missing in Squareline board folder.
Is it possible to add it somehow?

Looks great - case

Found your repository, your work and detail in this github page is awesome. thank you.
two things:

  1. would you consider sharing your step file for the 3d case?
  2. have you see the openHASP project that utilizes this device? openhasp.com/ its come a long way!

connection diagram of the programmer

Hi, thanks for your article, it helped me a lot to figure out that usb-c was not created for downloading a sketch
But I have a question, how to connect the programmer in wt32-sc01 plus
image
it seemed to me mlm on the attached screenshot, you have changed the rx and tx places, could you attach a clear connection diagram of the programmer?
and I understand that you are powering wt32-sc01 plus from 3v3?

Failed build: LCD_CAM_LCD_UPDATE_REG

Started fresh with everything today, getting this error trying to build:

`/home/me/git/WT32-SqLn/components/LovyanGFX/src/lgfx/v1/platforms/esp32s3/Bus_Parallel8.cpp: In member function 'virtual void lgfx::v1::Bus_Parallel8::writeBytes(const uint8_t*, uint32_t, bool, bool)':
/home/me/git/WT32-SqLn/components/LovyanGFX/src/lgfx/v1/platforms/esp32s3/Bus_Parallel8.cpp:354:70: error: 'LCD_CAM_LCD_UPDATE_REG' was not declared in this scope; did you mean 'LCD_CAM_LCD_UPDATE_M'?

354 | *reg_lcd_user = LCD_CAM_LCD_CMD | LCD_CAM_LCD_CMD_2_CYCLE_EN | LCD_CAM_LCD_UPDATE_REG | LCD_CAM_LCD_START;`

The same error occurs with Bus_Parallel16.cpp.
I'm building on Ubuntu 22.10 with Python 3.10.7
I've tried the earlier versions of LovyanGFX (1.1.15, 1.1.16) to no avail.

USB C Programing with a poorly designed jack

This may not be the best forum to post this but this is something that clearly caused an enormous amount of frustration.

I got the WT32-SC01 not the plus. But they visually seem to be the same surface mounted port.
I had the same issues with the com port not showing up. The board would power up. But not show up as a port I could program to.

Fortunately I took the stupid approach and just forced it in harder. It was more force than seems reasonable. There was an audible click and the plug went in another fraction of a milometer. This is definitely not a typical thing for USB C: a click when fully seated, but this component seems to be that way.

It showed up at a com port. And I was able to program it as a esp32 wrover kit.

I still can't figure out how to get everything working. As there are few examples, but I guess that is the downside to a lesser known board.

Thank you for making this tutorial to help people.

Error on build project

Hi, thanks for the guide bro,

I need help for the build project.
This is my config for export path ui in squareline:
image

I I followed the steps described on your page, however, trying to execute the build command idf.py build is returning an error in the ui.c file when you need these methods:
image

This is error in terminal:
image

Any idea how to solve this ?

Best regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.