ESP32是一款集成了Wi-Fi和蓝牙功能的芯片,它有四个SPI(串行外设接口)外设,分别是SPI0、SPI1、SPI2(通常称为HSPI)和SPI3(通常称为VSPI)。SPI是一种同步串行数据协议,用于微控制器与一个或多个外设之间的通信。例如,ESP32可以与支持SPI的传感器或另一个微控制器通信。
SPI通信中,总是有一个控制器(也称为主机)来控制外设(也称为从机)。数据可以同时发送和接收。这意味着主机可以向从机发送数据,从机也可以向主机发送数据。只能有一个主机,它是一个微控制器(ESP32),但可以有多个从机。从机可以是传感器、显示器、microSD卡等,或者另一个微控制器。可以将ESP32连接到多个传感器,但同一个传感器不能同时连接到多个ESP32板。
SPI通信需要四条线:
在只有从机的设备上,比如传感器、显示器等上
ESP32的SPI外设
ESP32集成了4个SPI外设:SPI0、SPI1、SPI2(通常称为HSPI)和SPI3(通常称为VSPI)。SP0和SP1用于内部访问ESP32的内置闪存。两个控制器共享相同的SPI总线信号,并且有一个仲裁器来确定哪个可以访问总线。在使用SPI1总线上的SPI主驱动程序时有很多限制。
可以使用HSPI和VSPI与其他设备通信。HSPI和VSPI具有独立的总线信号,名称相同。每条总线有三条CS线,可以驱动多达三个SPI从机。
与温度温度传感器SPI通信的代码
// 引入了SPI库
#include
//定义SPI引脚
#define CS_PIN 5 // Chip select pin
#define SCK_PIN 18 // Serial clock pin
#define MISO_PIN 19 // Master in slave out pin
#define MOSI_PIN 23 // Master out slave in pin
// 定义读取温度命令e
#define READ_TEMP 0x05 // 读取温度命令
#define READ_CONFIG 0x01 // 读取配置命令
// 定义变量存储温度
float temperature = 0;
void setup() {
// 初始化串口速率
Serial.begin(115200);
// I初始化SPI串口
SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, CS_PIN);
//设置SPI时钟
SPI.setClockDivider(SPI_CLOCK_DIV16);
// 设置SPI模式o MODE0
SPI.setDataMode(SPI_MODE0);
// 设置SPI位顺序 MSB f
SPI.setBitOrder(MSBFIRST);
// 读和打印传感器的配置寄存器的值,以检查是否正确连接
byte config = readRegister(READ_CONFIG);
Serial.print("Configuration register: ");
Serial.println(config, BIN);
}
void loop() {
// 每隔一秒读取并打印一次温度值,调用了readTemperature函数。
temperature = readTemperature();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
delay(1000);
}
//从传感器读取两个字节的原始温度数据,并将其转换为摄氏度
byte readRegister(byte reg) {
byte data = 0;
// CS 低电平选中传感器
digitalWrite(CS_PIN, LOW);
// 发送传感器寄存器的地址
SPI.transfer(reg);
// 读取寄存器数值
data = SPI.transfer(0x00);
// 拉高CS_PIN来取消选择传感器
digitalWrite(CS_PIN, HIGH);
return data;
}
// 从传感器读取一个字节的数据
float readTemperature() {
float temp = 0; //
// 读取温度寄存器中两个字节
byte msb = readRegister(READ_TEMP); // Most significant byte
byte lsb = readRegister(READ_TEMP + 1); // Least significant byte
// 组成一个16位的无符号数
uint16_t rawTemp = ((uint16_t)msb <<8) | lsb;
temp = (rawTemp &0x0FFF) *0.0625 -256;
return temp; //
}
页面更新:2024-04-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号