Browse Source

Новый интерфейс

pull/6/head
Sergey 4 years ago
parent
commit
e84d17a3b9
  1. 14
      Marlin/Configuration.h
  2. 6
      Marlin/Configuration_adv.h
  3. 1
      Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp
  4. 58
      Marlin/src/module/mks_wifi/mks_wifi_sd.cpp
  5. 42
      Marlin/src/module/mks_wifi/mks_wifi_ui.cpp
  6. 13
      Marlin/src/module/mks_wifi/mks_wifi_ui.h
  7. 31
      README.md
  8. 31903
      STM32F103.svd
  9. BIN
      firmware/all_drv_2208/Robin_nano35.bin
  10. BIN
      firmware/fb_4s/Robin_nano35.bin
  11. BIN
      firmware/fb_5/Robin_nano35.bin

14
Marlin/Configuration.h

@ -89,7 +89,7 @@
#define SHOW_BOOTSCREEN #define SHOW_BOOTSCREEN
// Show the bitmap in Marlin/_Bootscreen.h on startup. // 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. // Show the bitmap in Marlin/_Statusscreen.h on the status screen.
//#define CUSTOM_STATUS_SCREEN_IMAGE //#define CUSTOM_STATUS_SCREEN_IMAGE
@ -807,7 +807,7 @@
* When changing speed and direction, if the difference is less than the * When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously. * value set here, it may happen instantaneously.
*/ */
//#define CLASSIC_JERK #define CLASSIC_JERK
#if ENABLED(CLASSIC_JERK) #if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0 #define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 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 #define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
#if ENABLED(LIMITED_JERK_EDITING) #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
#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 * Junction Deviation Factor
@ -844,7 +844,7 @@
* *
* See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained * See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained
*/ */
//#define S_CURVE_ACCELERATION #define S_CURVE_ACCELERATION
//=========================================================================== //===========================================================================
//============================= Z Probe Options ============================= //============================= Z Probe Options =============================
@ -2279,7 +2279,7 @@ EEPROM_W25Q
// //
//#define TFT_320x240 //#define TFT_320x240
//#define TFT_320x240_SPI //#define TFT_320x240_SPI
//#define TFT_480x320 #define TFT_480x320
//#define TFT_480x320_SPI //#define TFT_480x320_SPI
// //
@ -2299,7 +2299,7 @@ EEPROM_W25Q
// FSMC display (MKS Robin, Alfawise U20, JGAurora A5S, REXYZ A1, etc.) // FSMC display (MKS Robin, Alfawise U20, JGAurora A5S, REXYZ A1, etc.)
// Upscaled 128x64 Marlin UI // Upscaled 128x64 Marlin UI
// //
#define FSMC_GRAPHICAL_TFT //#define FSMC_GRAPHICAL_TFT
// //
// TFT LVGL UI // TFT LVGL UI

6
Marlin/Configuration_adv.h

@ -634,7 +634,7 @@
//#define HOMING_BACKOFF_POST_MM { 2, 2, 2 } // (mm) Backoff from endstops after homing //#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 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 //#define CODEPENDENT_XY_HOMING // If X/Y can't home without homing Y/X first
@ -1588,7 +1588,7 @@
#endif #endif
#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 //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
#if ENABLED(BABYSTEP_ZPROBE_OFFSET) #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
@ -1619,7 +1619,7 @@
//#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants //#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 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 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 #endif
// @section leveling // @section leveling

1
Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp

@ -149,6 +149,7 @@ void TFT_FSMC::Init() {
default: return; default: return;
} }
rcc_clk_enable(RCC_DMA2);
rcc_clk_enable(RCC_FSMC); rcc_clk_enable(RCC_FSMC);
gpio_set_mode(GPIOD, 14, GPIO_AF_OUTPUT_PP); // FSMC_D00 gpio_set_mode(GPIOD, 14, GPIO_AF_OUTPUT_PP); // FSMC_D00

58
Marlin/src/module/mks_wifi/mks_wifi_sd.cpp

