Arduino

Arduino是一款开源的硬件和软件电子平台,适用于制作交互式项目。

简介

时间轴

相似

快速入门

/*
 setup函数块,启动时执行一次,
 loop函数块,启动后一直循环执行。
*/

void setup() {
  pinMode(13,OUTPUT); 
}

void loop() {
  digitalWrite(13, 1);//点亮LED
  delay(1000);
  digitalWrite(13, 0);//关闭LED 
  delay(1000);
}
  • 4.将Arduino连接到电脑,板子选择Arduino UNO,选择连接的接口,点击upload(→图标),将程序上传到板子。

硬件

Arduino 已经发布了 100 多种硬件产品:板、扩展板、载体、套件和其他配件。Arduino硬件主要包括Nano系列,MKR系列,Classic系列和Mega系列。

了解更多 >> Arduino 官网:硬件


Classic系列

Classic系列是Arduino项目的支柱,包括最受欢迎的Arduino UNO,以及Leonardo&Micro等其他经典产品。

名称 微控制器 描述
Arduino UNO R4 Minima
Arduino UNO R4 WiFi
Arduino UNO R3 ATmega328P
Arduino Leonardo
Arduino UNO Mini Limited Edition
Arduino Micro
Arduino Zero
Arduino UNO WiFi Rev2

了解更多 >> Arduino 官网:硬件


Nano系列

Nano 系列是主要特点是小。

名称 微控制器 描述
Arduino Nano 33 IoT
Arduino Nano RP2040 Connect
Arduino Nano ESP32 ESP32
Arduino Nano 33 BLE Sense
nano ble
nano every
nano
nano motor carrier
Arduino Nano 33 BLE
Arduino Nano Every
Arduino Nano
Arduino Nano Motor Carrier

了解更多 >> Arduino 官网:硬件


MKR系列

了解更多 >> Arduino 官网:硬件


Mega系列

了解更多 >> Arduino 官网:硬件


停产产品

了解更多 >> Arduino 官网:硬件


通信

如果使用同一电源,不用连接地线。

名称 线数 通信模式 拓扑结构 描述
串口通信
UART
2 (TX, RX) 异步 点对点 适用于简单的点对点通信。
I2C通信 2 (SDA, SCL) 同步 多主多从 适用于需要多个设备通信的嵌入式系统,节省引脚资源但速度中等。
SPI通信 4(MOSI, MISO, SCK, SS/CS) 同步 主从 高速数据传输,速度快但需要更多引脚。

串口通信

串口主要用于按位进行传输数据。arduino uno只有一组硬件串口,但可以使用多个软串口。 以下示例,Arduino和语言识别模块ASRPRO通过串口通信,对ASRPRO说开,当ASRPRO识别到开,发送字符串'o'到Arduino,Arduino接收到'o',打开板载灯。

ASRPRO可以使用3组。使用板载默认组为PB_5(TX),PB_6(RX)。另外两组可以指定端口。

// 上电初始化

// 系统应用初始化
// 设置Serial波特率9600,TX口为PB_5,RX口为PB_6

// ASR_CODE
//

Arduino的默认串口端口为位于 0(RX)和 1(TX)的两个引脚。 将ASRPRO的PB_5(发送端口)连接到Arduino的0(接收端口),另一个也相应连接,地线连接在一起。

int data_read = 0;      // 定义变量用于接收串口数据

void setup() 
{
    Serial.begin(9600);  // 启动串口,设置波特率为 9600 bps
}
void loop() 
{
    data_read = Serial.read();
    if (data_read == 'o'){
        // 开灯
    }
}

I2C通信

arduino和树莓派通过I2C通信示例。

  • 1. 硬件连接

Arduino 的 SDA 引脚连接到树莓派的SDA(Pin3)。
Arduino 的 SCL 引脚连接到树莓派的SCL(Pin5)。
Arduino和树莓派的地线 (GND) 必须连接。

  • 2. 开启树莓派 I2C 接口

图形界面,在开始菜单》首选项》Raspberry Pi Configuration》Interfaces中开启I2C接口,然后重启。也可以使用命令启动 :

sudo raspi-config
# 选择 Interfacing Options -> I2C -> Enable

sudo reboot
  • 3. Arduino 代码

确保 Arduino 上的代码正确配置为 I2C 从机,并且地址正确。例如,使用地址 0x08:

#include <Wire.h>

void setup() {
    Wire.begin(0x08);  // 初始化 I2C 从机,地址为 0x08
    Wire.onReceive(receiveEvent); // 注册接收事件
    Wire.onRequest(requestEvent); // 注册请求事件
    Serial.begin(9600);
}

void loop() {
    delay(100000);  //延迟100秒,不影响I2C通信
}

void receiveEvent(int howMany) {
    while (Wire.available()) {
        char c = Wire.read();
        Serial.print(c);
    }
    Serial.println();
}

void requestEvent() {
    Wire.write("Hello from Arduino!");
}
  • 4. 查看是否连接

在树莓派上,使用sudo i2cdetect -y 1查看是否连接,如上面设置的08地址:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         08 -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

如果命令不能使用,是没有安装好i2c-tools:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y i2c-tools
  • 5. 测试简单的 Python 脚本
import smbus
import time

# 初始化I2C总线
bus = smbus.SMBus(1)
address = 0x08

while True:
    # 从Arduino请求数据
    data = bus.read_i2c_block_data(address, 0, 16)
    print(f"Received from Arduino: {''.join(chr(i) for i in data if i != 0)}")

    # 向Arduino发送数据
    bus.write_i2c_block_data(address, 0, list(b"Hello from Pi"))
    time.sleep(1)

资源

官网

网站

教程

视频教程

文章