0接上文【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目-实现开机起动
EASYEAINano-TB(RV1126B)是一款专为嵌入式AI系统设计的开发板,搭载高性能处理器,适用于多种嵌入式应用场景。
硬件
- EASY EAI Nano-TB(RV1126B)开发板 :一款用于嵌入式ai系统的开发板。
- 红绿灯板 :一个简单的外部设备,包含红、绿、黄三个LED灯。
- wifi路由器 :CMCC-e2dd(密码:jdtsyahg)
- 工具要求 :支持SSH连接的客户端(MobaXterm )
-
- 开发板按键S2是LOAD按键正常启动后可以作为红绿灯项目输入按钮。
EASY EAI Nano-TB(RV1126B)开发板按键S2是LOAD按键,用于固件更新和CPU的SARADC0_VIN0_KEY/RECOVERY相连,在核心板A70 CPU 1B20 处 。当LOAD按键处于按下状态时,再按下复位按键,此时系统将会进入Loader下载模式,可以通过烧录接口下载固件。
在正常启动后,可以作为普通SARADC0_VIN0_KEY模拟输入红绿灯按钮,按下时在70-90之间。

Recovery信号描述
| 信号 |
默认上下拉 |
连接方式 |
描述 |
|---|
| SARADC0_VIN0_KEY/RECOVERY |
上拉1.8V |
直连 |
Recovery下载模式 |
SARADC0分辨率为13bit的SARADC控制器,输入电压范围为0-1.8V。 接口的信号连接如下图所示:
红绿灯板与RV11 26 B板连接如下
-
红绿灯板 3V3 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 1 针EASY EAI Nano-TB(RV1126B)开发板 功能3V3
红绿灯板 GND 接EASY EAI Nano-TB(RV1126B)开发板 P1的 6 针EASY EAI Nano-TB(RV1126B)开发板 功能 GND
红绿灯板 LEDr 红 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 13 针 EASY EAI Nano-TB(RV1126B)开发板 功能 GPIO5_C0
红绿灯板 LEDg 绿 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 15 针 EASY EAI Nano-TB(RV1126B)开发板 功能 GPIO5_C1
红绿灯板 LEDy 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 37 针EASY EAI Nano-TB(RV1126B)开发板 功能 GPIO5_C2 红绿灯板连接
| 红绿灯板接口 |
连接至开发板P1针脚 |
开发板功能 |
|---|
| 3V3 |
1针 |
3V3电源 |
| GND |
6针 |
GND |
| LEDr(红) |
13针 |
GPIO5_C0 |
| LEDg(绿) |
15针 |
GPIO5_C1 |
| LEDy(黄) |
37针 |
GPIO5_C2 |
GPIO5_C0----gpio176 ----红绿灯板 LEDr 红
GPIO5_C1----gpio177 ----红绿灯板 LEDg 绿
GPIO5_C2----gpio178 ----红绿灯板 LEDy 黄
软件* SSH连接 :
通过MobaXterm工具进行SSH连接。
经过之前查询可知被分配出来的IP地址分别为:
【wlan0】--IP地址:inet 192.168.1.9,子网掩码(24):255.255.255.0-
- IP****地址:192.168.1.9 (wlan0接口)
- 子网掩码:255.255.255.0
- 连接工具:MobaXterm
- 登录凭据:
o
用户名:nano
o
密码:123456
可使用ssh登录。
- 配置“Session”,选择“SSH”,输入IP地址,最后点击“Open”即可,如下图所示。

- 首次连接,ssh客户端会根据ssh主机IP地址等信息生成一个ssh-key,以绑定标记ssh主机和它所对应的IP地址。若ssh主机的IP地址有变更,又或者别的ssh主机用了曾被记录下来的IP地址,导致ssh主机与IP地址不匹配,则会出现连不上的情况。此时需要用户手动清理掉客户端(putty)关于ssh主机与IP地址的绑定。具体的清理方式请用户自行根据所用的ssh客户端查阅,此处不展开叙述。

- 点击“Accept”后,则会提示输入登录信息,如下图所示。

