Новый интерфейс
This commit is contained in:
@@ -89,7 +89,7 @@
|
||||
#define SHOW_BOOTSCREEN
|
||||
|
||||
// Show the bitmap in Marlin/_Bootscreen.h on startup.
|
||||
#define SHOW_CUSTOM_BOOTSCREEN
|
||||
//#define SHOW_CUSTOM_BOOTSCREEN
|
||||
|
||||
// Show the bitmap in Marlin/_Statusscreen.h on the status screen.
|
||||
//#define CUSTOM_STATUS_SCREEN_IMAGE
|
||||
@@ -807,7 +807,7 @@
|
||||
* When changing speed and direction, if the difference is less than the
|
||||
* value set here, it may happen instantaneously.
|
||||
*/
|
||||
//#define CLASSIC_JERK
|
||||
#define CLASSIC_JERK
|
||||
#if ENABLED(CLASSIC_JERK)
|
||||
#define DEFAULT_XJERK 10.0
|
||||
#define DEFAULT_YJERK 10.0
|
||||
@@ -817,11 +817,11 @@
|
||||
|
||||
#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
|
||||
#if ENABLED(LIMITED_JERK_EDITING)
|
||||
#define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
|
||||
#define MAX_JERK_EDIT_VALUES { 20, 20, 2, 20 } // ...or, set your own edit limits
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define DEFAULT_EJERK 1.5 // May be used by Linear Advance @lowered to keep extruder from rattling
|
||||
#define DEFAULT_EJERK 7 // May be used by Linear Advance
|
||||
|
||||
/**
|
||||
* Junction Deviation Factor
|
||||
@@ -844,7 +844,7 @@
|
||||
*
|
||||
* See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained
|
||||
*/
|
||||
//#define S_CURVE_ACCELERATION
|
||||
#define S_CURVE_ACCELERATION
|
||||
|
||||
//===========================================================================
|
||||
//============================= Z Probe Options =============================
|
||||
@@ -2279,7 +2279,7 @@ EEPROM_W25Q
|
||||
//
|
||||
//#define TFT_320x240
|
||||
//#define TFT_320x240_SPI
|
||||
//#define TFT_480x320
|
||||
#define TFT_480x320
|
||||
//#define TFT_480x320_SPI
|
||||
|
||||
//
|
||||
@@ -2299,7 +2299,7 @@ EEPROM_W25Q
|
||||
// FSMC display (MKS Robin, Alfawise U20, JGAurora A5S, REXYZ A1, etc.)
|
||||
// Upscaled 128x64 Marlin UI
|
||||
//
|
||||
#define FSMC_GRAPHICAL_TFT
|
||||
//#define FSMC_GRAPHICAL_TFT
|
||||
|
||||
//
|
||||
// TFT LVGL UI
|
||||
|
||||
@@ -634,7 +634,7 @@
|
||||
|
||||
//#define HOMING_BACKOFF_POST_MM { 2, 2, 2 } // (mm) Backoff from endstops after homing
|
||||
|
||||
//#define QUICK_HOME // If G28 contains XY do a diagonal move first
|
||||
#define QUICK_HOME // If G28 contains XY do a diagonal move first
|
||||
//#define HOME_Y_BEFORE_X // If G28 contains XY home Y before X
|
||||
//#define CODEPENDENT_XY_HOMING // If X/Y can't home without homing Y/X first
|
||||
|
||||
@@ -1588,7 +1588,7 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
|
||||
//#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
|
||||
|
||||
//#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
|
||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
||||
@@ -1619,7 +1619,7 @@
|
||||
//#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants
|
||||
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed
|
||||
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||
//#define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration
|
||||
#define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration
|
||||
#endif
|
||||
|
||||
// @section leveling
|
||||
|
||||
@@ -149,6 +149,7 @@ void TFT_FSMC::Init() {
|
||||
default: return;
|
||||
}
|
||||
|
||||
rcc_clk_enable(RCC_DMA2);
|
||||
rcc_clk_enable(RCC_FSMC);
|
||||
|
||||
gpio_set_mode(GPIOD, 14, GPIO_AF_OUTPUT_PP); // FSMC_D00
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
#include "mks_wifi_sd.h"
|
||||
|
||||
|
||||
|
||||
#include "../../MarlinCore.h"
|
||||
#include "../../lcd/ultralcd.h"
|
||||
#include "../../libs/fatfs/ff.h"
|
||||
#include "../../libs/buzzer.h"
|
||||
@@ -8,6 +11,10 @@
|
||||
|
||||
#ifdef MKS_WIFI
|
||||
|
||||
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
|
||||
#include "mks_wifi_ui.h"
|
||||
#endif
|
||||
|
||||
volatile uint8_t *file_buff=shared_mem;
|
||||
volatile uint8_t *file_buff_pos;
|
||||
volatile uint16_t file_data_size;
|
||||
@@ -55,7 +62,6 @@ void sd_delete_file(char *filename){
|
||||
|
||||
/*
|
||||
Ищет файл filename и возвращает 8.3 имя в dosfilename
|
||||
|
||||
Возвращаемое значение 1 если нашлось, 0 если нет
|
||||
*/
|
||||
|
||||
@@ -102,7 +108,9 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
volatile uint32_t dma_timeout;
|
||||
uint16_t data_size;
|
||||
int16_t save_bed,save_e0;
|
||||
|
||||
|
||||
char file_name[100];
|
||||
|
||||
save_bed=thermalManager.degTargetBed();
|
||||
save_e0=thermalManager.degTargetHotend(0);
|
||||
|
||||
@@ -114,33 +122,38 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
//safe_delay(10);
|
||||
|
||||
//Установить имя файла. Смещение на 3 байта, чтобы добавить путь к диску
|
||||
str[0]='0';
|
||||
str[1]=':';
|
||||
str[2]='/';
|
||||
file_name[0]='0';
|
||||
file_name[1]=':';
|
||||
file_name[2]='/';
|
||||
|
||||
memcpy((uint8_t *)file_name+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5));
|
||||
file_name[packet->dataLen - 5 + 3] = 0;
|
||||
|
||||
memcpy((uint8_t *)str+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5));
|
||||
str[packet->dataLen - 5 + 3] = 0;
|
||||
|
||||
file_size=(packet->data[4] << 24) | (packet->data[3] << 16) | (packet->data[2] << 8) | packet->data[1];
|
||||
DEBUG("Start file %s size %d",str,file_size);
|
||||
|
||||
//Отмонтировать SD от Marlin, Монтировать FATFs
|
||||
if(mks_wifi_sd_init()){
|
||||
ERROR("Error SD mount");
|
||||
ui.set_status((const char *)"Error SD mount",true);
|
||||
ui.update();
|
||||
mks_wifi_sd_deinit();
|
||||
return;
|
||||
}
|
||||
|
||||
//открыть файл для записи
|
||||
res=f_open((FIL *)&upload_file,str,FA_CREATE_ALWAYS | FA_WRITE);
|
||||
res=f_open((FIL *)&upload_file,file_name,FA_CREATE_ALWAYS | FA_WRITE);
|
||||
if(res){
|
||||
ERROR("File open error %d",res);
|
||||
ui.set_status((const char *)"File open error",true);
|
||||
ui.update();
|
||||
mks_wifi_sd_deinit();
|
||||
return;
|
||||
}
|
||||
|
||||
ui.set_status((const char *)"Upload file...",true);
|
||||
ui.update();
|
||||
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
|
||||
mks_update_status(file_name+3,0,file_size);
|
||||
#endif
|
||||
|
||||
//Выключить прием по UART RX, включить через DMA, изменить скорость, Выставить флаг приема по DMA
|
||||
USART1->CR1 = 0;
|
||||
@@ -218,7 +231,7 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
data_size = (*(buff+3) << 8) | *(buff+2);
|
||||
data_size -= 4; //4 байта с номером сегмента и флагами
|
||||
|
||||
DEBUG("In sector: %d data_size: %d",in_sector,data_size);
|
||||
//DEBUG("In sector: %d data_size: %d",in_sector,data_size);
|
||||
|
||||
//Если буфер полон и писать некуда, запись в файл
|
||||
if((data_size + file_data_size) > FILE_BUFFER_SIZE){
|
||||
@@ -239,12 +252,14 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
ERROR("Fsync err %d",res);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
|
||||
mks_update_status(file_name+3,file_inc_size,file_size);
|
||||
#else
|
||||
sprintf(str,"Upload %ld%%",file_inc_size*100/file_size);
|
||||
ui.set_status((const char *)str,true);
|
||||
ui.update();
|
||||
|
||||
#endif
|
||||
memset((uint8_t *)file_buff,0,FILE_BUFFER_SIZE);
|
||||
file_data_size=0;
|
||||
WRITE(MKS_WIFI_IO4, LOW); //Записано, сигнал ESP продолжать
|
||||
@@ -294,23 +309,22 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
f_close((FIL *)&upload_file);
|
||||
|
||||
if( (file_size == file_inc_size) && (file_size == file_size_writen) ){
|
||||
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
|
||||
mks_end_transmit();
|
||||
#endif
|
||||
ui.set_status((const char *)"Upload done",true);
|
||||
DEBUG("Upload ok");
|
||||
BUZZ(1000,260);
|
||||
|
||||
str[0]='0';
|
||||
str[1]=':';
|
||||
str[2]='/';
|
||||
|
||||
memcpy((uint8_t *)str+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5));
|
||||
str[packet->dataLen - 5 + 3] = 0;
|
||||
|
||||
if(!strcmp(str,"0:/Robin_Nano35.bin")){
|
||||
if(!strcmp(file_name,"0:/Robin_Nano35.bin")){
|
||||
DEBUG("Firmware found, reboot");
|
||||
safe_delay(1000);
|
||||
nvic_sys_reset();
|
||||
}
|
||||
}else{
|
||||
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
|
||||
mks_end_transmit();
|
||||
#endif
|
||||
ui.set_status((const char *)"Upload failed",true);
|
||||
DEBUG("Upload failed! File size: %d; Recieve %d; SD write %d",file_size,file_inc_size,file_size_writen);
|
||||
//Установить имя файла.
|
||||
@@ -321,8 +335,8 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
memcpy((uint8_t *)str+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5));
|
||||
str[packet->dataLen - 5 + 3] = 0;
|
||||
|
||||
DEBUG("Rename file %s",str);
|
||||
f_rename(str,"file_failed.gcode");
|
||||
DEBUG("Rename file %s",file_name);
|
||||
f_rename(file_name,"file_failed.gcode");
|
||||
|
||||
BUZZ(436,392);
|
||||
BUZZ(109,0);
|
||||
|
||||
42
Marlin/src/module/mks_wifi/mks_wifi_ui.cpp
Normal file
42
Marlin/src/module/mks_wifi/mks_wifi_ui.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
#include "mks_wifi_ui.h"
|
||||
|
||||
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
|
||||
|
||||
#include "../../lcd/tft/tft.h"
|
||||
#include "../../lcd/tft/tft_color.h"
|
||||
|
||||
extern TFT tft;
|
||||
|
||||
void mks_update_status(char *filename,int current_filesize, int file_size){
|
||||
char str[100];
|
||||
static uint32_t last_value = 200;
|
||||
uint8_t percent_done;
|
||||
|
||||
percent_done = current_filesize*100/file_size;
|
||||
if((percent_done != last_value)){
|
||||
tft.queue.reset();
|
||||
tft.canvas(0, 0, TFT_WIDTH, TFT_HEIGHT);
|
||||
tft.set_background(COLOR_BACKGROUND);
|
||||
|
||||
sprintf(str,"%s",filename);
|
||||
tft.add_text(8, 100, COLOR_WHITE, str);
|
||||
|
||||
tft.add_bar(8,150, ((TFT_WIDTH-10)*percent_done)/100, 30, COLOR_GREEN);
|
||||
|
||||
sprintf(str,"%d of %d (%d%%)",current_filesize,file_size,percent_done);
|
||||
tft.add_text(100, 150, COLOR_WHITE, str);
|
||||
|
||||
tft.queue.sync();
|
||||
last_value = percent_done;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
void mks_end_transmit(void){
|
||||
tft.queue.reset();
|
||||
tft.fill(0, 0, TFT_WIDTH, TFT_HEIGHT, COLOR_BACKGROUND);
|
||||
tft.queue.sync();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
13
Marlin/src/module/mks_wifi/mks_wifi_ui.h
Normal file
13
Marlin/src/module/mks_wifi/mks_wifi_ui.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef MKS_WIFI_UI_H
|
||||
#define MKS_WIFI_UI_H
|
||||
|
||||
#include "../../MarlinCore.h"
|
||||
|
||||
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
|
||||
|
||||
void mks_update_status(char *filename,int current_filesize, int file_size);
|
||||
void mks_end_transmit(void);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
31
README.md
31
README.md
@@ -1,9 +1,11 @@
|
||||
# Marlin 3D Printer Firmware for Flying Bear 4S and 5
|
||||
|
||||
Это конфигурация [официального Marlin](https://github.com/MarlinFirmware/Marlin) для принтера Flying Bear Ghost 4S и 5 (плата MKS Robin Nano).
|
||||
Это конфигурация [официального Marlin](https://github.com/MarlinFirmware/Marlin) для принтера Flying Bear Ghost 4S и 5 (плата MKS Robin Nano 1.x).
|
||||
|
||||
Эта ветка содержит дополнительный код для работы с модулем [MKS WIFI](https://github.com/makerbase-mks/MKS-WIFI), установленным в FB4S и FB5. Загрузка файлов через стандартный plugin в Cura.
|
||||
|
||||
Прошивка работает на принтерах Flying Bear Ghost 4S и 5. Экран работает. WIFI работает.
|
||||
|
||||
## MKS WIFI модуль
|
||||
|
||||
### Работает
|
||||
@@ -47,9 +49,9 @@
|
||||
|
||||
### Как собрать прошивку самому
|
||||
|
||||
Видео Дмитрия Соркина [youtube](https://www.youtube.com/watch?v=HirIZk0rWOQ)
|
||||
[Видео](https://www.youtube.com/watch?v=HirIZk0rWOQ) Дмитрия Соркина
|
||||
|
||||
Нужная плата, Robin Nano, уже выбрана в качестве платы по-умолчанию. В меню Platformio можно не выбирать плату, а нажать Build на самом верху. Или использовать сочетание клавиш Ctrl+Alt+B.
|
||||
Нужная плата, Robin Nano, уже выбрана в качестве платы по-умолчанию. В меню Platformio можно не выбирать плату, а использовать сочетание клавиш Ctrl+Alt+B.
|
||||
|
||||
После компиляции, готовая прошивка лежит в .pio/build/mks_robin_nano35/Robin_nano35.bin
|
||||
|
||||
@@ -75,23 +77,16 @@
|
||||
|
||||
### Настройки WIFI, если вы используете готовую прошивку
|
||||
|
||||
Если модуль уже был настроен, то возможно никакая настройка не понадобится.
|
||||
Настройки сети хранятся в самом ESP-модуле. Есть несколько вариантов настройки:
|
||||
|
||||
Если модуль не был настроен, либо по какой-то причине не смог подключиться к сети, то он запустится в режиме точки доступа с именем сети MKSWIFI??? (вместо ? будут произвольные символы). Подключитесь к этой сети, откройте страницу по адресу 192.168.4.1 и установите нужные настройки.
|
||||
|
||||
### Настройки WIFI, если вы собираете прошивку сами
|
||||
|
||||
В файле [mks_wifi_settings.h](./Marlin/src/module/mks_wifi/mks_wifi_settings.h) можно задать параметры WIFI сети.
|
||||
|
||||
Для того, чтобы эти настройки применялись при включении, "MKS_WIFI_ENABLED_WIFI_CONFIG" должен быть раскомментирован. Если закомментировать "#define MKS_WIFI_ENABLED_WIFI_CONFIG", при запуске настройки ESP модулю отправляться не будут.
|
||||
|
||||
Настройки сети хранятся в самом MKS WIFI модуле, поэтому отправлять настройки модулю при каждом старте не нужно.
|
||||
* Если модуль уже был настроен, то возможно никакая настройка не понадобится
|
||||
* Если модуль не был настроен, либо по какой-то причине не смог подключиться к сети, то он запустится в режиме точки доступа с именем сети MKSWIFI??? (вместо ? будут произвольные символы). Подключитесь к этой сети, откройте страницу по адресу 192.168.4.1 и установите нужные настройки сети.
|
||||
* Если вы собираете прошивку сами, есть возможность передать модулю настройки при запуске. Для этого в файле [mks_wifi_settings.h](./Marlin/src/module/mks_wifi/mks_wifi_settings.h) можно задать параметры WIFI сети.
|
||||
Для того, чтобы эти настройки применялись при включении, "MKS_WIFI_ENABLED_WIFI_CONFIG" должен быть включен.
|
||||
|
||||
### Состояние WIFI
|
||||
|
||||
При успешном подключении к сети (или создании сети в режиме точки доступа) в стандартный UART, который выведен на USB разъем принтера, будет выведен IP адрес и название сети.
|
||||
|
||||
IP адрес так же будет на экране.
|
||||
При успешном подключении к сети (или создании сети в режиме точки доступа) в стандартный UART, который выведен на USB разъем принтера, будет выведен IP адрес и название сети, а так же IP адрес будет отображен на экране принтера.
|
||||
|
||||
### Как понять, что WIFI работает
|
||||
|
||||
@@ -194,14 +189,12 @@ EEPROM_W25Q
|
||||
#define FSMC_GRAPHICAL_TFT
|
||||
```
|
||||
|
||||
* Классический Marlin, "графический" интерфейс.
|
||||
* Классический Marlin, "графический" интерфейс. Этот вариант используется по-умолчанию.
|
||||
|
||||
```
|
||||
#define TFT_480x320
|
||||
```
|
||||
|
||||
На данный момент с работой этого варианта есть проблемы [issues/19233](https://github.com/MarlinFirmware/Marlin/issues/19233) и использовать его пока не рекомендуется.
|
||||
|
||||
* Графический интерфейс от MKS. Этот вариант использует библиотеку LVGL и видео буфер большого размера. В МК практически не остается свободной памяти. Конфигурация размера видео буфера сделана внутри библиотеки, которую автоматически скачивает platformio и не предполагает настройки. Оставшейся памяти не достаточно для работы с WIFI модулем, поэтому этот вариант не работает c WIFI. Для его сборки необходимо выключить WIFI.
|
||||
|
||||
Для работы интерфейса нужны изображения и шрифты. После сборки прошивки они находятся в .pio/build/mks_robin_nano35/assets
|
||||
|
||||
31903
STM32F103.svd
Normal file
31903
STM32F103.svd
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user