本帖最后由 云天 于 2021-5-25 21:24 编辑
【Arduino Expansion Shield for Raspberry Pi B+ 扩展板】
DFRobot树莓派的扩展板。适应树莓派B+/2B/3B板,扩充更多的GPIO。 是一款具备Arduino 标准接口的 树梅派扩展板。他内部集成了 Arduino Leonardo主板,通过对这个Arduino Leonardo进行编程,可以实现一些树莓派不具备的功能,例如使用PWM来控制电机的速度、ADC来读取模拟量信号、外部中断口可以实时处理一些任务。 Arduino Expansion Shield for Raspberry Pi B+ 扩展板的USB口可以插在树莓派的USB HOST接口上这样我们就可以通过在树莓派系统里面安装Arduino IDE直接对扩展板进行编程。 然后通过USB接口,扩展板可以直接和树莓派进行通信协调工作。 https://wiki.dfrobot.com.cn/_SKU_DFR0327_Arduino_Expansion_Shield_for_Raspberry_Pi_B_2B_%E6%A0%91%E8%8E%93%E6%B4%BEB_2B%E6%89%A9%E5%B1%95%E6%9D%BF 【点灯】 首先在树莓派上安装 Arduino
- <font color="rgb(66,66,66)">root@raspberrypi:/home/pi# sudo apt-get update
- root@raspberrypi:/home/pi# sudo apt-get install arduino</font>
复制代码
安装完成,在打开Arduino IDE 之前 你需要确认 pi 用户拥有权限操作串口,我们将pi用户添加到tty和dialout:
- root@raspberrypi:/home/pi# sudo usermod -a -G tty pi
- root@raspberrypi:/home/pi# sudo usermod -a -G dialout pi
复制代码
通过VNC 登录树莓派界面,打开Arduino IDE (此时启动IDE可能要10多秒,需要等等,不要重复点击IDE图标),选择 Arduino Leonardo 板,此时看到串口为 /dev/ttyACM0 我们下载一个Blink测试一下是否可以下载程序到Arduino。
【实现Arduino和树莓派通信】
接下来我们安装Python-serial模块
- root@raspberrypi:/home/pi# apt-get install python-serial python3-serial
复制代码
声音传感器连接到Arduino Expansion Shield for Raspberry Pi B+扩展板上的A0端口。
在Arduino Expansion Shield for Raspberry Pi B+ 扩展板上编写一个读取LM35模拟电压输出的温度值,然后通过USB串口发到树莓派上面。
- // to the pins used:
- const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
-
- int sensorValue = 0; // value read from the pot
-
- void setup()
- {
- // initialize serial communications at 9600 bps:
- Serial.begin(9600);
- }
-
- void loop()
- {
- sensorValue = analogRead(analogInPin);
- Serial.println(sensorValue,DEC);
- delay(200);
- }
复制代码
在树莓派建立一个 SoundPrint.py 的文件 Arduino 采集声音响度。
- import serial
- import time
- port = "/dev/ttyACM0"
-
- serialFromArduino = serial.Serial(port,9600)
- serialFromArduino.flushInput()
- while True:
- if(serialFromArduino.inWaiting() > 0):
- input = serialFromArduino.readline()
- inputAsInterger = int(input)
- print("Temperature: " + str(inputAsInterger))
- time.sleep(0.01)
复制代码
|