1. 野火扩展板

您所在的位置:网站首页 鲁班刨子使用方法视频讲解 1. 野火扩展板

1. 野火扩展板

2024-07-12 17:52| 来源: 网络整理| 查看: 265

1.1.1. 模块测试¶

1、野火2024年4月20日支持了该扩展板在鲁班猫0N、0W、1上使用,如果是旧镜像需要更新以下内核deb包,如果是比这个日期更加新的镜像则不用。

2、野火2024年6月1日支持了该扩展板在鲁班猫2N、4上使用,如果是旧镜像需要更新以下内核deb包,如果是比这个日期更加新的镜像则不用。

rk356x系列内核deb包:

离线更新内核deb包:

内核包1 linux-headers-4.19.232_4.19.232-16_arm64.deb

内核包2 linux-image-4.19.232_4.19.232-16_arm64.deb

将以上两个deb包传到板卡,使用命令 sudo dpkg -i linux*.deb 进行安装,然后进行重启。

rk3588系列内核deb包:

离线更新内核deb包:

内核包1 linux-headers-5.10.160_5.10.160-5_arm64.deb

内核包2 linux-image-5.10.160_5.10.160-5_arm64.deb

将以上两个deb包传到板卡,使用命令 sudo dpkg -i linux*.deb 进行安装,然后进行重启。

1.1.1.1. 安装环境¶

以下主要以shell和python进行测试,需要安装以下环境:

1 2 3 4 5 6 7 8 9 10#更新数据库以及更新pip、使用国内下载源 sudo apt update sudo ln -sf /usr/bin/python3 /usr/bin/python sudo ln -sf /usr/bin/pip3 /usr/bin/pip sudo python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip sudo pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple #安装测试依赖包 sudo apt install -y python3-libgpiod python3-dev sudo pip3 install python-periphery evdev Adafruit-Blinka machine pillow adafruit-circuitpython-ssd1306 adafruit-circuitpython-mpu6050 numpy

对于python不熟悉的用户可先学习下鲁班猫配套的python系列教程: 鲁班猫Python应用开发实践

1.1.1.2. 获取测试代码¶

测试代码仓库为:https://gitee.com/LubanCat/lubancat_rk_code_storage

测试代码在该仓库expansion_board目录下。

1.1.1.3. 扩展IO¶

使用xl9535模块扩展io,i2c接口通信,支持扩展16个io,扩展板引出或者使用了其中15个。

确认当前使用的镜像支持了该扩展板后,使用fire-config或者直接修改/boot/uEnv/uEnv.txt开启xl9535插件。

使用fire-config方式打开:

执行sudo fire-config ,进入“P2 外设”,将xl9535选中,然后重启板卡即可。

直接修改uEnv方式打开:

执行sudo vim /boot/uEnv/uEnv.txt,将xl9535插件取消注释,保存并重启板卡即可。

确认开启了xl9535插件并重启板卡后,输入 gpioinfo 命令可发现多了1组GPIO,如下图:

从上图可知,gpiochip6这组就是扩展出来的io,P0_0~P0_7对应0-7,P1_0对应8-15。 控制方法和普通io无异,比如控制gpio6_0:

以下使用shell进行测试:

1 2 3 4#拉低 gpioset 6 0=0 #拉高 gpioset 6 0=1

需要使用C语言控制参考链接: GPIO控制

需要使用python控制参考链接: python控制GPIO

使用python控制,测试代码为:lubancat_rk_code_storage/expansion_board/gpio/gpio.py,将gpio.py传到板卡,执行以下命令进行测试:

1 2#进行测试,控制gpio6_0每0.5s翻转电平。 sudo python gpio.py

如果要修改其他引脚可修改以下部分:

1 2 3 4 5# 控制组内的具体引脚 LINE_OFFSET = 0 #gpiochip6控制组 chip0 = gpiod.Chip("6", gpiod.Chip.OPEN_BY_NUMBER) 1.1.1.4. 用户LED¶

控制LED和控制IO的方法无异,LED引脚同样使用控制IO进行控制,原理图如下:

