树莓派转Arduino适配板教程

产品简介

ARPI600是一款兼容树莓派、Arduino和XBee的扩展板,可用于扩展常用的接口资源。

产品特点

  • 板载USB转串口(支持树莓派串口调试)、RTC和ADC等常用资源
  • 支持Arduino接口(带AD功能),方便树莓派接入多种Arduino扩展板(Shield)
  • 支持树莓派通过XBee通信模块进行无线数据传输,并支持XBee USB适配器功能
  • 支持传感器接口,方便树莓派接入多种传感器

资源介绍


树莓派使用

打开I2C接口

在终端执行:

  1. sudo raspi-config
  2. 选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动


然后重启树莓派:

  1. sudo reboot

开启SPI接口

  • 打开树莓派终端,输入以下指令进入配置界面
  1. sudo raspi-config
  2. 选择Interfacing Options -> SPI -> Yes 开启SPI接口


然后重启树莓派:

  1. sudo reboot

请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查

开启Uart接口

打开树莓派终端,输入以下指令进入配置界面

  1. sudo raspi-config
  2. 选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口


然后重启树莓派:

  1. sudo reboot

安装库

  • 安装BCM2835, 打开树莓派终端,并运行以下指令
  1. wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
  2. tar zxvf bcm2835-1.60.tar.gz
  3. cd bcm2835-1.60/
  4. sudo ./configure && sudo make && sudo make check && sudo make install
  5. # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装wiringPi
  1. sudo apt-get install wiringpi
  2. #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
  3. wget https://project-downloads.drogon.net/wiringpi-latest.deb
  4. sudo dpkg -i wiringpi-latest.deb
  5. gpio -v
  6. # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错
  • python
  1. sudo apt-get updata
  2. sudo apt-get install ttf-wqy-zenhei
  3. sudo apt-get install python-pip
  4. sudo pip install RPi.GPIO
  5. sudo pip install spidev
  6. sudo apt-get install python-smbus
  7. sudo apt-get install python-serial
  8. sudo pip install rpi_ws281x

下载例程

  1. sudo apt-get install p7zip
  2. wget http://www.waveshare.net/w/upload/3/37/ARPI600.7z
  3. 7zr x ARPI600.7z -r -o./ARPI600
  4. sudo chmod 777 -R ARPI600
  5. cd ARPI600/RaspberryPi/ARPI600_Code

连接树莓派串口控制外设

配置系统串口

1) 进入终端,执行:

  1. sudo nano /boot/cmdline.txt

把以下行:

  1. wc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

改为如下:

  1. dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
  2. elevator=deadline rootwait

按下Ctrl+X,选择 Y 保存。
2) 执行:

  1. sudo nano /etc/inittab

将以下内容

  1. #Spawn a getty on Raspberry Pi serial line
  2. T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

改为

  1. #Spawn a getty on Raspberry Pi serial line
  2. #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

按下Ctrl+X,选择 Y 保存
3) 执行:

  1. sudo reboot

执行完这个命令,重启树莓派之后,将无法从串口进入树莓派终端。此时用户如需进入终端,须采用SSH或是把树莓派外接显示器后进入LXterminal。(如果想要串口重新作为树莓派串口调试输出,则还原更改后重启即可,所以更改前最好备份)

树莓派串口打印数据

1) 用户需设置跳线开启串口调试功能::

  • CP_RX连接P_TX
  • CP_TX连接P_RX

2) 打开PuTTY串口调试软件,进行设置::

  • Serial line: 选择对应的串口。
  • Speed: 设置波特率为9600。(注意这里Speed处改为9600,和图 3不同)
  • Connection type: 设置为Serial。

3) 把program/Xbee/send文件夹复制到树莓派系统,进入send文件夹,执行::

  1. sudo make
  2. sudo ./serialTest

串口终端打印出如下:

组建2个XBee的无线传输网络

准备工作

1) 两个XBee模块。
2) 两个ARPI600模块。
3) 两个树莓派。

  • 为了便于阅读,将它们分为A、B两组。(XBee-A,ARPI600-A,XBee-B,ARPI600-B)

