ESP32 Arduino (八) IIc和SPI

这篇具有很好参考价值的文章主要介绍了ESP32 Arduino (八) IIc和SPI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

IIC

一、简介:

ESP32有两个I2C控制器(也称为端口),负责处理两条I2C总线上的通信。每个I2C控制器都可以作为主机或从机运行。引脚21 默认的SDA, 引脚22是默认的SCL

IIC需要引入自带库 Wire.h Wire继承steam类 steam类有的他都有。

#include "Wire.h"

二、IIC相关函数(主机):

1. 初始化IIC (以主机身份) :begin

Wire.begin();

2. 以主机身份像从机请求数据: requestFrom

void requestFrom(uint16_t address, uint8_t size, bool sendStop)

参数:

  • address : 从机地址

  • size: 请求字节数

  • sendStop : 是否发送停止 , 如果为true, 释放IIC总线. 如果为false, 发送一个重新开始的信息, 并继续保持IIC总线的连接.

请求完成后 主机可以用 Wire.available()和Wire.read()等函数等待并获取从机的回答

示例

Wire.requestFrom(adress,10,true);

3. 主机开始传输 beginTransmission()

void beginTransmission(int address)

参数:

  • address : 从机地址

随后, 主机可以使用Wire.write();写数据并使用Wire.endTransmission();结束传输

示例:

Wire.beginTransmission(120);

4. 结束数据传输 endTransmission()

Wire.endTransmission();

5. 结束数据传输但不释放IIC占用 endTransmission(false)

返回值: uint8_t 类型

返回值对于数值含义:

含义

0

成功

1

数据过长,超出发送缓冲区

2

在地址发送时接收到NACK信号

3

在数据发送时接收到NACK信号

4

其他错误

示例:

Wire.endTransmission(false);

6. 写 write()

Wire.write();
当作为主机时: 主机将要发送的数据加入发送队列;
当作为从机时: 从机发送的数据给主机;

参数:

  • Wire.write(value); //单字节发送

  • Wire.write(string); //以一系列字节发送

  • Wire.write(data,length); //以字节形式发送,指定长度

返回值: byte类型,输入的字节数

7. 接收数据寄存器有值 available()

Wire.available();

功能:返回接收到的字节数

返回值: byte类型

  • 可读字节数

8. 读取1byte数据 read()

Wire.read()
当作为主机时: 主机使用requestFrom()后 要使用此函数获取数据;
当作为从机时: 从机读取主机给的数据;

返回值: 读到的字节数据 byte

9.读取多个字节的数据 readBytes()

size_t readBytes(char *buffer, size_t length)

参数:

  • buffer: 接收缓冲区, 一个char型指针

  • length: 数据长度

返回值: 数据长度

10. 读取直到遇到某字符

size_t readBytesUntil(char terminator, char *buffer, size_t length)

参数:

  • terminator : 终结字符 char类型

  • buffer: 接收缓冲区, 一个char型指针

  • length: 数据长度

返回值: 数据长度

11. 当前IIC忙线中?

Wire.busy();

返回布尔值

12. 读取字符串 readString() readStringUntil()

继承自steam类, 个人感觉iic不会用到的

13. 其他

parseFloat

parseInt

find

findUntil

setTimeout

这些都是steam继承来的 大家灵活应用

三、IIC相关函数(从机)

从机有些函数和主机是一样的, 一样的那些请看上面,这里我只讲解一些不一样的部分

1. 初始化IIC (以从机身份) begin(adress)

Wire.begin(120);                            

参数:adress (取值0~127)

2. 当从机被请求时触发函数onRequest()

void onRequest(void (*)())

参数:

  • 回调函数

3. 当从机收到数据时触发函数

void onReceive(void (*)(int))

参数:

  • 回调函数 (接收一个int类型的参数,代表接收的字节数)

SPI

一、简介

ESP32有四个SPI外设,分别为SPI0、SPI1、HSPI和VSPI。

  • SPI0是专用于Flash的缓存,ESP32将连接的SPI Flash设备映射到内存中。

  • SPI1和SPI0 使用相同的硬件线,SPI1用于写入flash芯片。

  • HSPI和VSPI可以任意使用。

  • SPI1、HSPI和VSPI共有三条片选线,因此作为SPI主机允许ESP32 至多驱动三个SPI设备

