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

2023-11-13

一.介绍

进入主题,下图正是购买的esp8266模块请添加图片描述
对于esp01,引脚图如下

在这里插入图片描述

二.刷固件

在使用AT指令时,有时候会无法进入AT模式,也就是在串口发送指令,无应答。除了检查引脚和TTL模块是否接错,还可能是需要刷固件,在接线时要注意TTL要与ESP8266共地,可以用面包板拓展出来一个GND
1.在安信可官网下载刷固件工具
安信可官网
在这里插入图片描述
2.选择8266系列
在这里插入图片描述
3.在这里插入图片描述
提示框中出现这样代表固件下载完成。

三.AT指令

ESP8266与TTL连接图如下(一定要连接正确,别问为什么)
在这里插入图片描述

在波特率为115200的情况下,向串口发送AT,会出现一段乱码,最后一行出现ready,表示模块已经进入AT模式
在这里插入图片描述
这位博主的AT指令集很详细,我就不赘述了AT指令
下面介绍三种工作方式
1.sta模式(即模块作为客户端,可以连接其他局域网)
向串口发送以下指令
1.AT+CWMODE=1
2.AT+CWJAP=“newifi_F8A0”,“anxinke123”
注意WiFi名称必须为10字节,否则连接不上在这里插入图片描述
2.AP模式(WiFi模块作为服务端,相当于一个热点)
1.AT+CWMODE=2
2.AT+CWSAP=“esp8266”,“12345678”,11,3
请添加图片描述

3.AP+sta模式
1. AT+CWMODE=3
2.AT+CWSAP=“esp8266”,“12345678”,11,3
3.AT+CWJAP=“abc”,“qwertyui”
在这里插入图片描述
esp8266同时支持配网,但是由于模块无法连接5G路由器,所以不做演示。

四.单片机驱动模块获取天气

在得到天气之前,首先要连接热点,然后连接TCP,再向网址提出请求,具体过程在C文件里面,下面的代码是自己根据顺序写的,大家也可以自己编写。

1.首先是cubemx的配置

在这里插入图片描述
这里打开两个串口,一个开启中断,开启中断的串口与ESP8266通信,另一个串口用作数据监视。注意单片机与ESP8266的连接方法请添加图片描述

2.代码层

首先大家按照这位博主的方法在心知天气网进行注册
完成之后,将

GET https://api.seniverse.com/v3/weather/now.json?key=私钥&location=城市&language=zh-Hans&unit=c

这里的私钥,城市替换进去
CUBEMX生成代码后,在
在这里插入图片描述
添加中断开启函数,在main函数下方添加回调函数(我这里使用串口1与ESP8266通信,串口2检测数据)

 //ES8266驱动串口接收中断处理函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	//uint8_t res;
	if(huart->Instance == USART1)	// 判断是由哪个串口触发的中断
	{
	//	HAL_UART_Receive(&huart1, usart1_rxone, 1, 0xffff);
		//将接收到的数据放入接收usart1接收数组
		usart1_rxbuf[usart1_rxcounter] =usart1_rxone[0];
		usart1_rxcounter++;	//接收数量+1

		//重新使能串口1接收中断
		HAL_UART_Receive_IT(&huart1,usart1_rxone,1);		
	}
}

下面是驱动函数

#include "esp8266.h"
#include "stdio.h"
#include "stdint.h"



uint8_t usart1_txbuf[256];
uint8_t usart1_rxbuf[512];
uint8_t usart1_rxone[1];
uint8_t usart1_rxcounter;


//查找字符串1中是否包含字符串2
uint8_t Find_Str(char* str1,char* str2)
{
	if(strstr(str1,str2)==0)//str只能返回字符串
	{		
		return 0;           //不包含返回0
	}                       
	else return 1;   //包含返回1
}

uint8_t ESP8266_Check(void)
{
	HAL_UART_Transmit(&huart1,(uint8_t*)"AT\r\n", strlen("AT\r\n"), 100);
	if(Find_Str((char* )usart1_rxbuf,"OK"))
	{
		return 1;
	}
	else return 0;
}