安装X-CTU工具

1) 电脑端打开software/X-CTU V5.2.8.6.exe进行安装,安装完打开如下图:

2) 设置XBee模块,出厂里默认的设置为:

  • Baud: 9600
  • Data Bite: 8
  • Parity: NONE
  • Stop: 1

测试电脑是否连上XBee

1) 把XBee-A接入ARPI600-A。把XBee-B接入ARPI600-B。
2) 设置跳线开启XBee的串口调试功能,如下图所示:

  • XB_RX连接CP_RX
  • CP_TX连接XB_TX

3) 接通树莓派电源。
4) 点击Test/Query按钮,测试是否能够正确地连接上XBee模块:

5) 如果一切正常,我们将看到如下的对话框,则说明连接成功:

对XBee-A模块进行配置

1) 点击Modem Configuration选项卡。点击Read按钮读出XBee模块中的当前参数:

2) 在Function Set下拉列表中选择ZIBGEE ROUTER/END DEVICE AT:

3) 在读出的Networking 中,进行设置:

  • ID: 234
  • DH: 0
  • DL: 0

4) 点击Write把设置好的参数下载到XBee-A模块中。

对XBee-B模块进行配置

1) 对XBee-B模块重复3.1和3.3的操作。但是在Function Set下拉列表中选择为ZIBGEE COORDINATOR AT:

  1.  

2) 在读出的Networking 中,进行设置:

  • ID: 234
  • DH: 0
  • DL: ffff

3) 点击Write把设置好的参数下载到XBee-B模块中。
4) 为了实现的是一个简单的点对点网络,请按照以上方式配置好XBee-A和XBee-B,运行两个X-CTU,并在PC Settings选项卡中选择不同的通信接口,分别对A组和B组进行控制。
5) 在XBee-A的X-CTU的Terminal中,输入需要XBee模块传输的数据,这些数据会被自动发送到XBee-B模块,并在另一个X-CTU的Terminal中显示出来。其中蓝色的表示发送的数据,红色的标志接受的数据。

6) 如果运行状态如上图所示,则XBee模块能够正常的收发数据。

树莓派通过XBee无线传输数据

确保组建2个XBEE的无线传输网络正常之后,现在树莓派可以通XBee无线传输数据。
1) 设置ARPI600跳线:
把收发的2个树莓派串口都接到XBee串口,ARPI600扩展板按照下图红框跳线。

  • XB_RX连接P_TX
  • XB_TX连接P_RX


2) 测试树莓派串口:
执行: cd /Xbee/getdata sudo make sudo ./serialTest 串口终端打印出如下

再运行发送端代码,复制program/Xbee/send 到发送端树莓派系统中,进入send文件夹,执行。
sudo make sudo ./serialTest 这时接收端就会打印出接收到的数据:

RTC时钟

1) 连接RTC JMP处的跳线。
2) 打开树莓派系统桌面的LXTerminal,在LXTerminal中输入

  1. i2cdetect -y 1

3) 在LXTerminal会打印出PCF8563接入树莓派的地址,我这里显示的51,如下图,说明树莓派已经识别到PCF8563了。

4) 在LXTerminal中执行:

  1. modprobei2c-dev
  2. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device
  3. hwclock -r#(读接入的I2C硬件RTC的时间)

LXTerminal会打印出PCF8563的时间, 与系统时间不同。
5) 在LXTerminal中执行:

  1. hwclock -w #(把树莓派系统的时间写入到PCF8563)
  2. hwclock -r #(树莓派系统的时间同步到PCF8563)
  3. hwclock -s #(设置系统的时间与硬件的RCT时钟同步)

AD转换(ARPI600板载TLC1543芯片)

配置A0管脚为AD管脚

1) 确保完成库的安装。
2) 设置跳线,选择参考电压:

  • REF连接5V,则AD转换参考电压为5V。(默认跳线到5V)
  • REF连接3V3,则AD转换参考电压为3.3V。

注意REF同一时刻,只能连接上面的一种。