EASY EAI Nano用户名:nano
EASY EAI Nano密码为:123456
登录后:
EASY EAI Nano-TB是带有基本系统 Ubuntu 22.04.5 LTS (GNU/Linux 6.1.118 aarch64)
脚本编写
脚本位置
/etc/init.d/S99_v.sh
脚本内容
#!/bin/sh
k_v=0
k_s=1
k_c=0
program=1
p_sleep=50
p_s=1
# 等待特定按键
wait_for_key() {
local target_key=$(cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw)
# echo "in目标k_v $k_v ?"
# echo "in目标k_c $k_c ?"
# echo "in目标按键 $target_key "
# echo "in目标program $program "
if [ $target_key -lt 200 ]; then
if [ $k_v -eq 0 ]; then
k_c=$(( $k_c+1 ))
if [ $k_c -eq 2 ]; then
# echo "目标按键 $target_key 已按下"
k_s=0
program=$(( $program+1 ))
if [ $program -eq 2 ]; then
program=0
fi
fi
if [ $k_c -eq 3 ]; then
k_c=2
fi
else
k_v=0
k_c=0
fi
else
if [ $k_v -eq 1 ]; then
k_c=$(( $k_c+1 ))
if [ $k_c -eq 2 ]; then
# echo "目标按键 $target_key 已up"
k_s=1
fi
if [ $k_c -eq 3 ]; then
k_c=2
fi
else
k_v=1
k_c=0
fi
fi
}
# 等待rgb1
wait_rgb1_t() {
p_sleep=$(( $p_sleep-1 ))
case $k_s in
1)
sudo echo 0 > /sys/class/gpio/gpio178/value
if [ $program -eq 1 ]; then
sudo echo 1 > /sys/class/gpio/gpio176/value
else
sudo echo 0 > /sys/class/gpio/gpio176/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=50
k_s=2
fi
;;
2)
sudo echo 0 > /sys/class/gpio/gpio176/value
if [ $program -eq 1 ]; then
sudo echo 1 > /sys/class/gpio/gpio177/value
else
sudo echo 0 > /sys/class/gpio/gpio177/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=5
k_s=3
fi
;;
3)
sudo echo 0 > /sys/class/gpio/gpio177/value
if [ $program -eq 1 ]; then
sudo echo 1 > /sys/class/gpio/gpio178/value
else
sudo echo 0 > /sys/class/gpio/gpio178/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=5
k_s=4
fi
;;
4)
sudo echo 0 > /sys/class/gpio/gpio178/value
if [ $p_sleep -eq 0 ]; then
p_sleep=5
k_s=5
fi
;;
5)
if [ $program -eq 1 ]; then
sudo echo 1 > /sys/class/gpio/gpio178/value
else
sudo echo 0 > /sys/class/gpio/gpio178/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=50
k_s=1
fi
;;
esac
}
filename="gpio176"
cd /sys/class/gpio
if [ -e "$filename" ]; then
# if test -d /sys/class/gpio/gpiol76 ;then
echo "alread exported gpiol76!"
else
sudo echo 176 > /sys/class/gpio/export
fi
filename="gpio177"
if [ -e "$filename" ]; then
#if test -d /sys/class/gpio/gpiol77 ;then
echo "alread exported gpiol77!"
else
sudo echo 177 > /sys/class/gpio/export
fi
filename="gpio178"
if [ -e "$filename" ]; then
#if test -d /sys/class/gpio/gpiol78 ;then
echo "alread exported gpiol78!"
else
sudo echo 178 > /sys/class/gpio/export
fi
sudo echo out > /sys/class/gpio/gpio176/direction ## gpio_direction_output 设置相应gpio为输出方向
sudo echo out > /sys/class/gpio/gpio177/direction ## gpio_direction_output 设置相应gpio为输出方向
sudo echo out > /sys/class/gpio/gpio178/direction ## gpio_direction_output 设置相应gpio为输出方向
sudo echo 0 > /sys/class/gpio/gpio176/value ## gpio_set_value 设置输出低电平
sudo echo 0 > /sys/class/gpio/gpio177/value ## gpio_set_value 设置输出低电平
sudo echo 0 > /sys/class/gpio/gpio178/value ## gpio_set_value 设置输出低电平
while true
do
{
wait_for_key
wait_rgb1_t
sleep 0.05
};
done
脚本解释
- 循环控制 :使用
while true实现无限循环。
- GPIO控制 :使用echo 0 > /sys/class/gpio/gpiol78/value`和 echo 1 > /sys/class/gpio/gpiol78/value 脚本控制GPIO引脚的高低电平驱动程序。
- 延时 :使用
sleep命令实现延时效果。
- 某一引脚在使用前,用if(if [ -e "$filename" ] )判断是否有引脚资源,无则向gpio管理器申请导出该引脚资源( echo 176 > /sys/class/gpio/export )/
- 按钮 : cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw)
脚本运行
权限设置
chmod u+x rgb1.sh
运行脚本

灯正常闪!
运行结果
- 红灯亮5秒
- 绿灯亮5秒
- 黄灯快速闪烁三次(每次0.5秒)
项目总结
成果展示
- 灯正常闪烁 :达到了预期的效果,红、绿、黄灯按照预定的模式闪烁。
红绿灯按钮项目完成。
0
|
|
|
|
|
|