STM32智能家居7天小项目(3)ESP8266和STM32的通信简单介绍

简介: STM32智能家居7天小项目(3)ESP8266和STM32的通信简单介绍

前言

这是学习百问网7天智能家居的第3天,本篇文章将带大家了解ESP8266和STM之前的通信。

一、环形缓冲区

buff.c

#include "buff.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int buff_Iint(Pbuffer buffer,u16 size)
{
  //判断参数合法性
  if(buffer==NULL||size==0)
  {
    return -1;
  }
  if(buffer->fifo==NULL)
  {
    buffer->fifo=(u8*)malloc(size);//申请空间
    if(buffer->fifo==NULL)//申请空间失败
    {
      return -1;
    }
  }
  //对缓冲区进行初始化
  buffer->pr=buffer->pw=0;
  buffer->buf_size=size;
  return 0;
}
int buffer_write(Pbuffer buffer,const u8 data)
{
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  //写入数据
  if((buffer->pw+1)%buffer->buf_size!=buffer->pr)
  {    
    buffer->fifo[buffer->pw]=data;
    buffer->pw=(buffer->pw+1)%buffer->buf_size;
    return 0;
  }
  return -1;
}
int buffer_writeBytes(Pbuffer buffer,u8 *data_strea,u8 len)
{
  int i=0;
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  if(data_strea==NULL)
  {
    return -1;
  }
  if(len==0)
  {
    return -1;
  }
  for(i=0;i<len;i++)
  {
      if(buffer_write(buffer,data_strea[i])!=0)
      {    
            break;
      }
  }
  return i;
}
int buffer_read(Pbuffer buffer,u8 *data)
{
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  if(buffer->pr!=buffer->pw)
  {
    *data=buffer->fifo[buffer->pr];
    buffer->pr=(buffer->pr+1)%buffer->buf_size;
    return 0;
  }
  return 0;
}
int buffer_readBytes(Pbuffer buffer,u8 *data_strea,u8 len)
{
  int i=0;
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  if(data_strea==NULL)
  {
    return -1;
  }
  if(len==0)
  {
    return -1;
  }
  for(i=0;i<len;i++)
  {
      if(buffer_read(buffer,&data_strea[i])!=0)
      {    
            break;
      }
  }
  return i;
}
int buffer_clean(Pbuffer buffer)
{
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  memset(buffer->fifo,0,sizeof(buffer->buf_size));//数据全部清0
  buffer->pr=buffer->pw=0;//读写置0
  return 0;
}

buff.h

#ifndef _BUFF_H_
#define _BUFF_H_
#include "main.h"
#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int
typedef struct
{
  u8 *fifo;
  u16 pw;//读指针
  u16 pr;//写指针
  u16 buf_size;//环形缓冲区大小
}buffer,*Pbuffer;
int buff_Iint(Pbuffer buffer,u16 size);
int buffer_write(Pbuffer buffer,u8 data);
int buffer_read(Pbuffer buffer,u8 *data);
int buffer_clean(Pbuffer buffer);
int buffer_writeBytes(Pbuffer buffer,u8 *data_strea,u8 len);
int buffer_readBytes(Pbuffer buffer,u8 *data_strea,u8 len);
#endif

二、ESP8266AT指令集

使用下面的AT指令即可操作ESP8266模块

image.png

总结

本文就简单介绍到这里,百问网下一节课将带我们如何去使用STM32串口对ESP8266发送信息。

相关文章
|
3月前
|
传感器 测试技术 芯片
基于STM32的环境监测系统 (esp8266)(上)
基于STM32的环境监测系统 (esp8266)(上)
581 0
|
8月前
|
传感器
基于STM32与FreeRTOS的四轴机械臂项目-3
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-3
|
8月前
|
传感器
基于STM32与FreeRTOS的四轴机械臂项目-2
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-2
|
7月前
|
传感器 数据采集 人工智能
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
342 1
|
8月前
|
传感器 存储
基于STM32与FreeRTOS的四轴机械臂项目-1
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-1
|
7月前
|
网络协议
了解AT指令以及STM32F103如何通过ESP8266连接到WiFi
AT指令是一组用于控制调制解调器的命令,最早由Hayes公司为其智能调制解调器开发。如今,AT指令已被广泛应用于各种通信模块中,包括GSM、Bluetooth和WiFi模块。AT指令通常以“AT”开头,后跟特定的命令和参数。通过这些指令,我们可以执行一系列操作,如设置网络参数、发送数据和查询状态等。
298 0
|
7月前
|
存储 算法 测试技术
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
218 0
|
7月前
|
存储 搜索推荐 安全
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(一)
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(一)
183 0
|
7月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
522 2
|
6月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
911 0