Arduino
Arduino是一款开源的硬件和软件电子平台,适用于制作交互式项目。
简介
时间轴
相似
快速入门
- 1.买一块Arduino版,如Arduino UNO R3。
- 2.下载Arduino IDE,https://www.arduino.cc/en/software
- 3.打开Arduino IDE,写一个闪灯程序。
/*
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)
资源
官网
- Arduino 官网:https://www.arduino.cc
- Arduino 文档:https://docs.arduino.cc
- Arduino 源代码:https://github.com/arduino