当前位置: 首页 > web >正文

ESP32的spi通讯(Arduino)

目录

一.基本配置

1.esp32-wroom-32引脚图

2.接线方式

3.Arduino芯片选择和库文件

3.1Arduino配置(2.0.11)

3.2 下载ESP32SPISlave库(0.6.8)文件

二、代码编写

1.主机代码

2.从机代码

3.注意事项

三、运行效果


一.基本配置

1.esp32-wroom-32引脚图

2.接线方式

主机的CS随便找个几个引脚就行,从机的CS尽量都连到GPIO5。

3.Arduino芯片选择和库文件

3.1Arduino配置(2.0.11)

如果搜不到这个开发板那就执行下面操作

地址为

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

3.2 下载ESP32SPISlave库(0.6.8)文件

github网址为

https://github.com/hideakitai/ESP32SPISlave

下载zip

导入到arduino

直接下载会有-master,把这个后缀删除即可。

导入完成后可以在

C:\Users\86152\Documents\Arduino\libraries

这个路径下找到ESP32SPISlave库文件,上面的路径都是安装的第三方库都放在这里,

esp32自己核心的库放在

C:\Users\86152\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries

重启Arduino,如果情况和下面一样,那么安装成成功

最后设置编译,查看是不是用的这个库

编译代码,版本正确,路径正确,那么成功配置

二、代码编写

1.主机代码

#include <SPI.h>const int CS_PIN = 5;
uint8_t master_tx[8] = {10, 20, 30, 40, 50, 60, 70,80};
uint8_t master_rx[8] = {0};void setup() {Serial.begin(115200);SPI.begin(18, 19, 23, 5);  // SCK, MISO, MOSI, SSpinMode(CS_PIN, OUTPUT);digitalWrite(CS_PIN, HIGH);Serial.println("SPI Master ready");
}void loop() {digitalWrite(CS_PIN, LOW);  // 开始通信for (int i = 0; i < 8; ++i) {master_rx[i] = SPI.transfer(master_tx[i]);}digitalWrite(CS_PIN, HIGH); // 结束通信Serial.print("Master Sent: ");for (uint8_t b : master_tx) {Serial.print(b);Serial.print(" ");}Serial.print(" | Received: ");for (uint8_t b : master_rx) {Serial.print(b);Serial.print(" ");}Serial.println();delay(2000); // 每 2 秒发送一次

2.从机代码

#include <ESP32SPISlave.h>ESP32SPISlave slave;static constexpr size_t BUFFER_SIZE = 8;
uint8_t tx_buf[BUFFER_SIZE] = {1,2, 3, 4, 5, 6, 7,8};
uint8_t rx_buf[BUFFER_SIZE] = {0};void setup() {Serial.begin(115200);slave.setDataMode(SPI_MODE0);slave.setQueueSize(1);// 使用指定引脚(默认 HSPI)slave.begin(HSPI, 18, 19, 23, 5); // SCK, MISO, MOSI, SSSerial.println("SPI Slave ready");
}void loop() {size_t received_bytes = slave.transfer(tx_buf, rx_buf, BUFFER_SIZE, 1000); // 1s超时if (received_bytes > 0) {Serial.print("Received ");Serial.print(received_bytes);Serial.print(" bytes from Master: ");for (size_t i = 0; i < received_bytes; ++i) {Serial.print(rx_buf[i]);Serial.print(" ");}Serial.println();// 修改应答数据,模拟不同内容for (size_t i = 0; i < BUFFER_SIZE; ++i) {tx_buf[i] = rx_buf[i] + 1;}}delay(100); // 避免过快重复 transfer
}

3.注意事项

        在上面的代码里面,好像需要主机和从机的接受和发送数组里面都是8个字节,每次发送和接受八个字节,不然就会出错,我现在也没找到原因,但是并不会影响使用。

三、运行效果

http://www.xdnf.cn/news/14339.html

相关文章:

  • Ubuntu 实现 sudo 免密码关键步骤
  • 启动springboot项目提示没有主清单属性
  • C++ 内存泄露
  • 以下是 NumPy 在统计与矩阵运算中的核心用法总结
  • linux msyql8 允许远程连接
  • java中扩展运算符
  • 《开窍》读书笔记8
  • 无线USB转换器TOS-WLink露面1个月以来总结
  • Cesium快速入门到精通系列教程九:Cesium 中高效添加和管理图标/标记的标准方式​​
  • Verilog自适应位宽与指定位宽不同导致模块无法正常执行
  • csharp设计方法
  • 带中断计数器的UART接收中断程序 (8259@400H/402H)
  • RapidNJ软件的安装
  • 【Python 爬虫 防盗链】
  • 山东大学软件学院项目实训:基于大模型的模拟面试系统项目总结(九)
  • Apifox将base64转换为图片(调试时方便查看)
  • BeckHoff <---> Keyence (LJ-X8000) 2D相机 Profinet 通讯
  • IO之详解cin(c++IO关键理解)
  • 矩阵运算基础、矩阵求导
  • 《Apollo 配置中心在动态主题系统中的设计与扩展》
  • openeuler 系统—— 集成大模型分析日志中的错误信息生成故障原因报告
  • LeetCode - 34. 在排序数组中查找元素的第一个和最后一个位置
  • GTSAM中InitializePose3::initialize()使用详解
  • 数据目录:企业数据管理的核心引擎与最佳实践
  • 各种运算符的学习心得
  • 【JavaScript-Day 41】JS 事件大全:click, keydown, submit, load 等常见事件详解与实战
  • RK全志平台WiFiBT调试思路
  • 替换一个数字后的最大差值
  • 【配件出入库专用软件】佳易王配件进出库管理系统:轻量级仓储管理解决方案配件管理系统#进出库管理#仓储软件#库存统计#轻量级解决方案
  • 错题分析接口实现全流程