├── Nextion Usage.jpg ├── README.md ├── nextion.h └── nextion.c /Nextion Usage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guiguitz/STM32-Nextion-API/HEAD/Nextion Usage.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # STM32-Nextion-API 2 | 3 | ## Introduction 4 | This API was developed as a work for the competition team [Formula Tesla UFMG](https://formulateslaufmg.wixsite.com/teslaufmg). 5 | 6 | Library is developed and tested with Stm32f103c8t6 (Bluepill board). You can check the examples given. 7 | 8 | ## Hardware and Software requirements 9 | STM32fxxx 10 | 11 | ## Aplication 12 | The aplication I have used this code was showing Formula car data into a Nextion Dash. The application code can be found in https://github.com/Tesla-UFMG/Telemetry. 13 | 14 | ![Nextion Usage](https://github.com/guiguitz/STM32-Nextion-API/blob/master/Nextion%20Usage.jpg) 15 | 16 | ## Contact the Authors 17 | Guilherme Amorim: `guilherme.vini65@gmail.com` 18 | -------------------------------------------------------------------------------- /nextion.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void sendCommand(const char* cmd); 4 | 5 | int recvRetCommandFinished(void); 6 | 7 | int recvRetNumber(void); 8 | 9 | int recvRetString(char* buffer,int len); 10 | 11 | int nexInit(void); 12 | 13 | int NexPageShow(int Page); 14 | 15 | int NexTextSetText(int Text,const char *buffer); 16 | 17 | int NexTextGetText( int Number ,char* buffer, int len ); 18 | 19 | int NexNumberSetValue(int Number,int value); 20 | 21 | int NexNumberGetValue(int Number); 22 | 23 | int NexXfloatSetValue(int Number, int value); 24 | 25 | int NexPictureSetPic(int pic, int value); 26 | 27 | int NexButtonGetText(int Button, char *buffer, int len); 28 | 29 | int NexButtonSetText(int Button, const char *buffer); 30 | 31 | int NexCheckboxGetValue(int Checkbox); 32 | 33 | int NexCheckboxSetValue(int Checkbox,int value); 34 | 35 | int NexDSButtonGetValue(int DSButton); 36 | 37 | int NexDSButtonSetValue(int DSButton,int value); 38 | 39 | int NexDSButtonGetText(int DSButton, char *buffer, int len); 40 | 41 | int NexDSButtonSetText(int DSButton,const char *buffer); 42 | 43 | int NexGaugeGetValue(int Gauge); 44 | 45 | int NexGaugeSetValue(int Gauge,int value); 46 | 47 | int NexProgressBarGetValue(int ProgressBar); 48 | 49 | int NexProgressBarSetValue(int ProgressBar,int value); 50 | 51 | int NexRadioGetValue(int Radio); 52 | 53 | int NexRadioSetValue(int Radio,int value); 54 | 55 | int NexVariableGetValue(int Variable); 56 | 57 | int NexVariableSetValue(int Variable,int value ); 58 | 59 | int NexVariableGetText(int Variable, char *buffer, uint32_t len); 60 | 61 | int NexVariableSetText(int Variable,const char *buffer); 62 | 63 | 64 | -------------------------------------------------------------------------------- /nextion.c: -------------------------------------------------------------------------------- 1 | #include "stm32f1xx_hal.h" 2 | #include 3 | 4 | extern UART_HandleTypeDef huart3; 5 | 6 | #define NEX_RET_CMD_FINISHED (0x01) 7 | #define NEX_RET_EVENT_LAUNCHED (0x88) 8 | #define NEX_RET_EVENT_UPGRADED (0x89) 9 | #define NEX_RET_EVENT_TOUCH_HEAD (0x65) 10 | #define NEX_RET_EVENT_POSITION_HEAD (0x67) 11 | #define NEX_RET_EVENT_SLEEP_POSITION_HEAD (0x68) 12 | #define NEX_RET_CURRENT_PAGE_ID_HEAD (0x66) 13 | #define NEX_RET_STRING_HEAD (0x70) 14 | #define NEX_RET_NUMBER_HEAD (0x71) 15 | #define NEX_RET_INVALID_CMD (0x00) 16 | #define NEX_RET_INVALID_COMPONENT_ID (0x02) 17 | #define NEX_RET_INVALID_PAGE_ID (0x03) 18 | #define NEX_RET_INVALID_PICTURE_ID (0x04) 19 | #define NEX_RET_INVALID_FONT_ID (0x05) 20 | #define NEX_RET_INVALID_BAUD (0x11) 21 | #define NEX_RET_INVALID_VARIABLE (0x1A) 22 | #define NEX_RET_INVALID_OPERATION (0x1B) 23 | 24 | char ENDTERMS[]={255,255,255}; 25 | 26 | void sendCommand(const char* cmd) 27 | { 28 | 29 | while (__HAL_UART_GET_FLAG (&huart3, UART_FLAG_RXNE)) 30 | { 31 | huart3.Instance->DR; 32 | } 33 | 34 | HAL_UART_Transmit (&huart3, (uint8_t*) cmd, strlen (cmd), 50); 35 | HAL_UART_Transmit (&huart3, (uint8_t*)&ENDTERMS, 3, 50); 36 | } 37 | 38 | int recvRetCommandFinished(void) 39 | { 40 | 41 | int ret=0; 42 | uint8_t temp[4]={0}; 43 | HAL_UART_Receive (&huart3, (uint8_t*)&temp, 4, 100); 44 | 45 | if (temp[0] == NEX_RET_CMD_FINISHED && temp[1]==0xFF && temp[2]==0xFF && temp[3]==0xFF) 46 | { 47 | ret=1; 48 | } 49 | 50 | return ret; 51 | } 52 | 53 | int recvRetNumber(void) 54 | { 55 | int number=0; 56 | uint8_t temp[8]={0}; 57 | HAL_UART_Receive (&huart3, (uint8_t*)&temp, 8, 50); 58 | 59 | if (temp[0] == NEX_RET_NUMBER_HEAD && temp[5]==0xFF && temp[6]==0xFF && temp[7]==0xFF ) 60 | { 61 | number= ((uint32_t)temp[4]<<24)|((uint32_t)temp[3]<<16)|(temp[2]<<8)|(temp[1]); 62 | } 63 | 64 | return number; 65 | } 66 | 67 | int recvRetString(char* buffer,int len) 68 | { 69 | uint16_t ret=0; 70 | int str_start_flag=0; 71 | uint8_t cnt_0xff=0; 72 | char temp[20]={0}; 73 | char temp2[20]={0}; 74 | int pointer=0, i=0; 75 | uint8_t c=0; 76 | HAL_UART_Receive (&huart3, (uint8_t*)&temp2, len+4, 50); 77 | for (i=0; i=3) 86 | { 87 | break; 88 | } 89 | } 90 | else 91 | { 92 | temp[pointer]= (char) c; 93 | pointer++; 94 | } 95 | } 96 | else if (NEX_RET_STRING_HEAD==c) 97 | { 98 | str_start_flag=1; 99 | } 100 | } 101 | 102 | ret=ret>len?len : ret; 103 | strncpy (buffer, temp, pointer); 104 | return ret; 105 | } 106 | 107 | int nexInit(void) 108 | { 109 | int ret1=0; 110 | int ret2=0; 111 | 112 | sendCommand (""); 113 | sendCommand ("bkcmd=1"); 114 | ret1=recvRetCommandFinished () ; 115 | sendCommand ("page 0"); 116 | ret2=recvRetCommandFinished () ; 117 | return ret1&&ret2; 118 | } 119 | 120 | int NexPageShow(int Page) 121 | { 122 | char buffer[10]={0}; 123 | sprintf (buffer, "page %d", Page); 124 | sendCommand (buffer); 125 | return recvRetCommandFinished (); 126 | } 127 | 128 | int NexTextSetText(int Text,const char *buffer) 129 | { 130 | char cmd[50]={0}, buff[50]={0}; 131 | for (int i=0; i<20; i++) buff[i]=buffer[i]; 132 | sprintf (cmd, "t%d.txt=\"%s\"", Text, buff); 133 | sendCommand (cmd); 134 | return recvRetCommandFinished (); 135 | } 136 | 137 | int NexTextGetText( int Number ,char* buffer, int len ) 138 | { 139 | char cmd[10]={0}; 140 | sprintf (cmd, "get t%d.txt", Number); 141 | sendCommand (cmd); 142 | return recvRetString (buffer, len); 143 | } 144 | 145 | int NexNumberSetValue(int Number, int value) 146 | { 147 | char cmd[15]={0}; 148 | sprintf (cmd, "n%d.val=%d", Number, value) ; 149 | sendCommand (cmd); 150 | return recvRetCommandFinished (); 151 | } 152 | 153 | int NexNumberGetValue(int Number) 154 | { 155 | char cmd[15]={0}; 156 | sprintf (cmd, "get n%d.val", Number); 157 | sendCommand (cmd); 158 | return recvRetNumber (); 159 | } 160 | 161 | int NexXfloatSetValue(int Number, int value) 162 | { 163 | char cmd[15]={0}; 164 | sprintf (cmd, "x%d.val=%d", Number, value) ; 165 | sendCommand (cmd); 166 | return recvRetCommandFinished (); 167 | } 168 | 169 | int NexPictureSetPic(int pic, int value) 170 | { 171 | char cmd[15]={0}; 172 | sprintf (cmd, "p%d.pic=%d", pic, value); 173 | sendCommand (cmd); 174 | return recvRetCommandFinished (); 175 | } 176 | 177 | int NexButtonGetText(int Button, char *buffer, int len) 178 | { 179 | char cmd[15]={0}; 180 | sprintf (cmd, "get b%d.txt", Button); 181 | sendCommand (cmd); 182 | return recvRetString (buffer, len); 183 | } 184 | 185 | int NexButtonSetText(int Button, const char *buffer) 186 | { 187 | char cmd[50]={0}, buff[50]={0}; 188 | for (int i=0; i