Proteus仿真单片机STM32F103的TCP通信2
二单片机作为服务端与USR-TCP232-TEST调试软件双向通信ESP8266作为服务端配置步骤1AT2ATRST3ATCWMODE24ATCWSAP“SSID”,“密码”,信道号,加密方式 0 - OPEN 1 - WEP 2 - WPA_PSK 3 - WPA2_PSK 4 - WPA_WPA2_PSK5ATCWDHCP0,16ATCIPAP“IP”,“网关IP”,“子网掩码”7ATCIPMUX18ATCIPSERVER1,端口号9ATCIPSEND连接号,发送字节数10发送信息11停止发送信息(不加回车\r\n)需要PC插入USB-TTLWIFI模块和无线网卡。TCP【上位机client调试软件-无线网卡-WIFIUSBTTL模块-下位机server仿真单片机】//MUCserver-PCclient运行单片机PC连接名称为MCU的WIFI设置网络调试助手的IP、PORT互发数据。每次单片机重启WIFI无需重连。#includemain.h#includeusart.h#includegpio.h/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes */#includestring.h#includecJSON.h#includestdio.h#ifdef__GNUC__#definePUTCHAR_PROTOTYPEint__io_putchar(intch)#else#definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f)#endifPUTCHAR_PROTOTYPE{HAL_UART_Transmit(huart1,(uint8_t*)ch,1,0xFFFF);returnch;}intfputc(intch,FILE*f){HAL_UART_Transmit(huart1,(uint8_t*)ch,1,0xffff);returnch;}intfgetc(FILE*f){uint8_tch0;HAL_UART_Receive(huart1,ch,1,0xffff);returnch;}uint8_tmy_re_buf2;uint8_tmy_re_buf[2000];uint16_tpt_w20;uint16_tpt0;uint8_taRxBuffer;//接收中断缓冲/*1.模块Station模式下做tcp server ATCWMODE w 开启AP模式 ATCWSAP”y”,”1234567890”,3,0 设置名、密码、加密方式 ATCIPMUX1 开多连接模式 ATCIPSERVER1,8888创建服务器 ATCIFSR 查看本地IP地址 */charCAT[]AT\r\n;charCRST[]ATRST\r\n;charCMODE[]ATCWMODE2\r\n;charCWIFI[]ATCWSAP\MUC\,\\,3,0\r\n;//加密模式 0 - OPEN 1 - WEP 2 - WPA_PSK 3 - WPA2_PSK 4 - WPA_WPA2_PSKcharCMUX[]ATCIPMUX1\r\n;charCSERVER[]ATCIPSERVER1,8899\r\n;charGETIP[]ATCIFSR\r\n;charCSEND[]ATCIPSEND0,5\r\n;//发送5字节到CLIENT连接ID为0的远端charsendBuff[50];charRecive[5];charRecive2[5];/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/voidSystemClock_Config(void);/* USER CODE BEGIN PFP */voidcommand(charCommand_AT[]){intLenthstrlen(Command_AT);HAL_UART_Transmit(huart2,(uint8_t*)Command_AT,Lenth,0xff);printf(%s,Command_AT);HAL_Delay(3500);}voidwifiSend(chardata[]){uint8_tLenthstrlen(data);sprintf(sendBuff,ATCIPSEND0,%d\r\n,Lenth);command(sendBuff);HAL_UART_Transmit(huart2,(uint8_t*)data,Lenth,0xff);}voidESP8266_Init(void){command(CAT);command(CRST);command(CMODE);command(CWIFI);command(CMUX);command(CSERVER);command(GETIP);//command(CSEND);}/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 *//* USER CODE END 0 *//** * brief The application entry point. * retval int */intmain(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */ESP8266_Init();//wifiSend(Im Server.);HAL_UART_Receive_IT(huart2,(uint8_t*)aRxBuffer,1);HAL_Delay(10000);cJSON*json;cJSON*Array_obj1;cJSON*Array_obj2;cJSON*Array_obj3;cJSON*Array_obj4;cJSON*Array;jsoncJSON_Parse((constchar*)my_re_buf);Array_obj1cJSON_GetObjectItem(json,results);intsizecJSON_GetArraySize(Array_obj1);printf(\n%d,size);if(jsonNULL)printf(\njson fmt error:%s\n.,cJSON_GetErrorPtr());else{ArraycJSON_GetArrayItem(Array_obj1,0);Array_obj2cJSON_GetObjectItem(Array,now);Array_obj3cJSON_GetObjectItem(Array_obj2,code);HAL_Delay(1000);Array_obj4cJSON_GetObjectItem(Array_obj2,temperature);printf(n\r%s\n\r,Array_obj3-valuestring);//天气代码printf(n\r%s\n\r,Array_obj4-valuestring);//气温strcpy(Recive,Array_obj3-valuestring);strcpy(Recive2,Array_obj4-valuestring);printf(\n\r%s\n\r,my_re_buf);}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}/* USER CODE BEGIN 4 */voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){UNUSED(huart);if(huarthuart2){my_re_buf2aRxBuffer;my_re_buf[pt]aRxBuffer;// HAL_UART_Transmit(huart1, (uint8_t *)my_re_buf2, 1,0xff);// while(HAL_UART_GetState(huart1) HAL_UART_STATE_BUSY_TX);//检测UART发送结束HAL_UART_Receive_IT(huart2,(uint8_t*)aRxBuffer,1);}}/* USER CODE END 4 */改写上面while中的代码与Harmonyos手机客户端通信#includemain.h#includeusart.h#includegpio.h/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes */#includestring.h#includecJSON.h#includestdio.h#ifdef__GNUC__#definePUTCHAR_PROTOTYPEint__io_putchar(intch)#else#definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f)#endifPUTCHAR_PROTOTYPE{HAL_UART_Transmit(huart1,(uint8_t*)ch,1,0xFFFF);returnch;}intfputc(intch,FILE*f){HAL_UART_Transmit(huart1,(uint8_t*)ch,1,0xffff);returnch;}intfgetc(FILE*f){uint8_tch0;HAL_UART_Receive(huart1,ch,1,0xffff);returnch;}uint8_tmy_re_buf2;uint8_tmy_re_buf[2000];uint16_tpt_w20;uint16_tpt0;uint8_taRxBuffer;//接收中断缓冲/*1.模块Station模式下做tcp server ATCWMODE w 开启AP模式 ATCWSAP”y”,”1234567890”,3,0 设置名、密码、加密方式 ATCIPMUX1 开多连接模式 ATCIPSERVER1,8888创建服务器 ATCIFSR 查看本地IP地址 */charCAT[]AT\r\n;charCRST[]ATRST\r\n;charCMODE[]ATCWMODE2\r\n;charCWIFI[]ATCWSAP\MUC\,\\,3,0\r\n;//加密模式 0 - OPEN 1 - WEP 2 - WPA_PSK 3 - WPA2_PSK 4 - WPA_WPA2_PSKcharCMUX[]ATCIPMUX1\r\n;charCSERVER[]ATCIPSERVER1,8899\r\n;charGETIP[]ATCIFSR\r\n;charCSEND[]ATCIPSEND0,5\r\n;//发送5字节到CLIENT连接ID为0的远端charsendBuff[50];charRecive[5];charRecive2[5];charrevOver0;/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/voidSystemClock_Config(void);/* USER CODE BEGIN PFP */voidcommand(charCommand_AT[]){intLenthstrlen(Command_AT);HAL_UART_Transmit(huart2,(uint8_t*)Command_AT,Lenth,0xff);printf(%s,Command_AT);HAL_Delay(3500);}voidwifiSend(chardata[]){uint8_tLenthstrlen(data);sprintf(sendBuff,ATCIPSEND0,%d\r\n,Lenth);command(sendBuff);HAL_UART_Transmit(huart2,(uint8_t*)data,Lenth,0xff);}voidESP8266_Init(void){command(CAT);command(CRST);command(CMODE);command(CWIFI);command(CMUX);command(CSERVER);command(GETIP);//command(CSEND);}// 读取字符串中两个字符之间的字符串并包含这两个字符voidextractStringBetweenChars(constchar*input,charstartChar,charendChar,char*output){constchar*startstrchr(input,startChar);if(startNULL){output[0]\0;return;}constchar*endstrchr(start1,endChar);if(endNULL){output[0]\0;return;}intlengthend-start1;strncpy(output,start,length);output[length]\0;//末尾添加\0}/* const char input[] This is a [test] string.; char output[100]; extractStringBetweenChars(input, [, ], output); *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 *//* USER CODE END 0 *//** * brief The application entry point. * retval int */intmain(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */ESP8266_Init();//wifiSend(Im Server.);HAL_UART_Receive_IT(huart2,(uint8_t*)aRxBuffer,1);HAL_Delay(10000);cJSON*json;cJSON*Array_obj1;cJSON*Array_obj2;cJSON*Array_obj3;cJSON*Array_obj4;cJSON*Array;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){if(revOver1){revOver0;printf(rev1:%s\r\n,my_re_buf);extractStringBetweenChars((constchar*)my_re_buf,{,},(char*)my_re_buf);if(my_re_buf[0]!\0){printf(Extracted string: %s\n,my_re_buf);}else{printf(No matching substring found.\n);}printf(rev2:%s\r\n,my_re_buf);jsoncJSON_Parse((constchar*)my_re_buf);if(jsonNULL)printf(\njson fmt error:%s\n.,cJSON_GetErrorPtr());else{Array_obj2cJSON_GetObjectItem(json,led1);Array_obj3cJSON_GetObjectItem(json,beep);HAL_Delay(1000);Array_obj4cJSON_GetObjectItem(json,temp);printf(%d\n\r,Array_obj3-valueint);printf(%d\n\r,Array_obj4-valueint);//strcpy(Recive2, Array_obj4-valuestring);printf(\n\r%s\n\r,my_re_buf);}}wifiSend(MCUserver\r\n);HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}/* USER CODE BEGIN 4 */voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){UNUSED(huart);if(huarthuart2){my_re_buf2aRxBuffer;my_re_buf[pt]aRxBuffer;if(strstr((constchar*)my_re_buf,\r\n)!NULL){revOver1;printf(jjj\r\n);}// HAL_UART_Transmit(huart1, (uint8_t *)my_re_buf2, 1,0xff);// while(HAL_UART_GetState(huart1) HAL_UART_STATE_BUSY_TX);//检测UART发送结束HAL_UART_Receive_IT(huart2,(uint8_t*)aRxBuffer,1);}}