ESP32 Arduino (八) IIc和SPI

1. HSPI和VSPI的接口及引脚

SPI名

MOSI

MISO

SCLK

SS

VSPI

23

19

18

5

HSPI

13

12

14

15

2.SPI通讯流程如下:

ESP32 Arduino (八) IIc和SPI

二、SPI相关函数

1.SPI初始化 :SPI.begin()

SPI.begin();
SPI接口默认VSPI. 接口频率1 000 000, 数据默认采用MSBFIRST(低有效位优先), 时钟模式:SPI_MODE0(SCLK闲置为0, SCLK上升沿采样)

2. 设置数据在SPI上的传输方式 :SPI.setBitOrder(bitOrder);

SPI.setBitOrder(LSBFIRST);

参数:

  • bitOrder : 传输方式, 可选: LSBFIRST 低有效位先传 ; HSBFIRST 高有效位先传

3. 设置SPI频率 SPI.setFrequency(freq)

SPI.setFrequency(1000000);

参数:

  • freq 频率

4. 设置SPI的时钟模式 SPI.setDataMode(dataMode);

SPI.setDataMode(SPI_MODE0);

参数:

  • dataMode: 时钟模式, 可以取以下值

模式

说明

SPI_MODE0

SCLK闲置为低电平,上升沿采样(默认)

SPI_MODE1

SCLK闲置为低电平,下降沿采样

SPI_MODE2

SCLK闲置为高电平,上升沿采样

SPI_MODE3

SCLK闲置为高电平,下降沿采样

5. 按照setting的设置启动SPI通信: SPI.beginTransaction(setting);

采用该函数,可以代替上面三个函数了.
SPI.beginTransaction(setting);

参数:

  • setting 设置. 是SPISettings类型的对象, 有_bitOrder ,_clock ,_dataMode 这三个属性.

示例:文章来源地址https://www.toymoban.com/news/detail-428938.html

  setting1._bitOrder = LSBFIRST;
  setting1._clock = 1000000;
  setting1._dataMode = SPI_MODE0;
  SPI.beginTransaction(setting1);

6. 结束SPI通信 SPI.endTransaction();

SPI.endTransaction();

功能:结束SPI通信

7. 接收/发送一个字节的数据 SPI.transfer(data);

uint8_t SPIClass::transfer(uint8_t data) 

参数:

  • data: 要发送的数据

返回值: 接收到的数据

这里我们可以选择发送数据的长度,如下:

示例:

  SPI.transfer(0x01);
  SPI.transfer16(0x0102);
  SPI.transfer32(0x01020304);

  uint8_t byte1;
  uint16_t bytes2;
  uint32_t bytes3;
  byte1 = SPI.transfer();
  bytes2 = SPI.transfer16();
  bytes3 = SPI.transfer32();

