NRF24L01收发器模块
让我们来看看NRF24L01收发器模块。它使用2.4 GHz频段,可以在250 kbps到2 Mbps的波特率下运行。如果在开放空间中使用且波特率较低,其范围可达100米。

该模块可以使用125个不同的通道,可以在一个地方拥有125个独立工作的调制解调器网络。每个通道最多可以有6个地址,或者每个单元可以同时与多达6个其他单元通信。

在传输过程中,该模块的功耗仅为12mA左右,甚至低于单个LED。该模块的工作电压范围为1.9至3.6V,但好处是其他引脚可以容忍5V逻辑,因此我们可以轻松地将其连接到Arduino而无需使用任何逻辑电平转换器。
其中三个引脚用于SPI通信,它们需要连接到Arduino的SPI引脚,但请注意每个Arduino开发板都有不同的SPI引脚。引脚CSN和CE可以连接到Arduino板的任何数字引脚,它们用于将模块设置为待机或活动模式,以及用于在发送或命令模式之间切换。最后一个引脚是一个不必使用的中断引脚。
 
因此,一旦我们将NRF24L01模块连接到Arduino开发板,我们就可以为发射器和接收器制作代码了。

示例所需的组件如下:
● NRF24L01收发器模块
● Arduino开发板
● 面包板和跳线
Arduino代码
首先,我们需要下载并安装RF24库,这使得编程变得简单。
以下是无线通信的两个代码,在代码下面是对它们的解释。
发射机代码
/*
* Arduino Wireless Communication Tutorial
*     Example 1 - Transmitter Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include 《SPI.h》
#include 《nRF24L01.h》
#include 《RF24.h》
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}
void loop() {
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  delay(1000);
}/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include 《SPI.h》
#include 《nRF24L01.h》
#include 《RF24.h》
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}
void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
}代码描述:
  我们需要包含基本SPI和新安装的RF24库,并创建一个RF24对象。这里的两个参数是CSN和CE引脚。
  RF24 radio(7, 8); // CE, CSN
  接下来,我们需要创建一个字节数组,它将代表地址,或两个模块通过的所谓管道。
  const byte address[6] = "00001";
  我们可以将此地址的值更改为任意5个字母的字符串,这样就可以选择我们要说话的接收器,因此在本例中,我们将在接收器和发送器上具有相同的地址。
  在设置部分,我们需要初始化无线电对象,并使用radio.openWritingPipe()函数设置我们将发送数据的接收器的地址,即我们之前设置的5个字母的字符串。
  radio.openWritingPipe(address);
  另一方面,在接收器处,使用radio.setReadingPipe()函数,我们设置相同的地址,并以此方式启用两个模块之间的通信。
  radio.openReadingPipe(0, address);
  然后使用radio.setPALevel()函数设置功率放大器电平,在我们的例子中,我将其设置为最小值,因为我的模块彼此非常接近。
  radio.setPALevel(RF24_PA_MIN);
  请注意,如果使用更高的电平,建议在GND和3.3V模块之间使用旁路电容,以便在工作时具有更稳定的电压。
  接下来我们有了radio.stopListening()函数,它将模块设置为发送器,另一方面,我们有radio.startListening()函数,它将模块设置为接收器。
  // at the Transmitter
  radio.stopListening();
  // at the Receiver
  radio.startListening();
  在发送器的loop函数中,我们创建了一个字符数组,并为其分配消息“Hello World”。使用radio.write()函数,我们将该消息发送给接收器。这里的第一个参数是想要发送的变量。
void loop() {
    const char text[] = "Hello World";
    radio.write(&text, sizeof(text));
    delay(1000);
}void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
}原文:https://www.yiboard.com/thread-994-1-1.html
 
            电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。
Arduino-ESP32与ESP-IDF的版本对应表。
Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789
Queue 库提供了一个通用的 C++ 动态队列实现,专为在 Arduino 项目中使用而定制。
 
            本程序是小鹏物联网智能浇花套件的单机版程序(不连接物联网),供同学们参考。
 
            ArrayList 类是一个 C++ 模板类,它提供了 ArrayList 的实现,以便轻松存储任何指定类型的值。它允许使用索引进行高效存储和检索,支持排序操作。
 
            ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。
在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。
TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。
 
            Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。
用于Arduino的Adafruit_GFX库为我们所有的LCD和OLED显示器提供了通用语法和图形功能集。这使Arduino程序可以轻松地在显示类型之间进行调整,而不必花太多精力……
