前言:上一章节我们通过串口调试助手,成功获取到天气数据,这一节我们将通过MCU的串口发送、接收功能,实现MCU获取天气数据。

传送门:基于STM32F103的网络天气时钟(1)---------通过串口获取天气

文章目录

  • 1、摘要
  • 2、硬件准备
    • 2.1 、WIFI模块
    • 2.2、USB转TTL模块
    • 2.3、STM32最小系统板
    • 2.4、商品链接
  • 3、软件准备
  • 4、硬件连线
  • 5、代码解析
    • 5.1、ESP8266初始化程序
    • 5.2、获取实时天气程序
  • 6、运行结果
  • 7、源程序
    • 7.1 百度网盘链接

1、摘要

单片机具有串口发送和接收功能,我们可以通过串口发送AT指令从而获取到知心天气的数据。并在另一个串口输出。

2、硬件准备

除了上一章使用的wifi模块还有USB转TTL模板外,我们还需要准备一块stm32单片机的最小系统板。

2.1 、WIFI模块

同上章节。

2.2、USB转TTL模块

同上章节。

2.3、STM32最小系统板

因为项目比较简单,所以使用哪一款单片机随意~
我使用的是在淘宝上买的stm32f103rct6的最小系统板。

2.4、商品链接

最小系统板:购买链接
USB转TTL(种类有点多,随便选一个就行,我用的是CH340这个芯片的):购买链接
ESP8266:购买链接
OLED(我用的是0.96寸4针,I2C接口):购买链接
ST-Link V2下载线:购买链接

3、软件准备

上一节收到的数据有部分是乱码,经查阅是因为编码方式不一致导致的,不过“QCOM”没有更改编码方式的功能,于是我就换成“XCOM”。使用方法和之前的大体一致。
下载链接
提取码:3mzd

更改编码方式:

4、硬件连线

MCU ESP8266
3.3V VCC
GND GND
PB10 RXD
PB11 TXD
3.3V IO
3.3V RST
MCU USB转TTL
5V VCC
GND GND
PA9 RXD
PA10 TXD

5、代码解析

基础功能的代码这里就不详细介绍了,主要讲解关键代码。
源代码在文末下载,大部分代码已经加上注释。

5.1、ESP8266初始化程序

ESP8266初始化,实现建立WIFI连接的功能。
其实就是串口发送AT指令,然后等待ESP8266的回复而已,很简单的。
移植时需要更改的地方为wifi的账号(wifista_ssid)和密码(wifista_password),该定义在esp8266.c中更改。
本代码发送的AT指令有:

指令 回复 功能
AT OK AT测试
AT+CWMODE=1 OK 设置wifi模式
AT+RST OK 重启模块
AT+CIPMUX=0 OK 设置连接模式
AT+CWJAP=“ssid”,“pwd” WIFI GOT IP 连接wifi
void esp8266_start_trans(void)
{u8 *p;p=mymalloc(SRAMIN,50);                          //申请32字节内存,用于存wifista_ssid,wifista_passwordprintf("send:AT\r\n");   while(esp8266_send_cmd("AT","OK",20))//检查WIFI模块是否在线{} //设置工作模式 1:station模式   2:AP模式  3:兼容 AP+station模式printf("send:AT+CWMODE=1\r\n"); esp8266_send_cmd("AT+CWMODE=1","OK",50);//Wifi模块重启printf("send:AT+RST\r\n");   esp8266_send_cmd("AT+RST","OK",20);delay_ms(1000);         //延时3S等待重启成功delay_ms(1000);delay_ms(1000);  //设置连接到的WIFI网络名称/加密方式/密码,这几个参数需要根据您自己的路由器设置进行修改!! printf("send:AT+CIPMUX=0\r\n");   esp8266_send_cmd("AT+CIPMUX=0","OK",20);   //0:单连接,1:多连接     sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);//设置无线参数:ssid,密码printf("send:AT+CWJAP=\"%s\",\"%s\"\r\n",wifista_ssid,wifista_password);while(esp8266_send_cmd(p,"WIFI GOT IP",300));                    //连接目标路由器,并且获得IPmyfree(SRAMIN,p);
}