到了这里,关于ESP32 Arduino (八) IIc和SPI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • esp32 +阿里云+Arduino 实现上传和下发信息实例 示例:通过PC端wifi通信实现用阿里云SetDeviceProperty API 控制蜂鸣器响

    1.vscode 创建.js项目 ,导入如下代码  注意你要下载 rhea 和crypto这两个库 2. 根据阿里云官方文档修改这部分内容,填写自己的信息  官方文档连接:  Node.js SDK接入示例 (aliyun.com)  3.Arduino上 编写如下代码 蜂鸣器插13号引脚 注意这部分填写你自己的信息,PRODUCT_KEY这些东西阿里

    2024年02月12日
    浏览(47)
  • 【研究开源机器臂】(3):低成本实现200多元实现,开源机械臂,使用Wemos D1 R32 ESP32 +Arduino CNC,可以控制机械臂往复运动了,有视频介绍和演示说明

    文章分类: https://blog.csdn.net/freewebsys/category_5782941.html 前面讨论了相关的技术调研。 或者这样的: 第一次折腾,价格便宜就行。 https://detail.1688.com/offer/656424665619.html v3 雕刻机扩展板+ A4988套件 21 元: https://detail.1688.com/offer/710743362308.html http://www.taichi-maker.com/homepage/reference-in

    2024年02月03日
    浏览(44)
  • Arduino ESP32开发环境搭建入门教程,esp32的arduino开发环境搭建教程,arduino导入eps32开发插件

    从官网下载 Arduino IDE 软件并安装。下载链接:Software | Arduino 网盘链接:链接:https://pan.baidu.com/s/1ZuSbo1BPy8XyyXzfl4KNzg?pwd=f8yd 提取码:f8yd 1、找到Arduino IDE安装目录,打开hardware文件夹。 2、在hardware文件夹中创建一个espressif文件夹。 3、将解压出的文件夹移动到espressif文件夹中,

    2024年02月13日
    浏览(53)
  • ESP32 IDF iic通信( 已验证) C语言

    关于iic原理建议B站自己看视频去, 然后本文主要实现了esp32的初始化, 写地址, 写数据, 读数据的功能, 从机的代码因为展示不需要,没写. 园子里面有个兄弟写了iic的代码.但是里面有点毒,多发了次地址验证,所以才有这篇文章; 代码注释比较多, 愿君少走弯路❀ 以下是头文件主要

    2024年02月03日
    浏览(40)
  • Arduino ESP32

    Arduino官网 1.下载Arduino IDE=SOFTWARE页面下载所需适配的操作系统(Windows, Linux, macOS)等; 其中Windows版本MSI installer是需要安装的。zip的解压即可运行不需要安装。 2.Arduino IDE中添加ESP32开发板软件包数据: Arduino IDE:文件首选项附加开发板管理器网址 中加入Arduino core for esp32的地

    2024年02月15日
    浏览(55)
  • ESP32 模拟键盘的简单操作 (ESP32 for Arduino)

    本来是以前做过的ESP32项目,但是想拿来用在别的项目上时发现找不到了。所以重新写一下这个项目,记录一下。 首先说明 :使用ArduinoIDE、模块型号为esp32-wroom-32。 库文件链接: 期间发现了好几个库,但是这个库选择的人比较多,就是用这个库。 Arduino 也有相类似的库,介

    2024年02月06日
    浏览(49)
  • Arduino离线安装esp32/esp8266

    使用本教程所示的安装方法,双击安装包的傻瓜式操作,不用进入文件夹修改,不用添加网站地址,免去网络带来的烦恼。安装完成后直接使用。 官网地址:Software | Arduino 打开链接后如图  点击红色框内以后跳转到此界面 再次选择红框后下载 打开安装包一直下一步就好 打

    2023年04月13日
    浏览(46)
  • Arduino通过两个按键开关控制舵机转动(含代码)

    两个开关控制舵机转动 在 Arduino 上控制舵机需要使用到一个 Servo 库,可以通过该库来轻松实现对舵机的控制。下面是两个开关通过 Arduino 控制舵机的步骤: 1.连接硬件:将舵机的 VCC 引脚连接到 Arduino 板子的 5V 引脚,GND 引脚连接到 GND 引脚。将舵机的控制引脚(通常是橙色

    2024年02月12日
    浏览(61)
  • ESP32-Touch(Arduino)

    Touch 传感器是一种外围设备,具有内部振荡器电路,可在固定时间段内测量相应GPIO引脚上的充电/放电频率。 因此,这些触摸传感器也被称为电容式传感器。例如,如果您触摸这些引脚中的任何一个,手指电荷将改变这个周期数, 通过更改连接到触摸传感器的 RC 电路。 Tou

    2024年01月16日
    浏览(35)
  • Arduino ESP32的串口

    在Arduino的核心中有三个串口,分别是Serial,Serial1,和Serial2. 当然ESP32也可以使用软串口。但硬件串口更稳健(我这样理解)。但Serial1这个串口不能使用,因为端口GPIO6 ~ GPIO11都用到了Flash。那如何使用你的Serial1串口哪?可以通过改变串口1的rxPin和txPin的方法,具体如下。 在

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包