基于STM32+ESP8266的奥运会奖牌榜设计之经典
(一)实验目的和任务
1、掌握esp8266模块的TCP协议,进行联网和服务器
2、熟悉jscon库的移植和API的使用,对jscon格式的数据进行解析
3、掌握LCD或串口屏显示东京奥运会奖牌榜
(二)实验设备介绍
1、系统需求:安装有windows系统的PC机
2、软件需求: keil5,USART HMI软件
(三)实验步骤
3.1 WiFi和服务器连接
AT指令:
1.AT
回复:AT OK
2.WiFi连接
WIFI功能指令(模式)
Station模式(客户端模式):模块相当于一个客户端,可以链接到其他路由器发出的WiFi信号
SoftAP模式(软路由模式):模块相当于一个路由器,其他设备可以连接到该模块发送的信号
Station+softAP模式(混合模式):模块可在其他设备链接的同时充当路由器。
station模式:
1、WIFI模式设置指令:AT+CWMODE_DEF=1 回复:AT+CWMODE_DEF=1 OK
|
2、WIFI 模式查询指令:AT+CWMODE? 回复:+CWMODE:1 //1:station 模式 2:softAP 模式 3:station+softAP 模式 OK |
3、连接 AP 指令:AT+CWJAP_DEF=”mwh”,”123123123” 回复:AT+CWJAP_DEF="mwh","123123123" WIFI CONNECTED WIFI GOT IP OK
|
4、断开与 AP 连接指令:AT+CWQAP 回复:AT+CWQAP OK WIFI DISCONNECT
|
5、连接 TCP 服务器 指令:AT+CIPSTART="TCP","111.206.176.78",80 响应:OK
|
6、开启透传模式传输数据 指令:AT+CIPMODE=1 响应:OK |
7、发送数据 指令:AT+CIPSEND 响应:> |
8、退出透传模式 在透传传输数据过程中,若识别到数据“+++”就会退出透传模式。所以,发送“+++”即可退出透传模式,注 意不要加\r\n 结尾。 |
9、断开与 TCP 服务器连接 指令:AT+CIPCLOSE 响应:CLOSED OK |
10、断开与 AP 的连接 指令:AT+CWQAP 响应:OK |
|
3.2获取网址API接口数据
//串口2,printf 函数 //确保一次发送数据不超过USART2_MAX_SEND_LEN字节 void u2_printf(char *fmt, ...) { u16 i, j; va_list ap; va_start(ap, fmt); vsprintf((char *)USART2_TX_BUF, fmt, ap); va_end(ap); i = strlen((const char *)USART2_TX_BUF); //此次发送数据的长度 for (j = 0; j < i; j++) //循环发送数据 { while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); //循环发送,直到发送完毕 USART_SendData(USART2, USART2_TX_BUF[j]); } } |
uint8_t get_api(char *api_addr, uint8_t (*parse_fun)(void)) { printf("获取东京奥运会奖牌榜:\r\nGET %s\r\n", api_addr); u2_printf("GET %s\r\n\r\n", api_addr);
delay_ms(20); USART2_RX_STA = 0; delay_ms(1000); printf("%d\r\n",USART2_RX_STA); if (USART2_RX_STA & 0X8000) { USART2_RX_BUF[USART2_RX_STA & 0X7FFF] = 0; //添加结束符 }
// printf("接收到:%d bytes\r\n%s\r\n\r\n", strlen((const char*)USART2_RX_BUF),USART2_RX_BUF); parse_fun(); USART2_RX_STA = 0; memset(USART2_RX_BUF, 0, sizeof(USART2_RX_BUF)); // atk_8266_quit_trans(); // printf("退出透传\r\n"); return 0; } |
3.3解析JOSN字符串
在cJSON.h中有为cJSON的结构体和和三个函数:
typedef struct cJSON {
struct cJSONnext,prev; /* 遍历数组或对象链的前向或后向链表指针*/
struct cJSON child; /数组或对象的孩子节点 /
int type; / key的类型 */
char valuestring; /字符串值 /
int valueint; / 整数值 /
double valuedouble; / 浮点数值 */
char string; / key的名字 */
} cJSON;
cJSON *cJSON_Parse(const char *value); //将JSON字符串转换成cJSON结构体
cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);//在cJSON结构体中查找某个键的名称(key)
void cJSON_Delete(cJSON *c);//释放cJSON结构体指针
1、解析一个简单的键值对字符串: 使用如下: |
|
2、解析复杂一点的cJSON结构体:
|
3、解析JSON结构体数组: size = cJSON_GetArraySize(arr);//此时size值为3 |
(四)实验现象
注意:使用的芯片为STM32F103系列 如果使用STM32F103C8T6会出现内存溢出的情况。
案例参考网址为:http://www.wangchaochao.top/2021/04/18/stm32-ncov-vaccine/
总结:只有在实践中总结,才能走的更远,领悟技术的细节。
相关文章
- Intel曾经也败过!回忆AMD史上的经典CPU
- 教程-经典Delphi教程网
- 经典算法题每日演练——第九题 优先队列
- IIS7 经典模式和集成模式的区别分析
- 由经典面试题(从输入url到页面展示的详细过程)梳理前端知识体系
- Java中23种经典设计模式详解
- 【STM32H7教程】第92章 STM32H7的FDCAN总线应用之双FDCAN实现(支持经典CAN)
- Pytorch之CNN:从代码认知CNN经典架构—基于Pytorch框架的代码实现经典卷积神经网络的算法集合(LeNet/AlexNet/VGG/NIN/GoogleNet/ResNet)
- Pytorch之CNN:从代码认知CNN经典架构—基于Pytorch框架的代码实现经典卷积神经网络的算法集合(LeNet/AlexNet/VGG/NIN/GoogleNet/ResNet)
- AI开发者大会之AI学习与进阶实践:2020年7月3日《如何转型搞AI?》、《基于AI行业价值的AI学习与进阶路径》、《自动机器学习与前沿AI开源项目》、《使用TensorFlow实现经典模型》
- ML之LiR:机器学习经典算法之线性回归算法LiR的简介、使用方法、经典案例之详细攻略
- 程序员必读的10本经典书(含资源)建议收藏
- 【大数据&AI人工智能】图灵:计算机器与智能 - 经典AI论文系列
- 超过1000本的计算机经典书籍分享
- Win11右键菜单切回经典模式
- C#经典算法面试题
- 数据结构十大经典排序算法--Python
- 20212022最新Web前端经典面试题笔试题之前端手写功能(含答案)史上最全【笔试题】
- 机器学习知识经验分享之三:基于卷积神经网络的经典目标检测算法