从上图可知,LED引脚使用的IO为P0_0、P0_1、P0_2,对应系统里面注册的引脚为gpio6-0、gpio6-1、gpio6-2,控制这三个引脚就可以控制LED灯的亮灭。

以下使用shell进行测试:

1 2 3 4 5 6 7 8 9#点亮 gpioset 6 0=0 gpioset 6 1=0 gpioset 6 2=0 #熄灭 gpioset 6 0=1 gpioset 6 1=1 gpioset 6 2=1

使用python控制,测试代码为:lubancat_rk_code_storage/expansion_board/led/led.py,将led.py传到板卡,执行以下命令进行测试:

1 2#进行测试,控制3个led每0.5s闪烁1次。 sudo python led.py 1.1.1.5. 按键¶

扩展板按键引脚也是使用扩展IO,原理图如下图,野火在驱动层已经将这些IO设置为输入,并使用了gpio-key驱动,支持中断输入,能很方便检测按键。

确认开启了xl9535插件并重启板卡后,输入 gpioinfo 命令可发现3个被注册为KEY的IO,如下图:

使用命令 **ls /dev/input/by-path/ -l ** 查看对应的按键事件。

如上图,keys对应event6,对应/dev/input/event6,驱动层将3个按键事件都汇总到一个event事件中。

使用C语言测试:

测试代码为:lubancat_rk_code_storage/expansion_board/buttons/buttons.c

将buttons.c传到板卡,执行使用gcc进行编译,然后执行以下命令进行监控按键,最后分别按下扩展板上面上个按键,将监控数据上报。

1 2 3 4 5#编译 gcc buttons.c -o buttons #检测按键事件 sudo ./buttons /dev/input/event6

运行程序后,按下扩展板上面的按键效果如下图:

C源码比较简单,请读者自行研究。以上只将按键事件信息打印,读者可以根据信息进行判断,再调用其他需要的功能。

使用python测试:

测试代码为:lubancat_rk_code_storage/expansion_board/buttons/buttons.py

请读者先修改按键事件的event事件,作者的是event6,不同板卡可能不同,然后再进行测试,按下按键,输出信息参照C的说明。

1 2 3 4 5#修改buttons.py为实际的event事件 device = evdev.InputDevice('/dev/input/event6') #运行测试 sudo python buttons.py

运行程序后,按下按键效果如下图所示:

对应输出信息参照C程序测试的说明。

1.1.1.6. DHT11模块¶

扩展板板载DHT11模块,野火在驱动层已经添加了DHT11的相关驱动。

确认开启了xl9535插件并重启板卡后,输入 ls /dev/dht11 命令,可发现DHT11的设备节点。

测试代码为:lubancat_rk_code_storage/expansion_board/dht11/dht11.py

将dht11.py传到板卡,然后执行以下命令读取数据:

1 2#读取dht11数据 sudo python dht11.py

效果如下图:

1.1.1.7. 超声波模块¶

超声波模块TRIG、ECHO引脚使用主控原生引脚,扩展板编号GPIO_5、GPIO_6,对应40pin引脚29、31,如下图:

以鲁班猫1为例,对应GPIO3_C1、GPIO3_B6,如下图:

测试代码为:lubancat_rk_code_storage/expansion_board/hc_sr04/HC_SR04.py

测试前需要根据实际修改HC_SR04.py的TRIG、ECHO引脚,默认是以鲁班猫1为例,对应引脚GPIO3_C1、GPIO3_B6:

1 2 3 4 5 6#将HC_SR04.py里面的TRIG、ECHO引脚修改为实际引脚 chip3_C1_TRIG = 17 chip3_B6_ECHO = 14 chip_TRIG = gpiod.Chip("3", gpiod.Chip.OPEN_BY_NUMBER) chip_ECHO = gpiod.Chip("3", gpiod.Chip.OPEN_BY_NUMBER)

鲁班猫1的TRIG脚为GPIO3_C1,所以chip3_C1_TRIG为C1=2*8+1=17,控制器组为3。ECHO脚为GPIO3_B6,所以chip3_B6_ECHO为B6=1*8+6=14,控制器组为3。

修改完实际引脚后,插上超声波模块运行测试:

1 2#获取数据 sudo python HC_SR04.py

用手遮挡超声波模块,效果如下:

1.1.1.8. I2C OLED接口¶

oled模块使用40pin上的i2c,需开启对应的设备树插件。以鲁班猫1为例:

修改/boot/uEnv/uEnv.txt,开启I2C3_M0插件,或者通过fire-config开启,修改完成后重启板卡。

测试代码为:lubancat_rk_code_storage/expansion_board/oled/oled.py

将oled文件夹里面的字库文件NotoSerifCJKhk-VF.ttf(思源宋体)放到/home/cat/目录下,使用Adafruit Blinka库点亮。

运行前需要修改oled.py的i2c接口为实际接口:

1 2 3 4 5 6#修改为实际i2c接口 i2c = busio.I2C(board.I2C3_SCL, board.I2C3_SDA) #定义字库位置,默认/home/cat/目录下 font = ImageFont.truetype("/home/cat/NotoSerifCJKhk-VF.ttf", 16, encoding="unic")

修改完实际引脚和字库位置后,插上OLED模块运行测试:

1sudo python oled.py

测试效果如下:

1.1.1.9. 舵机接口¶

舵机pwm对应拓展板PWM2、PWM3,对应40pin引脚12、35。

以鲁班猫1为例:

对应鲁班猫1的PWM8_M0、PWM14_M0,修改/boot/uEnv/uEnv.txt开启对应的插件或者使用fire-config开启插件,修改完后重启板卡。

执行cat /sys/kernel/debug/pwm查看:

以上,uEnv只开了PWM8_M0、PWM14_M0,如果还开了其他PWM,也是按大到小注册,上图是从下往上注册,也即先注册屏幕背光-> pwm8->pwm14

执行 ls /sys/class/pwm/ 查看PWM设备节点:

以上可根据注册顺序可知,pwm8是pwmchip1、pwm14是pwmchip2。

测试代码为:lubancat_rk_code_storage/expansion_board/pwm/pwm.py

运行前需要修改pwm.py的pwm接口为实际接口:

1 2 3# 程序默认打开pwmchip1、pwmchip2 pwm1 = PWM(1,0) pwm2 = PWM(2,0)

修改为实际需要控制的pwm节点后,可运行测试:

1 2 3 4 5#运行测试 sudo python pwm.py #查看pwm情况 cat /sys/kernel/debug/pwm

测试程序效果为不断调节pwm的占空比,使用示波器观察,或者接入舵机,调整到合适的占空比使舵机转动。

1.1.1.10. 串口接口¶

串口接口对应扩展板UART_TX/RX, 40pin引脚为8、10,原理图如下:

以鲁班猫1为例,对应UART3_M1,修改/boot/uEnv/uEnv.txt开启对应的插件或者使用fire-config开启插件,修改完后重启板卡。

测试可参考快速手册串口章节,以下为使用python进行测试。

测试代码为:lubancat_rk_code_storage/expansion_board/uart/uart.py

运行前需要修改uart.py的uart接口为实际接口:

1 2 3 4 5 6 7 8 9 10#默认打开ttyS3,串口波特率为115200,数据位为8,无校验位,停止位为1,不使用流控制 serial = Serial( "/dev/ttyS3", baudrate=115200, databits=8, parity="none", stopbits=1, xonxoff=False, rtscts=False, )

修改为实际需要控制的uart节点后,接上串口设备,可进行测试:

1sudo python uart.py

此处使用usb转串口模块进行通信,效果如下:

1.1.1.11. MPU-6050接口¶

对应扩展板I2C2_SDA/SCL,对应40pin引脚27、28,原理图如下:

以鲁班猫1为例,对应i2c5,因为这个i2c也是扩展芯片所使用的i2c,前面开启扩展板插件的时候,已经打开了该i2c,可直接进行测试。

测试代码为:lubancat_rk_code_storage/expansion_board/mpu6050/mpu6050.py

运行前需要修改mpu6050.py的i2c接口为实际接口:

1 2 3#默认使用的是i2c5 i2c = busio.I2C(board.I2C5_SCL, board.I2C5_SDA) # uses board.SCL and board.SDA mpu = adafruit_mpu6050.MPU6050(i2c)