@ -1,5 +1,8 @@
#include "mks_wifi_sd.h" #include "mks_wifi_sd.h"
#include "../../MarlinCore.h"
#include "../../lcd/ultralcd.h" #include "../../lcd/ultralcd.h"
#include "../../libs/fatfs/ff.h" #include "../../libs/fatfs/ff.h"
#include "../../libs/buzzer.h" #include "../../libs/buzzer.h"
@ -8,6 +11,10 @@
#ifdef MKS_WIFI #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=shared_mem;
volatile uint8_t *file_buff_pos; volatile uint8_t *file_buff_pos;
volatile uint16_t file_data_size; volatile uint16_t file_data_size;
@ -55,7 +62,6 @@ void sd_delete_file(char *filename){
/* /*
Ищет файл filename и возвращает 8.3 имя в dosfilename Ищет файл filename и возвращает 8.3 имя в dosfilename
Возвращаемое значение 1 если нашлось, 0 если нет Возвращаемое значение 1 если нашлось, 0 если нет
*/ */
@ -103,6 +109,8 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
uint16_t data_size; uint16_t data_size;
int16_t save_bed,save_e0; int16_t save_bed,save_e0;
char file_name[100];
save_bed=thermalManager.degTargetBed(); save_bed=thermalManager.degTargetBed();
save_e0=thermalManager.degTargetHotend(0); save_e0=thermalManager.degTargetHotend(0);
@ -114,12 +122,12 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
//safe_delay(10); //safe_delay(10);
//Установить имя файла. Смещение на 3 байта, чтобы добавить путь к диску //Установить имя файла. Смещение на 3 байта, чтобы добавить путь к диску
str[0]='0'; file_name[0]='0';
str[1]=':'; file_name[1]=':';
str[2]='/'; file_name[2]='/';
memcpy((uint8_t *)str+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5)); memcpy((uint8_t *)file_name+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5));
str[packet->dataLen - 5 + 3] = 0; file_name[packet->dataLen - 5 + 3] = 0;
file_size=(packet->data[4] << 24) | (packet->data[3] << 16) | (packet->data[2] << 8) | packet->data[1]; 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); DEBUG("Start file %s size %d",str,file_size);
@ -127,20 +135,25 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
//Отмонтировать SD от Marlin, Монтировать FATFs //Отмонтировать SD от Marlin, Монтировать FATFs
if(mks_wifi_sd_init()){ if(mks_wifi_sd_init()){
ERROR("Error SD mount"); ERROR("Error SD mount");
ui.set_status((const char *)"Error SD mount",true);
ui.update();
mks_wifi_sd_deinit(); mks_wifi_sd_deinit();
return; 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){ if(res){
ERROR("File open error %d",res); ERROR("File open error %d",res);
ui.set_status((const char *)"File open error",true);
ui.update();
mks_wifi_sd_deinit(); mks_wifi_sd_deinit();
return; return;
} }
ui.set_status((const char *)"Upload file...",true); #if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
ui.update(); mks_update_status(file_name+3,0,file_size);
#endif
//Выключить прием по UART RX, включить через DMA, изменить скорость, Выставить флаг приема по DMA //Выключить прием по UART RX, включить через DMA, изменить скорость, Выставить флаг приема по DMA
USART1->CR1 = 0; 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 = (*(buff+3) << 8) | *(buff+2);
data_size -= 4; //4 байта с номером сегмента и флагами 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){ if((data_size + file_data_size) > FILE_BUFFER_SIZE){
@ -240,11 +253,13 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
break; 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); sprintf(str,"Upload %ld%%",file_inc_size*100/file_size);
ui.set_status((const char *)str,true); ui.set_status((const char *)str,true);
ui.update(); ui.update();
#endif
memset((uint8_t *)file_buff,0,FILE_BUFFER_SIZE); memset((uint8_t *)file_buff,0,FILE_BUFFER_SIZE);
file_data_size=0; file_data_size=0;
WRITE(MKS_WIFI_IO4, LOW); //Записано, сигнал ESP продолжать 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); f_close((FIL *)&upload_file);
if( (file_size == file_inc_size) && (file_size == file_size_writen) ){ 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); ui.set_status((const char *)"Upload done",true);
DEBUG("Upload ok"); DEBUG("Upload ok");
BUZZ(1000,260); BUZZ(1000,260);
str[0]='0'; if(!strcmp(file_name,"0:/Robin_Nano35.bin")){
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")){
DEBUG("Firmware found, reboot"); DEBUG("Firmware found, reboot");
safe_delay(1000); safe_delay(1000);
nvic_sys_reset(); nvic_sys_reset();
} }
}else{ }else{
#if ENABLED(TFT_480x320) || ENABLED(TFT_480x320_SPI)
mks_end_transmit();
#endif
ui.set_status((const char *)"Upload failed",true); 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); 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)); memcpy((uint8_t *)str+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5));
str[packet->dataLen - 5 + 3] = 0; str[packet->dataLen - 5 + 3] = 0;
DEBUG("Rename file %s",str); DEBUG("Rename file %s",file_name);
f_rename(str,"file_failed.gcode"); f_rename(file_name,"file_failed.gcode");
BUZZ(436,392); BUZZ(436,392);
BUZZ(109,0); BUZZ(109,0);