void ESP8266_WIFI_Connect(char* ssid,char* pswd)
{
	HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CWMODE=1\r\n", strlen("AT+CWMODE=1\r\n"), 0xffff);
	sprintf((char*)usart1_txbuf,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,pswd);
	HAL_UART_Transmit(&huart1,(uint8_t*)usart1_txbuf, strlen((char*)usart1_txbuf), 0xffff);
	HAL_Delay(1000);
  if(Find_Str((char* )usart1_rxbuf,"CONNECT"))
	{
		printf("WIFI OK");
	}
	else printf("WIFI NO");
}

void ESP8266_Weather_Get(char* MODE,char* IP,uint16_t PORT)
{
	sprintf((char*)usart1_txbuf,"AT+CIPSTART=\"%s\",\"%s\",%d\r\n",MODE,IP,PORT);
	HAL_UART_Transmit(&huart1,(uint8_t*)usart1_txbuf, strlen((char*)usart1_txbuf), 0xffff);
	if(Find_Str((char* )usart1_rxbuf,"CONNECT"))
	{
		printf("TCP OK");
	}
	else printf("TCP NO");
	
	HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CIPMODE=1\r\n", strlen("AT+CIPMODE=1\r\n"), 0xffff);
	HAL_Delay(1000);
	HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CIPSEND\r\n", strlen("AT+CIPSEND\r\n"), 0xffff);
	HAL_Delay(1000);
	HAL_UART_Transmit(&huart1,(uint8_t*)"GET https://api.seniverse.com/v3/weather/now.json?key=SmDRsPvn-1fxNz97x&location=beijing&language=zh-Hans&unit=c\r\n", strlen("GET https://api.seniverse.com/v3/weather/now.json?key=SmDRsPvn-1fxNz97x&location=beijing&language=zh-Hans&unit=c\r\n"), 0xffff);
	HAL_Delay(1000);
	HAL_UART_Transmit(&huart1,(uint8_t*)"+++", strlen("+++"), 0xffff);
}


/*
得到天气的顺序
    HAL_UART_Transmit(&huart1,(uint8_t*)"AT\r\n", strlen("AT\r\n"), 100);
	  HAL_Delay(1000);
		HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CWMODE=1\r\n", strlen("AT+CWMODE=1\r\n"), 0xffff);
		HAL_Delay(1000);
    HAL_UART_Transmit(&huart1,(uint8_t*)"AT+RST\r\n", strlen("AT+RST\r\n"), 0xffff);
		HAL_Delay(3000);
		HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CIPMUX=0\r\n", strlen("AT+CIPMUX=0\r\n"), 0xffff);
		HAL_Delay(1000);
		HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CWJAP=“abc”,qwertyui\r\n", strlen("AT+CWJAP=“abc”,“qwertyui”\r\n"), 0xffff);
		HAL_Delay(1000);
		HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CIPSTART=\"TCP\",\"api.seniverse.com\",80\r\n", strlen("AT+CIPSTART=\"TCP\",\"api.seniverse.com\",80\r\n"), 0xffff);
		HAL_Delay(300);
		HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CIPMODE=1\r\n", strlen("AT+CIPMODE=1\r\n"), 0xffff);
		HAL_Delay(1000);
		HAL_UART_Transmit(&huart1,(uint8_t*)"AT+CIPSEND=5\r\n", strlen("AT+CIPSEND=5\r\n"), 0xffff);
		HAL_Delay(1000);
		HAL_UART_Transmit(&huart1,(uint8_t*)"GET https://api.seniverse.com/v3/weather/now.json?key=SmDRsPvn-1fxNz97x&location=beijing&language=zh-Hans&unit=c\r\n", strlen("GET https://api.seniverse.com/v3/weather/now.json?key=SmDRsPvn-1fxNz97x&location=beijing&language=zh-Hans&unit=c\r\n"), 0xffff);
	 HAL_Delay(1000);
	 HAL_UART_Transmit(&huart1,(uint8_t*)"+++", strlen("+++"), 0xffff);
*/


