IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32智能家居(4)ESP8266连接WIFI -> 正文阅读

[嵌入式]STM32智能家居(4)ESP8266连接WIFI


前言

今天是学习百问网智能家居项目的第4天,本文我们将会介绍如何使用ESP8266进行连接WIFI

一、ESP8266和WIFI的连接

STM32通过串口和ESP8266进行通信,发送指定的AT指令即可实现联网。ESP8266可以单独进行联网也可以通过上面方式进行联网。
注意:ESP8266只能连接2.4GHZ的WIFI,很多人可能因为连接到的是5GHZ的WIFI导致ESP8266无法和WIFI进行连接。

二、代码展示

main.c

  USART3_StartRx();//开启串口3接收函数
  esp8266_Init();

串口代码

static uint8_t rx_len;
static uint8_t rx_data;
static uint8_t usart_rx_buf[200];

// 串口3启动接收
void USART3_StartRx(void)
{
	HAL_UART_Receive_IT(&huart3, (uint8_t*)&rx_data, 1);
}

// 串口3中断回调函数(保存每次接收的数据,并启动下一次接收)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	usart_rx_buf[rx_len%200] = rx_data;
	rx_len++;
	HAL_UART_Receive_IT(&huart3, (uint8_t*)&rx_data, 1);
}

// 串口3接收的数据
uint16_t USART3_Receive(uint8_t *pdata)
{
	memcpy(pdata, (uint8_t*)usart_rx_buf, rx_len);
	return rx_len;
}

// 串口3发送数据
void USART3_Transmit(uint8_t *pData, uint16_t Size, uint32_t Timeout)
{
	HAL_UART_Transmit(&huart3, pData, Size, Timeout);
}

// 清理串口3接收的数据
void USART3_ClearBuf(void)
{
	rx_len = 0;
	memset((uint8_t*)usart_rx_buf, 0, 200);//将数据都清除为0
}




ESP8266.c

#include "esp8266.h"
#include "log.h"
#include <string.h>



u8 esp8266_sendcmd(char *cmd,char *reply,u16 timeout)
{
  //保存传入的指令
  u8 buf[256]={0};
  strcat(buf,cmd);//将AT指令拼接到buf
  
  //处理AT指令
  if(0==strstr(buf,"\r\n"))//判断是否有换行符
  {
    strcat(buf,"\r\n");//加上换行符
  }
  
  //清理前面接收的buf
  USART3_ClearBuf();
  
  //发送数据
  USART3_Transmit((u8*)buf,sizeof(buf),500);
  
  //接收数据
  memset(buf,0,256);
  while(timeout!=0)
  {
    if(USART3_Receive((u8*)buf))
    {
      if(strstr(buf,reply))
      {
        PRINTF("%s Send ok!\r\n", cmd); // 发送成功
        if (strstr(buf, "CIFSR"))
        {
          	PRINTF("%s\r\n", buf); // 打印IP地址
        }
        return 0;
      }
    }
    else
    {
      timeout--;
      HAL_Delay(1);
    }
        
  }
  
  
  PRINTF("%s send error\r\n",cmd);
  return 1;
}


void esp8266_Init(void)
{
  esp8266_sendcmd("AT+RST", "OK", 500);//重启模块
  HAL_Delay(1000);
  esp8266_sendcmd("AT+CWMODE=1", "OK", 500);//模式设置
  esp8266_sendcmd("AT+CWJAP=\"MERCURY_2446\",\"740740740\"", "OK", 5000);//连接路由
  esp8266_sendcmd("AT+CIPMUX=1", "OK", 500);//设置多连接
  esp8266_sendcmd("AT+CIPSERVER=1,9999", "OK", 500);//创建TCP服务
  esp8266_sendcmd("AT+CIFSR", "OK", 500);//查询IP地址
}

void esp8266_Task(void)
{
  
}

void esp8266_Handle(void)
{
  
}



ESP8266.h

#ifndef _ESP8266_H_
#define _ESP8266_H_

#include "main.h"

#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int

#define WIFI_NAME   "Dongsan201"
#define WIFI_PASSWORD   "66666666"

u8 esp8266_sendcmd(char *cmd,char *reply,u16 time);//向esp8266发送AT指令

void esp8266_Init(void);//初始化调用
void esp8266_Task(void);//后台轮询调用
void esp8266_Handle(void);//中断调用




#endif


main.c

esp8266_Init();

总结

感谢百问网让我了解到了如何使用ESP8266进行联网。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:35:53  更:2022-05-11 16:37:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:48:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码