3) 复制program/AD_TLC1543到树莓派系统中,进入AD_TLC1543文件夹内,在终端执行如下命令:

  1. sudo make
  2. sudo ./tlc1543

4) 终端会打印出AD转换值。程序默认是打印TLC1543芯片的AD0脚的转换值,即ARPI600上的T_A0转换值。
5) 将T_A0连接到A0后,Arduino接口上的A0即可当做AD转换脚使用。如下图红框所示:

配置为其他AD管脚

1) 如果想要打印TLC1543其他的AD管脚转换值,需终端编辑tlc1543.c文件:
sudo nano tlc1543.c 找到这行代码:
re=ADCSelChannel(0); 更改代码中的0为其他数字,即可更改为其他管脚。(改为1则测试AD1即T_A1转换值,改为2即可测试AD2即T_A2转换值,以此类推,一直可以测试到AD10即T_A10转换值)
更改完后,按下Ctrl+X,选择 Y 保存。
2) 继续在终端执行:

  1. sudo make
  2. sudo ./tlc1543

即可让更改生效。

接口说明

接口概述

1) 默认情况下,Arduino接口数字控制脚对应树莓派IO如下:

Arduino接口树莓派IO
D0P_RX
D1P_TX
D2P0
D3P1
D4P2
D5P3
D6P4
D7P5
D8P6
D9P7
D10CE0
D11MOSI
D12MISO
D13SCK

2) 模块电路板上有配置APRI600的D11, D12, D13管脚的跳线。它们之间通过0Ω电阻短接。如下图所示:

出厂时跳线连接如下:

  • SCK连接D13
  • MISO连接D12
  • MOSI连接D11

如果连接:

  • D13连接P26
  • D12连接IO_SD
  • D11连接IO_SC

则相当于使D11, D12, D13管脚接到树莓派普通IO控制脚。
注意:用户可以根据需要更改这些跳线,但是此操作需要用到焊接器材。在没有我司工作人员指导下擅自更改,将视为放弃保修。
3) APRI600的A0-A5管脚可以配置为IO控制功能或者ADC功能。

a) 当A0-A5连接到 1处时,则A0-A5作为IO控制管脚,和树莓派管脚对应关系参见下表:

Arduino接口树莓派IO
A0CE1
A1P5
A2P6
A3P7
A4CE0
A5MOSI

b) 当A0-A5连接到 3处时,则A0-A5作为AD转换脚。
4) 用户可以连接A4和P_SCL,A5和P_SDA(如图 22.),以作为树莓派的I2C控制脚,默认断开。
注意:用户可以根据更改这些跳线,但是此操作需要用到焊接器材。在没有我司工作人员指导下擅自更改,将视为放弃保修。

5) ARPI600提供传感器接口,如图引出4P的传感器接口:

其中:

  • A处接TLC1543芯片的AD转换(A6-A10)管脚。
  • D处接树莓派的P0-P4 IO控制脚。

方便用户接入多种传感器。

ARPI600连接传感器套件(需另外选购)

以下操作都需把ARPI600插上树莓派使用。如果只有ARPI600和传感器套件,却没有树莓派的话,那么是无法使用的。

  • Color Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Color Sensor接口ARPI600
LED3.3V
OUTP0
S3P4
S2P3
S1P2
S0P1
GNDGND
VCC3.3V

3) 把Color_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Color_Sensor
  2. sudo ./Color_Sensor

4) 程序会对芯片的白平衡进行调整,时间大概为2s,调整结束以后即可把三原色的频率经过终端输出,对照RGB颜色对照表,即可知道所测得颜色。
5) 按Ctrl+C结束程序。

  • Flame Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Flame Sensor管脚ARPI600
DOUTNC
AOUTT_A6
GNDGND
VCC3.3V

3) 把Flame_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Flame_Sensor
  2. sudo ./General_Sensor