#ifndef __ESP8266_H
#define __ESP8266_H

#include "stm32f1xx_hal.h"
#include "usart.h"
#include <string.h>
#include <stdio.h>


extern uint8_t usart1_txbuf[256];
extern uint8_t usart1_rxbuf[512];
extern uint8_t usart1_rxone[1];
extern uint8_t usart1_rxcounter;

void ESP8266_Weather_Get(char* MODE,char* IP,uint16_t PORT);
void ESP8266_WIFI_Connect(char* ssid,char* pswd);
uint8_t ESP8266_Check(void);
uint8_t Find_Str(char* str1,char* str2);

#endif

展示一下成果,
在这里插入图片描述
总结一下,这次对WIFI模块的探索中,耗费时间比较长在获取天气上,忽略掉了在引号里面显示引号要在前面加反斜杠还有换行这种小细节,以后还是要多多注意细节。加油,继续努力。
欢迎指正

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32的ESP8266获取天气数据(HAL库) 的相关文章

  • npm 配置淘宝镜像

    首先解释一下 npm 为什么要配置淘宝镜像 原因 因为node js 默认使用的是国外的网站 国内访问有一个跨国内局域网的操作 所以就会有时候很慢 这就跟为什么网站的静态资源有些会使用CDN 加速一样的 淘宝镜像是什么 就是npm 很多的插
  • hive转义问题详解

    hive转义问题详解 引言 hive控制台执行 字符串不包含 字符串包含 hive e的方式嵌入到shell脚本执行 字符串不包含 字符串包含 总结 引言 hive转义问题想必进来的同学都遇到过 这里就直奔主题了 此类问题大致可以分为两种常

