From aab4ed17b94f54813368201d3a0cba3f3d432589 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 19 Oct 2022 20:04:06 +0200 Subject: integrate protocol code into stm32 code --- stm32f091/main.c | 1 - 1 file changed, 1 deletion(-) (limited to 'stm32f091/main.c') diff --git a/stm32f091/main.c b/stm32f091/main.c index 9235f1b..7cb0718 100644 --- a/stm32f091/main.c +++ b/stm32f091/main.c @@ -16,7 +16,6 @@ int main() { }); ws_backlog_alloc(24 * 60); - ws_sensor_read(); xTaskCreate(ws_sensor_read_task, "sensor", 128, NULL, 1, NULL); vTaskStartScheduler(); -- cgit v1.2.3 From 7a1316483ff8962f581d686f4e812c7ec5a2b6cc Mon Sep 17 00:00:00 2001 From: lonkaars Date: Tue, 25 Oct 2022 18:08:28 +0200 Subject: finish merge --- stm32f091/esp8266.c | 2 +- stm32f091/main.c | 9 --------- stm32f091/setup.c | 13 +++++++++++-- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'stm32f091/main.c') diff --git a/stm32f091/esp8266.c b/stm32f091/esp8266.c index 6a9f254..341f052 100644 --- a/stm32f091/esp8266.c +++ b/stm32f091/esp8266.c @@ -34,7 +34,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){ } // start DMA again // memset(g_ws_esp8266_dma_rx_buffer,'\0',g_ws_esp8266_dma_rx_buffer_Size); // clear rx_buff - HAL_UARTEx_ReceiveToIdle_DMA(&huart1, g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE); + HAL_UART_Receive_DMA(&huart1, (uint8_t*) g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE); __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT); } diff --git a/stm32f091/main.c b/stm32f091/main.c index 7cb0718..ed0dacd 100644 --- a/stm32f091/main.c +++ b/stm32f091/main.c @@ -5,18 +5,9 @@ #include "main.h" #include "setup.h" #include "sensor.h" -#include "backlog.h" int main() { ws_io_setup(); - HAL_GPIO_Init(GPIOA, &(GPIO_InitTypeDef) { - .Pin = GPIO_PIN_5, - .Mode = GPIO_MODE_OUTPUT_PP, - .Pull = GPIO_NOPULL - }); - - ws_backlog_alloc(24 * 60); - xTaskCreate(ws_sensor_read_task, "sensor", 128, NULL, 1, NULL); vTaskStartScheduler(); } diff --git a/stm32f091/setup.c b/stm32f091/setup.c index 318de5a..63efd37 100644 --- a/stm32f091/setup.c +++ b/stm32f091/setup.c @@ -7,6 +7,7 @@ #include "esp8266.h" #include "setup.h" +#include "backlog.h" I2C_HandleTypeDef hi2c1 = { .Instance = I2C1, @@ -57,7 +58,7 @@ DMA_HandleTypeDef hdma_usart1_rx = { .Init.Priority = DMA_PRIORITY_LOW, }; -DMA_HandleTypeDef hdma_usart1_tx { +DMA_HandleTypeDef hdma_usart1_tx = { .Instance = DMA1_Channel2, .Init.Direction = DMA_MEMORY_TO_PERIPH, .Init.PeriphInc = DMA_PINC_DISABLE, @@ -83,6 +84,14 @@ void ws_io_setup() { ws_io_usart1_setup(); ws_io_usart2_setup(); ws_io_dma_setup(); + + HAL_GPIO_Init(GPIOA, &(GPIO_InitTypeDef) { + .Pin = GPIO_PIN_5, + .Mode = GPIO_MODE_OUTPUT_PP, + .Pull = GPIO_NOPULL + }); + + ws_backlog_alloc(24 * 60); } static void ws_io_clock_setup() { @@ -123,7 +132,7 @@ static void ws_io_usart1_setup() { if (HAL_UART_Init(&huart1) != HAL_OK) return ws_setup_error_handler(); - HAL_UARTEx_ReceiveToIdle_DMA(&huart1, g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE); + HAL_UART_Receive_DMA(&huart1, (uint8_t*) g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE); __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); } -- cgit v1.2.3 From e2ae9e96ba05baa389ebc49a65a941bada87e3aa Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 26 Oct 2022 15:51:18 +0200 Subject: dma write working --- stm32f091/esp8266.c | 12 +++++------- stm32f091/esp8266.h | 3 ++- stm32f091/main.c | 6 +++++- stm32f091/makefile | 1 + stm32f091/setup.c | 1 - stm32f091/test.c | 25 +++++++++++++++++++++++++ stm32f091/test.h | 4 ++++ 7 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 stm32f091/test.c create mode 100644 stm32f091/test.h (limited to 'stm32f091/main.c') diff --git a/stm32f091/esp8266.c b/stm32f091/esp8266.c index 341f052..98c4e10 100644 --- a/stm32f091/esp8266.c +++ b/stm32f091/esp8266.c @@ -14,6 +14,7 @@ int isOK = 0; // TODO: remove uint16_t g_ws_esp8266_dma_old_pos = 0; uint16_t g_ws_esp8266_dma_new_pos = 0; +/* // when rx receives data handle the message. this function is in stm32. this name needs to stay the same or else it wont work. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){ if(huart->Instance == USART1) { @@ -51,14 +52,11 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){ } } } +*/ -void DMA1_Ch1_IRQHandler(void) { - HAL_DMA_IRQHandler(&hdma_usart1_rx); -} - -void DMA1_Ch2_3_DMA2_Ch1_2_IRQHandler(void) { - HAL_DMA_IRQHandler(&hdma_usart1_tx); -} +void DMA1_Ch1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_usart1_rx); } +void DMA1_Ch2_3_DMA2_Ch1_2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_usart1_tx); } +void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&huart1); } void ws_esp8266_ATsendCommand(uint8_t* data){ char dataChar[20]; diff --git a/stm32f091/esp8266.h b/stm32f091/esp8266.h index 9df02cb..d18c214 100644 --- a/stm32f091/esp8266.h +++ b/stm32f091/esp8266.h @@ -6,11 +6,12 @@ extern char g_ws_esp8266_dma_rx_buffer[WS_DMA_RX_BUFFER_SIZE]; -void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *, uint16_t); +// void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *, uint16_t); /** @brief This function handles DMA1 channel 2 to 3 and DMA2 channel 1 to 2 interrupts. */ void DMA1_Ch2_3_DMA2_Ch1_2_IRQHandler(void); /** @brief This function handles DMA1 channel 1 interrupt. */ void DMA1_Ch1_IRQHandler(void); +void USART1_IRQHandler(void); void ws_esp8266_ATsendCommand(uint8_t* data); int ws_esp8266_checkOK(uint8_t *receiveData,int length); diff --git a/stm32f091/main.c b/stm32f091/main.c index ed0dacd..f5fe563 100644 --- a/stm32f091/main.c +++ b/stm32f091/main.c @@ -6,8 +6,12 @@ #include "setup.h" #include "sensor.h" +#include "test.h" + int main() { ws_io_setup(); - xTaskCreate(ws_sensor_read_task, "sensor", 128, NULL, 1, NULL); + // xTaskCreate(ws_sensor_read_task, "sensor", 64, NULL, 1, NULL); + xTaskCreate(ws_test_write_task, "testw", 16, NULL, 2, NULL); + xTaskCreate(ws_test_read_task, "testr", 16, NULL, 2, NULL); vTaskStartScheduler(); } diff --git a/stm32f091/makefile b/stm32f091/makefile index 20424c3..bf20f00 100644 --- a/stm32f091/makefile +++ b/stm32f091/makefile @@ -90,6 +90,7 @@ $(TARGET).elf: $(OBJS) flash: $(TARGET).bin st-flash write $(TARGET).bin 0x08000000 + st-flash reset compile_commands: clean compiledb make -n diff --git a/stm32f091/setup.c b/stm32f091/setup.c index 63efd37..39cff07 100644 --- a/stm32f091/setup.c +++ b/stm32f091/setup.c @@ -132,7 +132,6 @@ static void ws_io_usart1_setup() { if (HAL_UART_Init(&huart1) != HAL_OK) return ws_setup_error_handler(); - HAL_UART_Receive_DMA(&huart1, (uint8_t*) g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE); __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); } diff --git a/stm32f091/test.c b/stm32f091/test.c new file mode 100644 index 0000000..4d1b936 --- /dev/null +++ b/stm32f091/test.c @@ -0,0 +1,25 @@ +#include +#include +#include + +#include "setup.h" + +uint8_t tx_buffer[] = "AT\r\n"; + +void ws_test_read_task() { + uint8_t* buf; // TODO: not working + while (1) { + HAL_UART_Receive_DMA(&huart1, buf, 1); + HAL_UART_Transmit(&huart2, buf, 1, 100); + } +} + +void ws_test_write_task() { + while (1) { + HAL_UART_Transmit_DMA(&huart1, tx_buffer, sizeof(tx_buffer)); + __HAL_UART_ENABLE_IT(&huart1, UART_IT_TXE); + + HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); + vTaskDelay(portTICK_PERIOD_MS * 1000 * 1); + } +} diff --git a/stm32f091/test.h b/stm32f091/test.h new file mode 100644 index 0000000..6c312d9 --- /dev/null +++ b/stm32f091/test.h @@ -0,0 +1,4 @@ +#pragma once + +void ws_test_read_task(); +void ws_test_write_task(); -- cgit v1.2.3 From d48374c0f38cb01d726958b49bda5c1b6e91ab91 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 26 Oct 2022 19:18:26 +0200 Subject: WIP working dma receive to buffer --- stm32f091/consts.h | 2 +- stm32f091/esp8266.c | 8 ++++++++ stm32f091/esp8266.h | 10 +++++++--- stm32f091/main.c | 3 +-- stm32f091/setup.c | 11 ++++++++--- stm32f091/stm32f0xx_hal_conf.h | 2 ++ stm32f091/test.c | 13 +------------ stm32f091/test.h | 1 - 8 files changed, 28 insertions(+), 22 deletions(-) (limited to 'stm32f091/main.c') diff --git a/stm32f091/consts.h b/stm32f091/consts.h index cf7d34f..5f9d7a1 100644 --- a/stm32f091/consts.h +++ b/stm32f091/consts.h @@ -4,7 +4,7 @@ #define WS_SERVER_PORT "80" -#define WS_DMA_RX_BUFFER_SIZE 50 +#define WS_DMA_RX_BUFFER_SIZE 10 #define WS_DMA_TX_BUFFER_SIZE 50 #define WS_PINOUT_I2C_SDA_PIN GPIO_PIN_9 diff --git a/stm32f091/esp8266.c b/stm32f091/esp8266.c index 24860a1..5d1847b 100644 --- a/stm32f091/esp8266.c +++ b/stm32f091/esp8266.c @@ -16,6 +16,14 @@ void DMA1_Ch1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_usart1_rx); } void DMA1_Ch2_3_DMA2_Ch1_2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_usart1_tx); } void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&huart1); } +void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart) { + HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); + + HAL_UART_Transmit(&huart2, g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE, 100); + HAL_UART_Receive_DMA(&huart1, g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE); + __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); +} + void ws_esp8266_send(uint8_t* data, size_t size) { size_t limited_size = WS_MIN(size, WS_DMA_TX_BUFFER_SIZE - 1); memcpy(g_ws_esp8266_dma_tx_buffer, data, limited_size); diff --git a/stm32f091/esp8266.h b/stm32f091/esp8266.h index 8038679..0832e95 100644 --- a/stm32f091/esp8266.h +++ b/stm32f091/esp8266.h @@ -1,11 +1,12 @@ #pragma once -#include "consts.h" - +#include #include #include -/** @brief null-terminated rx buffer string */ +#include "consts.h" + +/** @brief DMA rx buffer */ extern uint8_t g_ws_esp8266_dma_rx_buffer[WS_DMA_RX_BUFFER_SIZE]; /** @brief null-terminated tx buffer string */ extern uint8_t g_ws_esp8266_dma_tx_buffer[WS_DMA_TX_BUFFER_SIZE]; @@ -17,6 +18,9 @@ void DMA1_Ch1_IRQHandler(void); /** @brief USART1 interrupt handler */ void USART1_IRQHandler(void); +/** @brief receive chunk complete */ +void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart); + /** @brief send response to incoming request on specific channel */ void ws_esp8266_res_send(unsigned int channel, uint8_t* data, size_t size); diff --git a/stm32f091/main.c b/stm32f091/main.c index f5fe563..80eb5a7 100644 --- a/stm32f091/main.c +++ b/stm32f091/main.c @@ -11,7 +11,6 @@ int main() { ws_io_setup(); // xTaskCreate(ws_sensor_read_task, "sensor", 64, NULL, 1, NULL); - xTaskCreate(ws_test_write_task, "testw", 16, NULL, 2, NULL); - xTaskCreate(ws_test_read_task, "testr", 16, NULL, 2, NULL); + xTaskCreate(ws_test_write_task, "test", 16, NULL, 2, NULL); vTaskStartScheduler(); } diff --git a/stm32f091/setup.c b/stm32f091/setup.c index 39cff07..98ef8cd 100644 --- a/stm32f091/setup.c +++ b/stm32f091/setup.c @@ -30,8 +30,8 @@ UART_HandleTypeDef huart1 = { .Init.Mode = UART_MODE_TX_RX, .Init.HwFlowCtl = UART_HWCONTROL_NONE, .Init.OverSampling = UART_OVERSAMPLING_16, - .Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE, - .AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT, +// .Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE, +// .AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT, }; UART_HandleTypeDef huart2 = { @@ -81,6 +81,7 @@ void ws_io_setup() { ws_io_clock_setup(); ws_io_i2c_setup(); + ws_io_dma_setup(); ws_io_usart1_setup(); ws_io_usart2_setup(); ws_io_dma_setup(); @@ -132,7 +133,11 @@ static void ws_io_usart1_setup() { if (HAL_UART_Init(&huart1) != HAL_OK) return ws_setup_error_handler(); + // HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RX_DMA_buffer, RX_DMA_BUFFER_SIZE); + HAL_UART_Receive_DMA(&huart1, g_ws_esp8266_dma_rx_buffer, WS_DMA_RX_BUFFER_SIZE); __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); + // __HAL_DMA_ENABLE_IT(&hdma_usart1_rx, DMA_IT_TC); + // __HAL_UART_ENABLE_IT(&huart1, UART_IT_TC); } static void ws_io_usart2_setup() { @@ -191,7 +196,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { __HAL_LINKDMA(huart, hdmatx, hdma_usart1_tx); // USART1 interrupt Init - HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); + HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); } else if (huart->Instance == USART2) { __HAL_RCC_USART2_CLK_ENABLE(); diff --git a/stm32f091/stm32f0xx_hal_conf.h b/stm32f091/stm32f0xx_hal_conf.h index fc27221..45f9fab 100644 --- a/stm32f091/stm32f0xx_hal_conf.h +++ b/stm32f091/stm32f0xx_hal_conf.h @@ -19,6 +19,8 @@ #define DATA_CACHE_ENABLE 0U #define USE_SPI_CRC 0U +#define USE_HAL_UART_REGISTER_CALLBACKS 1 + #define HAL_RCC_MODULE_ENABLED #define HAL_MODULE_ENABLED #define HAL_I2C_MODULE_ENABLED diff --git a/stm32f091/test.c b/stm32f091/test.c index 0960d0f..e25b071 100644 --- a/stm32f091/test.c +++ b/stm32f091/test.c @@ -3,23 +3,12 @@ #include #include "esp8266.h" -#include "setup.h" -#include "util.h" - -void ws_test_read_task() { - uint8_t* buf; // TODO: not working - while (1) { - HAL_UART_Receive_DMA(&huart1, buf, 1); - HAL_UART_Transmit(&huart2, buf, 1, 100); - } -} void ws_test_write_task() { uint8_t data[] = "AT\r\n"; while (1) { ws_esp8266_send(data, sizeof(data)); - HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); - vTaskDelay(portTICK_PERIOD_MS * 1000 * 1); + vTaskDelay(portTICK_PERIOD_MS * 100 * 1); } } diff --git a/stm32f091/test.h b/stm32f091/test.h index 6c312d9..dffa516 100644 --- a/stm32f091/test.h +++ b/stm32f091/test.h @@ -1,4 +1,3 @@ #pragma once -void ws_test_read_task(); void ws_test_write_task(); -- cgit v1.2.3 From dd1d0cf34a44f70793dcb52fd9ef90d9274b55d1 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Thu, 27 Oct 2022 17:42:54 +0200 Subject: move esp setup to setup.c --- stm32f091/esp8266.c | 205 +++++++-------------------------------------------- stm32f091/esp8266.h | 23 +++--- stm32f091/main.c | 5 +- stm32f091/server.c | 4 +- stm32f091/setup.c | 10 +++ stm32f091/test.c | 18 ----- stm32f091/test.h | 3 - stm32f091/wifi.def.h | 2 + 8 files changed, 54 insertions(+), 216 deletions(-) delete mode 100644 stm32f091/test.c delete mode 100644 stm32f091/test.h (limited to 'stm32f091/main.c') diff --git a/stm32f091/esp8266.c b/stm32f091/esp8266.c index c98528e..d45954e 100644 --- a/stm32f091/esp8266.c +++ b/stm32f091/esp8266.c @@ -10,6 +10,12 @@ #include "server.h" #include "util.h" +// macro for concise sending of multiple commands +#define ws_esp8266_send_seq(cmd) { \ + uint8_t _cmd[] = cmd; \ + ws_server_send(_cmd, sizeof(_cmd)); \ +} + uint8_t g_ws_esp8266_dma_rx_buffer[WS_DMA_RX_BUFFER_SIZE]; uint8_t g_ws_esp8266_dma_tx_buffer[WS_DMA_TX_BUFFER_SIZE]; @@ -53,6 +59,28 @@ void ws_esp8266_start_receive() { __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); } +void ws_esp8266_connect() { + ws_esp8266_send_seq("AT+CWJAP=\"" WS_ESP8266_WLAN_SSID "\",\"" WS_ESP8266_WLAN_PASSWD "\"\r\n"); +} + +void ws_esp8266_ap_client_mode() { + ws_esp8266_send_seq("AT+CWMODE=1\r\n"); +} + +void ws_esp8266_start_tcp_server() { + ws_esp8266_send_seq("AT+CIPSERVER=0\r\n"); + ws_esp8266_send_seq("AT+CIPMUX=1\r\n"); + ws_esp8266_send_seq("AT+CIPSERVER=1," WS_SERVER_PORT "\r\n"); +} + +void ws_esp8266_set_mac() { + ws_esp8266_send_seq("AT+CIPSTAMAC=\"" WS_ESP8266_WLAN_MAC "\"\r\n"); +} + +void ws_esp8266_set_ip() { + ws_esp8266_send_seq("AT+CIPSTA=\"" WS_ESP8266_WLAN_IP "\"\r\n"); +} + // TODO: refactor code from here to EOF void ws_esp8266_ATsendCommand(uint8_t* data){ char dataChar[20]; @@ -68,183 +96,6 @@ void ws_esp8266_ATsendCommand(uint8_t* data){ HAL_UART_Transmit(&huart2, data, strlen((char*)data),1000); HAL_Delay(5000); } -int ws_esp8266_checkOK(uint8_t *receiveData,int length){ - char *ret=""; - // char *ret1=""; - HAL_UART_Transmit(&huart2, receiveData,length,1000); - ret = strstr((char*)receiveData,"OK"); - // ret = strstr((char*)receiveData,"change"); - // memset(receiveData,0,30); - if((ret[0]='O') && (ret[1]=='K')){ - //HAL_UART_Transmit(&huart2, (uint8_t*)ret, sizeof(ret), 100); - return 1; - - } -// else if((ret1[0]='c') && (ret1[1]=='h')){ -// //HAL_UART_Transmit(&huart2, (uint8_t*)ret, sizeof(ret), 100); -// return 1; -// -// } - else{ - return 0; - } - -} -int ws_esp8266_receivingMsg(uint8_t *receiveData,int length){ - char *ret=""; - HAL_UART_Transmit(&huart2, receiveData,length,1000); - ret = strstr((char*)receiveData,"+IPD"); - // memset(receiveData,0,30); - - if((ret[0]='+') && (ret[1]=='I')){ - //HAL_UART_Transmit(&huart2, (uint8_t*)ret, sizeof(ret), 100); - return 1; - - } - else{ - return 0; - } - -} -int ws_esp8266_unlink(uint8_t *receiveData,int length){ - char *ret=""; - HAL_UART_Transmit(&huart2, receiveData,length,1000); - ret = strstr((char*)receiveData,"UNLINK"); - // memset(receiveData,0,30); - if((ret[0]='U') && (ret[1]=='N')){ - //HAL_UART_Transmit(&huart2, (uint8_t*)ret, sizeof(ret), 100); - return 1; - - } - else{ - return 0; - } - -} - -void ws_esp8266_StartEsp(){ - uint8_t Tx_AT[]="AT\r\n"; - uint8_t Rx_buffer[10]={0}; - for(int i=0;i<3;i++){ - // HAL_UART_Transmit(&huart2, hier,sizeof(hier),100); - HAL_UART_Transmit(&huart1, Tx_AT,strlen((char*)Tx_AT), 100); - HAL_UART_Receive(&huart1, Rx_buffer, 10, 100); - - - HAL_UART_Transmit(&huart2, Rx_buffer,10,100); - HAL_Delay(5000); - //memset(Rx_buffer,0,sizeof(Rx_buffer)); - } - -} -void ws_esp8266_disconnect(){ - int ret; - uint8_t Tx_disconnect[]="AT+CWQAP\r\n";uint8_t buffer[17]={0}; - while(ret!=1){ - - HAL_UART_Transmit(&huart1, Tx_disconnect,strlen((char*)Tx_disconnect), 100); - HAL_UART_Receive(&huart1, buffer, 17, 100); - HAL_Delay(2000); - - if(ws_esp8266_checkOK(buffer,17)==1){ - ret=1; - } - - } - - HAL_Delay(5000); -} -void ws_esp8266_mode(){ - int ret; - uint8_t buffer1[20]={0}; uint8_t Tx_mode[]="AT+CWMODE=1\r\n"; - - while(ret!=1){ - - HAL_UART_Transmit(&huart1, Tx_mode,strlen((char*)Tx_mode), 100); - HAL_UART_Receive(&huart1, buffer1, 20, 100); - HAL_Delay(1000); - - if(ws_esp8266_checkOK(buffer1,20)==1){ - ret=1; - - } - - } - - HAL_Delay(1000); -} -void ws_esp8266_connect(){ - uint8_t Tx_network[]="AT+CWJAP=\"" WS_ESP8266_WLAN_SSID "\",\"" WS_ESP8266_WLAN_PASSWD "\"\r\n"; - - - HAL_UART_Transmit(&huart1, Tx_network,strlen((char*)Tx_network),1000); - HAL_Delay(10000); -// HAL_UART_Transmit(&huart1, Tx_network,sizeof(Tx_network),1000); -// HAL_Delay(10000); - - - - - -} -void ws_esp8266_serveraan(){ - int ret; - uint8_t buffer1[30]={0}; uint8_t Tx_server[]="AT+CIPSERVER=1," WS_SERVER_PORT "\r\n"; - - while(ret!=1){ - - HAL_UART_Transmit(&huart1, Tx_server,strlen((char*)Tx_server), 100); - HAL_UART_Receive(&huart1, buffer1, 30, 100); - HAL_Delay(2000); - - if(ws_esp8266_checkOK(buffer1,30)==1){ - ret=1; - - } - - } - - HAL_Delay(1000); -} -void ws_esp8266_serveruit(){ - //int ret; - //uint8_t buffer1[27]={0}; - uint8_t Tx_server[]="AT+CIPSERVER=0\r\n"; -// -// while(ret!=1){ - - HAL_UART_Transmit(&huart1, Tx_server,strlen((char*)Tx_server), 100); -// HAL_UART_Receive(&huart1, buffer1, 27, 100); - HAL_Delay(3000); - -// if(unlink(buffer1,27)==1){ -// ret=1; -// -// } -// -// } - - HAL_Delay(1000); -} -void ws_esp8266_mux(){ - int ret; - uint8_t buffer2[20]={0}; uint8_t Tx_mux[]="AT+CIPMUX=1\r\n"; - - while(ret!=1){ - - HAL_UART_Transmit(&huart1, Tx_mux,strlen((char*)Tx_mux), 100); - HAL_UART_Receive(&huart1, buffer2, 20, 100); - HAL_Delay(2000); - - if(ws_esp8266_checkOK(buffer2,20)==1){ - ret=1; - - } - - } - - HAL_Delay(5000); -} void ws_esp8266_close(){ uint8_t Tx_close[]="AT+CIPCLOSE=0\r\n"; diff --git a/stm32f091/esp8266.h b/stm32f091/esp8266.h index 64910fd..66ccfba 100644 --- a/stm32f091/esp8266.h +++ b/stm32f091/esp8266.h @@ -25,18 +25,17 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart); /** @brief send data to esp over uart with dma */ void ws_esp8266_send(uint8_t* data, size_t size); +/** @brief start dma receive and reset half-transfer interrupt flag */ void ws_esp8266_start_receive(); -// TODO: remove/update/document/refactor these functions -void ws_esp8266_ATsendCommand(uint8_t* data); -int ws_esp8266_checkOK(uint8_t *receiveData,int length); -int ws_esp8266_receivingMsg(uint8_t *receiveData,int length); -int ws_esp8266_unlink(uint8_t *receiveData,int length); -void ws_esp8266_StartEsp(); -void ws_esp8266_disconnect(); -void ws_esp8266_mode(); +/** @brief connect to access point using wifi.h credentials */ void ws_esp8266_connect(); -void ws_esp8266_serveraan(); -void ws_esp8266_serveruit(); -void ws_esp8266_mux(); -void ws_esp8266_close(); +/** @brief set esp to access point client mode (connect to AP, not become one) */ +void ws_esp8266_ap_client_mode(); +/** @brief initialize and configure the tcp server */ +void ws_esp8266_start_tcp_server(); + +/** @brief set mac address of the esp client */ +void ws_esp8266_set_mac(); +/** @brief set static ip address of the esp client */ +void ws_esp8266_set_ip(); diff --git a/stm32f091/main.c b/stm32f091/main.c index 80eb5a7..67c0a8d 100644 --- a/stm32f091/main.c +++ b/stm32f091/main.c @@ -6,11 +6,8 @@ #include "setup.h" #include "sensor.h" -#include "test.h" - int main() { ws_io_setup(); - // xTaskCreate(ws_sensor_read_task, "sensor", 64, NULL, 1, NULL); - xTaskCreate(ws_test_write_task, "test", 16, NULL, 2, NULL); + xTaskCreate(ws_sensor_read_task, "sensor", 64, NULL, 1, NULL); vTaskStartScheduler(); } diff --git a/stm32f091/server.c b/stm32f091/server.c index a06727c..1b677c2 100644 --- a/stm32f091/server.c +++ b/stm32f091/server.c @@ -77,8 +77,8 @@ void ws_server_req_incoming(uint8_t* data, size_t size) { break; } case WS_SERVER_LM_IDLE: { - if (next_few_bytes_are("+IPD")) { - i += 3; // skip I, P, and D + if (next_few_bytes_are("+IPD,")) { + i += 4; // skip I, P, D, and comma g_ws_server_parser.mode = WS_SERVER_LM_IPD_LISTENING; } break; diff --git a/stm32f091/setup.c b/stm32f091/setup.c index 9ed4174..2175ab3 100644 --- a/stm32f091/setup.c +++ b/stm32f091/setup.c @@ -91,6 +91,16 @@ void ws_io_setup() { }); ws_backlog_alloc(24 * 60); + +#ifdef WS_ESP8266_WLAN_MAC + ws_esp8266_set_mac(); +#endif +#ifdef WS_ESP8266_WLAN_IP + ws_esp8266_set_ip(); +#endif + ws_esp8266_ap_client_mode(); + ws_esp8266_connect(); + ws_esp8266_start_tcp_server(); } static void ws_io_clock_setup() { diff --git a/stm32f091/test.c b/stm32f091/test.c deleted file mode 100644 index ae48ef7..0000000 --- a/stm32f091/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include - -#include "server.h" -#include "setup.h" - -void ws_test_write_task() { - uint8_t cmd1[] = "AT+CIPMUX=1\r\n"; - uint8_t cmd2[] = "AT+CWMODE=1\r\n"; - uint8_t cmd3[] = "AT+CWJAP=\"" WS_ESP8266_WLAN_SSID "\",\"" WS_ESP8266_WLAN_PASSWD "\"\r\n"; - while (1) { - ws_server_send(cmd1, sizeof(cmd1)); - ws_server_send(cmd2, sizeof(cmd2)); - ws_server_send(cmd3, sizeof(cmd3)); - vTaskDelay(portTICK_PERIOD_MS * 1000 * 1); - } -} diff --git a/stm32f091/test.h b/stm32f091/test.h deleted file mode 100644 index dffa516..0000000 --- a/stm32f091/test.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -void ws_test_write_task(); diff --git a/stm32f091/wifi.def.h b/stm32f091/wifi.def.h index f0748d2..61e1706 100644 --- a/stm32f091/wifi.def.h +++ b/stm32f091/wifi.def.h @@ -2,4 +2,6 @@ #define WS_ESP8266_WLAN_SSID "Test" #define WS_ESP8266_WLAN_PASSWD "12345678" +// #define WS_ESP8266_WLAN_MAC "f2:9b:89:47:c4:f3" +// #define WS_ESP8266_WLAN_IP "192.168.2.69" -- cgit v1.2.3