修改为实际的i2c后,接上mpu6050模块,可进行测试:

1sudo python mpu6050.py

运行程序后,晃动板卡,效果如下:

1.1.1.12. 蜂鸣器¶

扩展板板载蜂鸣器使用扩展io进行扩展,具体引脚为P0_6,对应系统注册引脚为gpio6-6,高电平蜂鸣器响,低电平不响。

1 2 3 4#响 gpioset 6 6=1 #不响 gpioset 6 6=0

测试代码为:lubancat_rk_code_storage/expansion_board/buzzer/buzzer.py

运行以下命令进行测试:

1sudo python buzzer.py

效果为蜂鸣器每0.5s响一次。

1.1.1.13. 旋转编码器¶

旋转编码器接口为扩展IO接口,接口原理图如下:

与野火旋转编码器对应引脚接起来,其中:

编码器

扩展板

驱动注册

SW

A1

coder_sw

A

B1

coder_A

C

A2 coder_B

B

B2

coder_C

旋转编码器的C引脚实际已经在模块内部接GND,实际没有用到,可以不接。

编码器默认使用内核gpio-key驱动,只是消抖时间不同。

开启了xl9535设备树插件并重启板卡后,执行 gpioinfo 可查看引脚注册情况:

使用命令ls /dev/input/by-path/ -l 查看对应的事件。

以上可见,旋转编码器的按键和abc相都分别单独注册了一个事件,测试和按键测试大同小异,继续使用按键的测试代码进行测试。

测试代码为:lubancat_rk_code_storage/expansion_board/buttons目录下的buttons.c和buttons.py

1 2 3 4 5#编译 gcc buttons.c -o buttons #检测按键事件 sudo ./buttons /dev/input/event6

按下旋转编码器的sw,对应上报信息打印。

执行sudo ./buttons /dev/input/event5或者执行sudo ./buttons /dev/input/event3,转动旋转编码器旋钮,将会有对应输出,对应的code分别为250、252。

1.1.1.14. spi接口¶

对应扩展板SPI0,对应40pin引脚19、21、23、24,原理图如下:

以鲁班猫1为例,对应SPI3_M1,如下:

修改/boot/uEnv/uEnv.txt开启对应的插件或者使用fire-config开启插件,修改完后重启板卡。

测试代码为:lubancat_rk_code_storage/expansion_board/spi/spi.py

测试前需要将spi.py的spi接口修改为实际的接口:

1 2# 申请SPI资源,打开 spidev3.0 控制器,配置SPI主机为工作模式0、工作速率为1MHz spi = SPI("/dev/spidev3.0", 0, 1000000)

然后使用杜邦线将MISO和MOSI短接起来,进行回环测试。

1 2#运行测试 sudo python spi.py

运行效果如下:

1.1.1.15. I2c接口¶

对应i2c5,因为这个i2c也是扩展芯片所使用的i2c,前面开启扩展板插件的时候,已经打开了该i2c。

对应拓展板I2C2_SDA/SCL,GPIO22、GPIO27,对应40pin引脚27、28,13、15,原理图如下:

以鲁班猫1为例对应I2C5,GPIO3_A6、GPIO3_A7。

接个MPU6050,到这个i2c接口,使用前面的测试脚本进行测试即可。

1.1.1.16. 引出IO接口¶

引出IO使用扩展IO,对应第六组引脚,P1_0~P1_3依次对应gpio6-8~gpio6-11。

1 2 3 4 5 6 7 8 9 10 11 12#控制IO电平 gpioset 6 8=1 gpioset 6 8=0 gpioset 6 9=1 gpioset 6 9=0 gpioset 6 10=1 gpioset 6 10=0 gpioset 6 11=1 gpioset 6 11=0 1.1.1.17. RGB LED接口¶

对应扩展板GPIO23、24,对应40pin引脚16、18。

因为灯珠的时序为ns级,在应用层进行操作不能满足时序要求,所以必须在驱动层进行操作,驱动层野火写了测试代码,目前还未十分完善。

测试代码为:lubancat_rk_code_storage/expansion_board/ws2812/ws2812.c

