本帖最后由 龙鳞铁碎牙 于 2025-5-22 18:52 编辑
#技术资源# #每日话题# #申请原创#
拿到[size=1em]STM32C092有一段时间了,一直想用它来做些高级的应用。手头上刚好有个ESP8266-01S模块,于是就拿来连接到,通过无线WIFI连接
[size=1em]后获取心知天气预报数据,然后通过串口助手打印输出来!!!!!!
整个模块架构如下所示:
对应板子上连接如下:
下面是原理图上的对应引脚,将USART1配置为中断,USART不配置中断
STM32C092和ESP8266-01S引脚连接图如下:
ESP8266连接流程如下:
[backcolor=rgba(255, 255, 255, 0.9)]依次利用串口向ESP8266输入以下命令。 - AT\r\n
检查ESP8266模块连接是否正常 - AT+CWMODE=1\r\n
配置模块为Sta模式 - AT+CWJAP="WIFI名称","WIFI密码"\r\n
连接指定WIFI,确保为自己的WIFI - AT+CIPMUX=0\r\n
设置成单连接 - AT+CIPSTART="TCP","api.seniverse.com",80\r\n
创建TCP连接,IP地址为电脑的IP,串口为电脑监听的端口号 - AT+CIPMODE=1\r\n
进入透传模式,进入到透传模式后AT指令就会失效,需要退出后才能生效 - AT+CIPSEND\r\n
准备向服务器发送请求,前面都成功的前提下发送完这个指令后会出现一个>,此时输入发送信息即可
[backcolor=rgba(255, 255, 255, 0.9)]这里使用心知天气[backcolor=rgba(255, 255, 255, 0.9)]进行天气预报获取和测试!
[backcolor=rgba(255, 255, 255, 0.9)]核心代码如下:
[backcolor=rgba(255, 255, 255, 0.9)] HAL_UART_Receive_IT(ESP8266_huart, (uint8_t*)&recvByte, (uint16_t)1);
ESP8266_Clear();
//while(ESP8266_SendCmd("AT+RST\r\n", "OK"))
//HAL_Delay(500);
while(ESP8266_SendCmd("AT\r\n", "OK"));
//HAL_Delay(500);
while(ESP8266_SendCmd("ATE1\r\n", "OK"));
//HAL_Delay(500);
while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"));
//HAL_Delay(500);
while(ESP8266_SendCmd(WIFI_Start, "OK"));
//HAL_Delay(500);
while(ESP8266_SendCmd("AT+CIPMUX=0\r\n", "OK"));
printf("welcome \r\n");
ESP8266_Init();
while(ESP8266_SendCmd("AT+CIPSTART=\"TCP\",\"api.seniverse.com\",80\r\n", "OK"));
//while(ESP8266_SendCmd("AT+CIPSTART=\"TCP\",\"api.openweathermap.org\",80\r\n", "OK"));
while(ESP8266_SendCmd("AT+CIPMODE=1\r\n", "OK"));
ESP8266_SendData(TX_Data,strlen(TX_Data));
HAL_Delay(500);
printf("%s\r\n",esp8266_buf);
ESP8266_Send("+++");
ESP8266_Send("+++");这句必须要加上,不然获取天气信息后不退出,ESP8266会出问题!!
烧录大板子上进行测试,打开串口助手,查看打印信息!
可以看到成都天气预报和ESP8266上面的是一致的。
下面切换到深圳
"GET https://api.seniverse.com/v3/weather/now.json?key=SfobYEGioM5A6dRce&location=shenzhen&language=zh-Hans&unit=c\r\n";
改成上面语句
可以看到ESP8266获取的天气预报和深圳天气一致
加入cjson,解析天气信息
|