随机推荐

  • Linux上快速安装软RAID详细步骤

    常见问题服务平台 2018 11 17 物理环境 虚拟机CentOS6 4 配置 8G内存 2 2核cpu 3块虚拟硬盘 sda sdb sdc sdb和sdc是完全一样的 在实际生产环境中 系统硬盘与数据库和应用是分开的 这样有利于系统的
  • HDRP

    HDRP 的 10 版本支持 Unity 2020 LTS 及以上 新版的 HDRP 软件包将继续优化用户友好的界面 灵活的功能 管线的稳定性和总体性能 但如果想将 HDRP 设置到最佳状态 你必须要了解所有主要的管线设置 及其背后的原理和
  • Oracle报错:IO Error: The Network Adapter could not establish the connection

    Caused by oracle net ns NetException The Network Adapter could not establish the connection at oracle net nt ConnStrateg
  • 深度学习框架Pytorch快速开发与实践

    决定用两个星期读完这本书 并自己用Pytorch搭建一个模型 2019 8 5 第一章深度学习介绍 明确学习目标 深度学习难点不是深度学习本身 难的是你要吃透问题 如何用深度学习的逻辑去思考你自己的问题 有针对性地设计模型 难的是你有分析问
  • 机器学习系列(7)_机器学习路线图(附资料)

    作者 龙心尘 寒小阳 时间 2016年2月 出处 http blog csdn net longxinchen ml article details 50749614 http blog csdn net han xiaoyang arti
  • epoll高度封装reactor,几乎所有可见服务器的底层框架

    目录 前言 reactor是什么 如何理解 reactor所需组件流程分析 组件 流程 如何将epoll的IO驱动封装成reactor事件反应堆驱动 reactor分块分析实现 注册事件处理器部分流程 多路复用器监视多路IO事件 事件分发器
  • 【React学习】React更新渲染原理

    当我们调用 setState 之后发生了什么 react经历了怎样的过程将新的 state 渲染到页面上 一次react更新 核心就是对虚拟dom进行diff 找出最少的需要变化的dom节点 然后对其进行相应的dom操作 用户即可在页面上看
  • MySQL数据导入--load data

    起因 朋友的数据库 用的版本是5 5 19 服务端和客户端字符集都是utf8 因为某些原因 系统经过好多人的开发和处理 同一个表存在多种字符集写入 so乱码问题 时有发生 为了彻底解决这个问题 我这边的操作如下 1 核查工程中转码的地方 2
  • Python初学者的一个常见错误

    大家都知道 列表是可变数据类型 而可变数据类型的操作尤其需要我们细心 不然很容易出错 来看看这个例子 list1 1 2 3 4 5 list2 list1 3 print list2 list1 2 b list2 1 1 a print
  • [从零开始学DeepFaceLab-8]: 使用-命令行八大操作步骤-第5步:从源图片中提取所需图片

    目录 总体流程 步骤5 从源视频中提取图片 5 1 命令 5 data dst faceset extract manual fix bat 不推荐使用
  • vue回车事件

    一 需求 需求 登录页面在输入密码后 按回车键 Enter 触发登录 二 实现 部分代码 重点事件 keyup enter native 指的是回车监听事件 举例 keyup enter native submitForm ruleForm
  • 贪心算法——排队打水问题

    6 3 排队打水问题 有n个人排队到r个水龙头去打水 他们装满水桶的时间为t1 t2 tn为正整数且个不相等 应如何安排他们打水顺序才能使他们花费的时间最少 算法分析 时间总和 等待时间 装水时间 采用贪心思想 先sort 默认将装水时间从
  • LeetCode-2335. 装满杯子需要的最短总时长【贪心,数学】

    LeetCode 2335 装满杯子需要的最短总时长 贪心 数学 题目描述 解题思路一 其实像一道数学题目 假设三个杯子x lt y lt z先分两种情况 第一种 x y lt z 答案直接是最大的z 第二种 x y gt z 先将x与y互
  • .NET6之MiniAPI(四):配置

    配置文件 是一个每个应用服务程序常用的功能 从原来的终端应用时代 到现在的元宇宙时代 配置都是很悠然自得的存在 asp net core提供了强大的配置文件访问机制 不管是MVC API还是MiniAPI 使用方式都是相同的 框架默认的配置
  • 初识 Redis - 分布式,内存数据存储,缓存

    目录 1 什么是 Redis 1 1 Redis 内存数据存储 1 2 Redis 用作数据库 1 3 Redis 用作缓存 cache 1 4 用作消息中间件 1 什么是 Redis The open source in memory d
  • 关于面试时的自我介绍口述(样版)

    前言 段落引用很多小伙伴都有过面试不知道说啥 一昧的做简单的自我介绍 如 我叫XXX 今年几岁 男 来自XXX 然后就不知道说啥了 甚至有的会说简历上有您直接看就是了 口述朗文 下面的1 2 3 4无需在口述中表达出来 简单的说就是别念出来
  • 右键菜单调用命令行

    新建文档 Windows Registry Editor Version 5 00 HKEY CLASSES ROOT Folder shell CmdPrompt cmd here HKEY CLASSES ROOT Folder she
  • DELL戴尔笔记本电脑灵越Inspiron 14 5410&5418原厂Win10系统恢复原装OEM出厂状态系统

    Dell戴尔笔记本电脑 灵越Inspiron 14 5410 5418原装出厂OEM系统镜像原厂系统文件 系统自带所有驱动 出厂主题壁纸LOGO Office办公软件等预装程序 链接 https pan baidu com s 1Qj dW
  • C++ 核心编程

    一 内存分区模型 C 程序在执行时 将内存大方向划分为4个区域 代码区 存放函数体的二进制代码 由操作系统进行管理 全局区 存放全局变量和静态变量以及常量 栈区 由编译器自动分配释放 存放函数的参数值 局部变量等 堆区 由程序员分配和释放
  • 基于STM32的ESP8266获取天气数据(HAL库)

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