4) 传感器靠近火焰时,模块上的信号指示灯点亮。传感器远离火焰时,模块上的信号指示灯熄灭。
5) 随着传感器与火焰距离的改变,终端输出的数据也会发生改变。
6) 按Ctrl+C结束程序
注意:该传感器主要用于感知火焰,但其自身并不防火。因此使用时请与火焰保持一定距离,以免烧坏传感器。

  • Metal Sensor

1) 把ARPI600插入到树莓派。 2) 按照下表连接传感器和ARPI600的管脚:

Metal Sensor管脚ARPI600
DOUT NC
AOUT T_A6
GNDGND
VCC3.3V

3) 把Metal_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Metal_Sensor
  2. sudo ./General_Sensor

4) 传感器接触带电金属时,模块上的信号指示灯点亮。传感器远离金属时,模块上的信号指示灯熄灭。
5) 随着传感器与金属接触与分离,终端输出的数据会发生相应改变。
6) 按Ctrl+C结束程序。

  • Hall Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Hall Sensor管脚ARPI600
NC
AOUTT_A6
GNDGND
VCC3.3V

3) 把Hall Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Hall_Sensor
  2. sudo ./General_Sensor

4) 传感器靠近磁铁时,模块上的信号指示灯点亮。传感器远离磁铁时,模块上的信号指示灯熄灭。
5) 随着传感器与金属接触与分离,终端输出的数据会发生相应改变。
6) 按Ctrl+C结束程序。

  • Infrared Reflective Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Infrared Reflective Sensor管脚ARPI600
DOUTNC
AOUTT_A6
GNDGND
VCC3.3V

3) 把Infrared_Reflective_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Infrared_Reflective_Sensor
  2. sudo ./General_Sensor

4) 传感器靠近障碍物时,模块上的信号指示灯点亮。传感器远离障碍物时,模块上的信号指示灯熄灭。
5) 随着传感器与障碍物距离的变化,终端输出的数据也会发生改变。
6) 按Ctrl+C结束程序。

  • Laser Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Laser Sensor管脚ARPI600
DOUTNC
AOUTT_A6
GNDGND
VCC3.3V

3) 把Laser_Sensor文件夹复制到树莓派系统内,在终端运行程序

  1. cd Laser_Sensor
  2. sudo ./General_Sensor

4) 把障碍物置于激光传感器上方,此时模块上的信号指示灯会被点亮,把障碍物远离激光传感器上方,此时模块上的信号指示灯熄灭。由此可知激光传感器是否探测到障碍物。
5) 按Ctrl+C结束程序。

  • Moisture Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Moisture Sensor管脚ARPI600
DOUTNC
AOUTT_A6
GNDGND
VCC3.3V

3) 把Moisture_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Moisture_Sensor
  2. sudo ./General_Sensor

4) 把传感器插入土壤中,然后逐渐往土壤中加水,终端输出数据变化。
5) 按Ctrl+C结束程序。

  • Rotation Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Moisture Sensor管脚ARPI600
SIAP0
SIBP1
SWP2
GNDGND
VCC3.3V

3) 把Rotation_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Rotation_Sensor
  2. sudo ./Rotation_Sensor

4) 分别顺时针旋转,逆时针旋转和按下编码器,端口分别输出数据:

  1. Turn right!
  2. Turn left!
  3. Turn down!

5) 把模块的SIA,SIB,SW端口分别连接逻辑分析仪(需另外选购)的CH0,CH1,CH2。
顺时针旋转编码器,波行输出如下:

逆时针转编码器,波行输出如下:

按下编码器上的按键:

6) 按Ctrl+C结束程序。

  • Sound Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

Sound Sensor管脚ARPI600
DOUTNC
AOUTT_A6
GNDGND
VCC3.3V

3) 把Sound_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Sound_Sensor
  2. sudo ./General_Sensor

4) 当模块的咪头靠近发声源时,模块上的信号指示灯点亮。当模块的咪头远离发声源时,模块上的信号指示灯熄灭。
5) 随着传感器与发声源距离的变化,终端输出数据有相应的变化。
6) 按Ctrl+C结束程序。

  • Temperature-Humidity Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

管脚ARPI600
DOUTP0
GNDGND
VCC3.3V