5.2、获取实时天气程序

这段代码和wifi初始化的分开,因为初始化代码只需要运行一次,而天气获取,是需要多次运行的。分开的话可以避免重复设置ESP8266的一些功能。
移植时需要更改的地方为代码中u3_printf中的私钥和地点。
本代码发送的AT指令有:

指令 回复 功能
AT+CIPSTART=“TCP”,“api.seniverse.com”,80 OK 建立TCP连接
AT+CIPMODE=1 OK 开启通透模式
AT+CIPSEND OK 开始透传
GET https://api.seniverse.com/v3/weather/now.json?key=私钥&location=城市&language=zh-Hans&unit=c\n\n 天气数据 提出请求
+++ 退出透传
//获取一次实时天气
//返回:0---获取成功,1---获取失败
u8 get_current_weather(void)
{u8 res;p=mymalloc(SRAMIN,40);                         //申请40字节内存sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",WEATHER_SERVERIP,WEATHER_PORTNUM);    //配置目标TCP服务器printf("send:AT+CIPSTART=\"TCP\",\"%s\",%s\r\n",WEATHER_SERVERIP,WEATHER_PORTNUM);res = esp8266_send_cmd(p,"OK",200);//连接到目标TCP服务器if(res==1){myfree(SRAMIN,p);return 1;}delay_ms(300);printf("send:AT+CIPMODE=1\r\n");    esp8266_send_cmd("AT+CIPMODE=1","OK",100);      //传输模式为:透传 USART3_RX_STA=0;printf("send:AT+CIPSEND\r\n");  esp8266_send_cmd("AT+CIPSEND","OK",100);         //开始透传printf("start trans...\r\n");u3_printf("GET https://api.seniverse.com/v3/weather/now.json?key=私钥&location=城市&language=zh-Hans&unit=c\n\n"); delay_ms(20);//延时20ms返回的是指令发送成功的状态USART3_RX_STA=0; //清零串口3数据delay_ms(1000);if(USART3_RX_STA&0X8000)        //此时再次接到一次数据,为天气的数据{ USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符} printf("USART3_RX_BUF=%s\r\n",USART3_RX_BUF);atk_8266_quit_trans();//退出透传printf("send:AT+CIPCLOSE\r\n");  esp8266_send_cmd("AT+CIPCLOSE","OK",50);         //关闭连接myfree(SRAMIN,p);return 0;
}

6、运行结果

将代码烧入后,可在串口调试器中查看到接收到的状态信息以及天气数据。
当按下按键(PA0),可再次获取天气数据。

7、源程序

7.1 百度网盘链接

链接:
https://pan.baidu.com/s/1sd00hF-RVmsDbEoMfnqdBQ
提取码:sgek

传送门:
基于STM32的ESP8266天气时钟(1)---------AT指令获取天气数据
基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据
基于STM32的ESP8266天气时钟(3)--------MCU数据处理及显示
基于STM32F的ESP8266天气时钟(4)--------MCU获取时间及显示(完结)

