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发送信息。

相关文章
|
1月前
|
传感器 测试技术 芯片
基于STM32的环境监测系统 (esp8266)(上)
基于STM32的环境监测系统 (esp8266)(上)
252 0
|
6月前
|
传感器
基于STM32与FreeRTOS的四轴机械臂项目-3
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-3
|
6月前
|
传感器
基于STM32与FreeRTOS的四轴机械臂项目-2
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-2
|
5月前
|
传感器 数据采集 人工智能
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
233 1
|
5月前
|
网络协议
了解AT指令以及STM32F103如何通过ESP8266连接到WiFi
AT指令是一组用于控制调制解调器的命令,最早由Hayes公司为其智能调制解调器开发。如今,AT指令已被广泛应用于各种通信模块中,包括GSM、Bluetooth和WiFi模块。AT指令通常以“AT”开头,后跟特定的命令和参数。通过这些指令,我们可以执行一系列操作,如设置网络参数、发送数据和查询状态等。
223 0
|
6月前
|
传感器 存储
基于STM32与FreeRTOS的四轴机械臂项目-1
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-1
|
5月前
|
存储 算法 测试技术
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
172 0
|
5月前
|
存储 搜索推荐 安全
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(一)
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(一)
118 0
|
1月前
|
传感器 监控 搜索推荐
探索智能家居技术的未来
【10月更文挑战第6天】 本文深入探讨了智能家居技术的发展历程、当前应用及其未来前景。通过分析物联网(IoT)的基本原理和智能家居设备的实际应用案例,揭示了该领域面临的挑战与机遇,并提出了未来发展的趋势和可能性。
43 3
|
1月前
|
传感器 人工智能 物联网
探索智能家居技术:现状与未来
本文深入探讨了智能家居技术的发展历程、当前主要技术和应用,并展望了其未来的发展趋势。通过对现有技术的详细解析和案例分析,揭示了智能家居在提升生活品质、节能减排等方面的潜力,同时指出了目前面临的挑战和可能的解决方案。