3) 把Temperature-Humidity_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Temperature-Humidity_Sensor
  2. sudo ./DHT11

4) 终端输出温度和湿度。例如:

  1. Humidity=33
  2. Temperature=28

5) 按Ctrl+C结束程序。

  • MQ-5 Gas Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

管脚ARPI600
DOUTNC
AOUTT_A6
GNDGND
VCC3.3V

3) 把MQ-5_Gas_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd MQ-5_Gas_Sensor
  2. sudo ./General_Sensor

4) 让传感器先预热一分钟。
5) 把传感器放入含有敏感气体(该气体传感器对液化气,天然气和煤气敏感)的装置中,模块上的信号指示灯点亮。把传感器从敏感气体装置中取出,模块上的信号指示灯熄灭。由此可判断敏感气体的浓度是否超标。
6) 按Ctrl+C结束程序。

  • Tilt Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

管脚ARPI600
DOUTT_A6
GNDGND
VCC3.3V

3) 把Tilt_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Tilt_Sensor
  2. sudo ./General_Sensor

4) 晃动模块或使模块倾斜时,模块上的信号指示灯点亮。模块平行放置时,模块上的信号指示灯熄灭。由此可判断模块的状态是否发生晃动或倾斜。
5) 按Ctrl+C结束程序。

  • UV Sensor

1) 把ARPI600插入到树莓派。 2) 按照下表连接传感器和ARPI600的管
脚:

管脚ARPI600
T_A6
GNDGND
VCC3.3V

3) 把UV_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd UV_Sensor
  2. sudo ./General_Sensor

4) 让传感器靠近阳光,终端输出的数据会发生改变。
5) 按Ctrl+C结束程序。

  • Liquid Level Sensor

1) 把ARPI600插入到树莓派。
2) 按照下表连接传感器和ARPI600的管脚:

管脚ARPI600
AOUTT_A6
GNDGND
VCC3.3V

3) 把Liquid_Level_Sensor文件夹复制到树莓派系统内,上电之后,终端执行:

  1. cd Liquid_Level_Sensor
  2. sudo ./General_Sensor

4) 把传感器插入一定深度的水中,终端输出的数据会发生改变。
5) 按Ctrl+C结束程序。

Jetson Nano

Jetson nano提供部分例程使用,其他的目前暂时不支持。

安装库

安装函数库

  • 打开终端界面,输入以下指令安装相应的函数库
  1. sudo apt-get update
  2. sudo apt-get install python3-pip
  3. sudo pip3 install Jetson.GPIO
  4. sudo groupadd -f -r gpio
  5. sudo usermod -a -G gpio your_user_name
  6. sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/
  7. sudo udevadm control --reload-rules && sudo udevadm trigger

【注意】your_user_name 是你使用的用户名,比如说 waveshare

  • 安装I2C
  1. sudo apt-get install python-smbus
  • 安装图像处理库:
  1. sudo apt-get install python3-pil
  2. sudo apt-get install python3-numpy

下载程序

  1. sudo apt-get install p7zip
  2. wget http://www.waveshare.net/w/upload/3/37/ARPI600.7z
  3. 7zr x ARPI600.7z -r -o./ARPI600
  4. sudo chmod 777 -R ARPI600
  5. cd ARPI600/JetsonNano/ARPI600_Code

例程

PCF8563

  1. cd PCF8563
  • C语言
  1. cd C
  2. make clear
  3. make
  4. sudo ./main
  • python2
  1. cd python2
  2. sudo python main.py
  • python3
  1. cd python3
  2. sudo python3 main.py

TLC1543

  1. cd TLC1543
  • C语言
  1. cd C
  2. make clear
  3. make
  4. sudo ./main
  • python2
  1. cd python2
  2. sudo python main.py
  • python3
  1. cd python3
  2. sudo python3 main.py

UART

  1. cd UART
  • C语言
  1. cd C
  2. make clear
  3. make
  4. sudo ./main
  • python2
  1. cd python2
  2. sudo python main.py
  • python3
  1. cd python3
  2. sudo python3 main.py