基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据相关推荐

  1. 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

    前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...

  2. 基于STM32的ESP8266模块控制多路继电器

    基于STM32的ESP8266模块控制多路继电器 1.视频讲解 基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制 物联网视频教程STM32+ESP8266 2.实物设计 ESP82 ...

  3. 基于STM32的ESP8266使用教程(一)

    关于为什么要写这篇文章,因为之前在做一个项目的时候需要使用WIFI模块.X宝搜WIFI模块的时候推荐ESP8266这个模块,说是价格便宜.使用方便.但是在使用的过程中发现的确使用方便(因为是基于AT指 ...

  4. 基于STM32的ESP8266使用教程(二)

    写在前面:博主懒癌晚期,考研结束之后想着HAPPY一下,结果把这事忘了,开学了又有很多事情要干,直到昨天一博友留言(有邮件提醒),才想起有这么个坑要填,特来填坑.相关软件程序请参考"基于ST ...

  5. python自动获取天气_用python获取天气数据,并作定时播报

    原标题:用python获取天气数据,并作定时播报 数据挖掘入门与实战 公众号: datadw 思路 1.调用和风天气的API,获取天气数据 2.用百度语音API,将天气数据合成语音 3.用树莓派每天早 ...

  6. 基于STM32的ESP8266获取天气数据(HAL库)

    一.介绍 进入主题,下图正是购买的esp8266模块 对于esp01,引脚图如下 二.刷固件 在使用AT指令时,有时候会无法进入AT模式,也就是在串口发送指令,无应答.除了检查引脚和TTL模块是否接错 ...

  7. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

    基于STM32+FreeRtos+DHT12+ESP8266+MQTT连接阿里云 1.概述 2.实现步骤 2.1.MQTT.fx模拟器与阿里云通信 2.2.STM32与阿里云通信 3. 搭建云平台 3 ...

  8. 基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接

    一直想把wifi模块和stm32连接起来,但是网上找了很久,并没有C语言相关的库,只有基于arduino的ESP8266 C++库,这个库是没办法直接给stm32使用的,所以自己动手丰衣足食,自己手动 ...

  9. linux天气时钟,预报天气时钟软件预约-预报天气时钟手机版v1.0-Linux公社

    预报天气时钟中拥有非常精准的天气预报功能,不仅可以预测到温度.湿度.空气质量指数.降水量等等,而且还会为你及时提醒恶劣天气情况,让你尽早做好出行准备,此外在预报天气时钟软件中你还可以享受到实时的空气质 ...

最新文章

  1. Linux系统调用--getrusage函数详解
  2. matlab求带参数二重定积分,matlab二重定积分
  3. 轻松掌柜显示不能连接到服务器,轻松掌柜推出在线进销存云端版
  4. MyBatis文档观后整理
  5. maya 替换名称_Maya玛雅入门教程 MAYA粒子替换功能和Mel命令colorAtPoint教程
  6. 【ATSC】【OTT】Netflix将作为美国有线机顶盒界面中的一个频道
  7. (九)ThunderbirdMail配置QQ邮件服务
  8. 我的一百个2019(五):2019,我为什么还在坚持?
  9. 高德地图api的使用
  10. win10计算机维护,手把手教您win10系统打开安全和维护功能的问题
  11. 关于js中e = e || window.event
  12. audio标签的播放、暂停、重播、进度拖拽等操作
  13. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程
  14. 开源项目SMSS开发指南(二)——基于libevent的线程池
  15. 美在线教育商Lynda连续15年盈利 首度融资1亿美元
  16. 机器学习教会我们的6个道理
  17. 3COM SS3 4400系列交换机VLAN功能设置
  18. eclipse没有自动提示的解决
  19. AWS题库完美分享(最新更新)
  20. Word处理控件Aspose.Words功能演示:使用 C++ 合并 MS Word 文档

热门文章

  1. H5跳转微信公众号解决方案
  2. Dear小弟×××,给你们的一封信「社区运营入门系列 序」
  3. VC浏览器相关的学习(三)(解决IE8无法断点调试)
  4. EasyNVR网页Chrome无插件播放摄像机视频功能二次开发之云台控制接口示例代码
  5. echarts默认高亮省市区联动
  6. 说说大型网站可伸缩性架构的设计原理
  7. 鸿图之下服务器维护10月25,更新公告丨《鸿图之下》11月25日维护更新预告
  8. 3d建模网上学习靠谱吗?学3d建模哪个大学好?
  9. 2017科协青少年科技中心--中央电教馆(与科技相关的比赛)
  10. KEIL5 AC6 出现printf告警