源码仓库链接;stm32 learning code: 记录stm32学习过程,源代码 (gitee.com)
实现功能通过esp8266获取天气数据,通过oled进行展示。按下按键key0显示当前温度,低于15度会显示it's so cold。高于会显示good weather。按下key1显示明天最高温度和最低温度,最低温度低于15度会显示it's so cold。高于会显示good weather。第四行显示,当前显示是什么时候的数据。
当前温度
明日温度
1.背景知识
2.整体架构
3.快速使用
硬件连接
ESP8266-RX->PA2
ESP8266-TX->PA3
ESP8266-3V3->3V3
ESP8266-GND->GND
oled-SCL->PB8
oled-SDA->PB9
oled-3V3->3V3
oled-GND->GND
1.连接自己的wifi,修改wifista.c文件中该处。修改该处以后,就可以正常运行了。
2.查询其他地点天气,修改weather.c文件该处。其他api参数具体用法可查询心知天气官方手册。
3.ui修改,修改weather.c中该处。oledShowString函数四个参数分别为(行坐标x,纵坐标y,显示字符串,字体)。目前还没有加显示汉字功能,只能显示字母。行纵坐标范围为(0~128,0,64),左上角为原点,y轴向下。一个8号字体字母大小为8*16。
4.想展示其他天气数据
该json数据一共5层。注意:提取{}内容(python中叫字典,c++叫哈希表)使用cJSON_GetObjectItemCaseSensitive方法,提取[](数组内容)使用cJSON_GetArrayItem方法。
4.问题总结
1.访问最近几天天气数据时,cJSON解析需要更多的堆栈空间。startup_stm32f10x_hd.s
文件中栈空间改为0.x1000。
2.数据解析失败
解析数据要挨着get命令之后,否则串口接收数组中天气数据已经被覆盖了。
3.内存溢出,多按几次以后,天气数据无法解析了
cJSON数据解析以后,要通过cJSON_Delete(root);释放root = cJSON_Parse((const char*)USART2_RX_BUF);命令占用的空间。
结果展示
初始化成功,上位机可以接收到如下信息,并获取一次当前天气。
通过按键切换显示。
oled显示天气数据