测试效果如下:

需要将ws2812.c编译为驱动.ko进行测试,目前未完善,如果需要使用此处io作为gpio,可参考前面控制io进行测试。

1.1.1.18. 电机驱动接口¶

电机驱动模块支持板载5V 或者外部12V给驱动模块VM供电,当接了12V电源,VM优先使用外部12V,去掉外部12V,VM则使用板载5V,通过拨码开关控制VM通断,拨到ON则开启供电,拨到1则关闭供电。

电机驱动PWM使用扩展板PWM0和PWM1,对应40pin引脚32、33,原理图部分如下:

以鲁班猫1为例,对应PWM9_M0、PWM10_M0。

修改/boot/uEnv/uEnv.txt开启对应插件或者通过fire-config进行修改,然后重启板卡。

执行cat /sys/kernel/debug/pwm查看:

以上只开了PWM9_M0、PWM10_M0,如果还开了其他PWM,也是按大到小进行注册。上图是从下往上注册,也即先注册屏幕背光-> pwm9 -> pwm10。

执行 ls /sys/class/pwm/

根据注册顺序可知,pwm9是pwmchip1、pwm10是pwmchip2。

除了pwm,其他接口说明如下:

STBY控制电机驱动模块是否工作,高电平的情况下驱动器才可以正常工作,当为低电平的时候,整个驱动器停止工作。

AIN1、AIN2、BIN1、BIN2控制电机正反转。

引脚说明如下:

电机驱动模块

扩展板

40pin

鲁班猫1

STBY

GPIO16

36

GPIO1_B0

AIN1

GPIO7

26

GPIO4_C4

AIN2

GPIO25

22

GPIO3_B0

BIN1

GPIO20

38

GPIO1_B1

BIN2

GPIO21

40

GPIO1_B2

测试代码为:lubancat_rk_code_storage/expansion_board/MotorTest/MotorTest.py

默认以鲁班猫1引脚为例,其他板根据实际修改MotorTest.py。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27#默认以鲁班猫1引脚为例 AIN1 = 20 AIN2 = 8 BIN1 = 9 BIN2 = 10 STBY = 8 #创建了一个chip ID为0的gpiod.Chip对象chip0 chip0 = gpiod.Chip("4", gpiod.Chip.OPEN_BY_NUMBER) chip1 = gpiod.Chip("3", gpiod.Chip.OPEN_BY_NUMBER) chip2 = gpiod.Chip("1", gpiod.Chip.OPEN_BY_NUMBER) chip3 = gpiod.Chip("1", gpiod.Chip.OPEN_BY_NUMBER) chip4 = gpiod.Chip("1", gpiod.Chip.OPEN_BY_NUMBER) #设置使用chip0对象的AIN1作为引脚 gpio4_C4 = chip0.get_line(AIN1) gpio3_B0 = chip1.get_line(AIN2) gpio1_B1 = chip2.get_line(BIN1) gpio1_B2 = chip3.get_line(BIN2) gpio1_B0_STYB= chip3.get_line(STBY) #设置AIN1、AIN2默认为1、0正转 gpio4_C4.request(consumer="AIN1", type=gpiod.LINE_REQ_DIR_OUT, default_vals=[0]) gpio3_B0.request(consumer="AIN2", type=gpiod.LINE_REQ_DIR_OUT, default_vals=[1]) gpio1_B1.request(consumer="BIN1", type=gpiod.LINE_REQ_DIR_OUT, default_vals=[0]) gpio1_B2.request(consumer="BIN2", type=gpiod.LINE_REQ_DIR_OUT, default_vals=[1]) gpio1_B0_STYB.request(consumer="STBY", type=gpiod.LINE_REQ_DIR_OUT, default_vals=[1])

执行以下命令后台运行,并查看引脚状态:

1 2 3 4 5 6 7 8#后台运行 sudo python MotorTest.py & #查看pwm状态 cat /sys/kernel/debug/pwm #查看引脚状态 cat /sys/kernel/debug/gpio

观察pwm和引脚状态如下:

将电机接到对应的接口,效果为电机会正反转转动。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3