42
Marlin/src/module/mks_wifi/mks_wifi_ui.cpp

@ -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

@ -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

@ -1,9 +1,11 @@
# Marlin 3D Printer Firmware for Flying Bear 4S and 5 # 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. Эта ветка содержит дополнительный код для работы с модулем [MKS WIFI](https://github.com/makerbase-mks/MKS-WIFI), установленным в FB4S и FB5. Загрузка файлов через стандартный plugin в Cura.
Прошивка работает на принтерах Flying Bear Ghost 4S и 5. Экран работает. WIFI работает.
## MKS 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 После компиляции, готовая прошивка лежит в .pio/build/mks_robin_nano35/Robin_nano35.bin
@ -75,23 +77,16 @@
### Настройки WIFI, если вы используете готовую прошивку ### Настройки 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 модулю отправляться не будут. * Если модуль уже был настроен, то возможно никакая настройка не понадобится
* Если модуль не был настроен, либо по какой-то причине не смог подключиться к сети, то он запустится в режиме точки доступа с именем сети MKSWIFI??? (вместо ? будут произвольные символы). Подключитесь к этой сети, откройте страницу по адресу 192.168.4.1 и установите нужные настройки сети.
Настройки сети хранятся в самом MKS WIFI модуле, поэтому отправлять настройки модулю при каждом старте не нужно. * Если вы собираете прошивку сами, есть возможность передать модулю настройки при запуске. Для этого в файле [mks_wifi_settings.h](./Marlin/src/module/mks_wifi/mks_wifi_settings.h) можно задать параметры WIFI сети.
Для того, чтобы эти настройки применялись при включении, "MKS_WIFI_ENABLED_WIFI_CONFIG" должен быть включен.
### Состояние WIFI ### Состояние WIFI
При успешном подключении к сети (или создании сети в режиме точки доступа) в стандартный UART, который выведен на USB разъем принтера, будет выведен IP адрес и название сети. При успешном подключении к сети (или создании сети в режиме точки доступа) в стандартный UART, который выведен на USB разъем принтера, будет выведен IP адрес и название сети, а так же IP адрес будет отображен на экране принтера.
IP адрес так же будет на экране.
### Как понять, что WIFI работает ### Как понять, что WIFI работает
@ -194,14 +189,12 @@ EEPROM_W25Q
#define FSMC_GRAPHICAL_TFT #define FSMC_GRAPHICAL_TFT
``` ```
* Классический Marlin, "графический" интерфейс. * Классический Marlin, "графический" интерфейс. Этот вариант используется по-умолчанию.
``` ```
#define TFT_480x320 #define TFT_480x320
``` ```
На данный момент с работой этого варианта есть проблемы [issues/19233](https://github.com/MarlinFirmware/Marlin/issues/19233) и использовать его пока не рекомендуется.
* Графический интерфейс от MKS. Этот вариант использует библиотеку LVGL и видео буфер большого размера. В МК практически не остается свободной памяти. Конфигурация размера видео буфера сделана внутри библиотеки, которую автоматически скачивает platformio и не предполагает настройки. Оставшейся памяти не достаточно для работы с WIFI модулем, поэтому этот вариант не работает c WIFI. Для его сборки необходимо выключить WIFI. * Графический интерфейс от MKS. Этот вариант использует библиотеку LVGL и видео буфер большого размера. В МК практически не остается свободной памяти. Конфигурация размера видео буфера сделана внутри библиотеки, которую автоматически скачивает platformio и не предполагает настройки. Оставшейся памяти не достаточно для работы с WIFI модулем, поэтому этот вариант не работает c WIFI. Для его сборки необходимо выключить WIFI.
Для работы интерфейса нужны изображения и шрифты. После сборки прошивки они находятся в .pio/build/mks_robin_nano35/assets Для работы интерфейса нужны изображения и шрифты. После сборки прошивки они находятся в .pio/build/mks_robin_nano35/assets

31903
STM32F103.svd

File diff suppressed because it is too large

BIN
firmware/all_drv_2208/Robin_nano35.bin

Binary file not shown.

BIN
firmware/fb_4s/Robin_nano35.bin

Binary file not shown.

BIN
firmware/fb_5/Robin_nano35.bin

Binary file not shown.
Loading…
Cancel
Save