小白从零开始配置Jetson Nano环境的曲折过程3(开机自动运行程序,与stm32串口通讯)

前言 

       本文将会记录nano的开机自启动,以及与stm32的串口通讯

        同时本人刚接触nano不久,水平有限,通过自己的经验以及查找相关资料编写的,难免出现错漏以及不规范的地方,若能得到各位大佬进行批评与指正,在下不胜感激

目录

(一)开机自动运行程序

1. 创建shell脚本

2.创建需要运行的文件

​编辑

3.编辑start.sh文件

4.编辑start.py文件

5.修改shell脚本权限

6. 输入命令打开类似于win系统里的”启动“程序

7.授权规则

(二)串口通信

1.获取要传输的设备usb口文件

2.对ttyTHS1进行权限修改

3.添加用户组

4.安装serial库

5.编写通讯代码

6.连接串口

7.验证接收


(一)开机自动运行程序

1. 创建shell脚本

cd Desktop
touch start.sh

2.创建需要运行的文件

(本篇以运行.py文件为例)

touch start.py

3.编辑start.sh文件

vim start.sh

将下列内容写入start.sh后保存

sudo python3 ./Desktop/start.py

不懂的可以,看上一篇有讲过

小白从零开始配置Jetson Nano环境的曲折过程2(开机与基本的环境配置)-CSDN博客

4.编辑start.py文件

vim start.py

为做演示,随便在.py文件里写一句试试效果

print("666")

5.修改shell脚本权限

让start.sh文件有运行的权限

sudo chmod 777 start.sh

6. 输入命令打开类似于win系统里的”启动“程序

gnome-session-properties

按如下操作,

在name中填写 start(写什么都行)

在Command中填入

gnome-terminal -x ./Desktop/start.sh 

然后点击添加即可

7.授权规则

        在终端输入的命令,有时用到sudo命令需要输入密码,若在开机自启动的文件里使用,可能导致开机启动失败

        因此使用授权规则将新文件添加到 /etc/sudoers.d 目录来解决

        添加该方法而不是编辑 sudoers文件,可使 sudo 权限的管理更加可维护

输入下列内容(user 为自己系统的用户名)

sudo vi /etc/sudoers.d/user

进入vim编辑模式后,输入下列内容(user 为自己系统的用户名)

user ALL=(ALL) NOPASSWD:ALL

完成后,保存并关闭编辑器, 就可以开机自启动程序了

(二)串口通信

1.获取要传输的设备usb口文件

依次输入下列内容:

cd /dev
ls

nano:

UART_2 TX —— Pin8

UART_2 RX —— Pin10

属于ttyTHS1文件

2.对ttyTHS1进行权限修改

输入下列命令

sudo chmod 777 ttyTHS1

3.添加用户组

输入下列命令(user为自己系统的用户名) 

sudo usermod -a -G dialout user 

4.安装serial库

sudo apt-get install python3-serial

5.编写通讯代码

打开 (一)4. 中创建的start.py文件

vim ./Desktop/start.py

输入下列内容

import serial
import time

ser = serial.Serial("/dev/ttyTHS1", 115200)
#比特率为115200(可更改为9600)

a = 0
while True:
    data = [0x00, 0x01, 0xc5, int(a), 0xfe, 0xff]

    print(data)

    ser.write(data)
    
    a=a+1
    
    time.sleep(0.5)

    if a == 100:
        break

完成后保存退出

6.连接串口

将nano的Pin8连接到USB转TTL模块的RX接口,Pin10接到TX接口

在将模块接入电脑

7.验证接收

输入命令

python3 start.py

可以看到终端开始打印数据包

在电脑的串口助手上就能看到nano发送的数据了

同理,在stm32端接收的代码为正常接收串口通信的代码即可

以下是本人关于nano其他配置的文章,感兴趣的可以看看:

小白从零开始配置Jetson Nano环境的曲折过程1(TF卡初始化,环境烧录)-CSDN博客

小白从零开始配置Jetson Nano环境的曲折过程2(开机与基本的环境配置)_jetson nano 开机-CSDN博客

小白从零开始配置Jetson Nano环境的曲折过程4(安装archiconda、opencv、pyqt5)-CSDN博客

### Jetson Nano 自启动时权限拒绝问题解决方案 对于Jetson Nano设备,在设置程序自启动过程中可能会遇到`Permission denied`的问题。当涉及到串口通信,如使用`/dev/ttyTHS1`时,该问题尤为常见。 为了确保程序能够顺利自启动并访问所需的硬件资源,建议采取以下措施: #### 修改文件权限用户组配置 临时修改目标设备节点的权限可以解决问题,但这不是长久之计。更推荐的做法是通过调整用户所属群组来赋予必要的访问权。具体来说,可以通过将当前用户加入到具有适当权限的用户组中实现这一点[^1]。 ```bash sudo usermod -a -G dialout $USER ``` 上述命令中的`$USER`变量会自动替换为当前登录用户的名称,因此无需手动指定用户名。这一步骤完成后,需要注销再重新登录使更改生效。 #### 创建udev规则持久化权限设定 为了让权限变更在系统重启后仍然有效,创建一个udev规则是一个不错的选择。这样可以在每次加载相应的USB或串行端口驱动时自动应用这些规则。 编辑一个新的udev规则文件,路径通常位于`/etc/udev/rules.d/`目录下,命名为类似于`99-ttyTHS1.rules`: ```bash SUBSYSTEM=="tty", KERNEL=="ttyTHS1", MODE="0666" ``` 保存此文件之后,记得刷新udev规则以便立即生效: ```bash sudo udevadm control --reload-rules && sudo udevadm trigger ``` 以上操作不仅解决了即时性的权限不足问题,还提供了长期稳定的解决方案,使得应用程序能够在无人干预的情况下正常启动并工作于后台服务模式[^3]。 #### 编辑crontab或systemd服务单元用于自启 如果希望某个特定的应用能在系统引导阶段就自动运行,则可以根据实际情况选择合适的方法来进行部署。对于较为简单的场景可以直接利用cron定时任务管理器内的@reboot选项;而对于复杂的服务则更适合采用Systemd服务定义的方式进行封装和调度。 针对Python脚本或其他类型的可执行文件作为开机自启动项的情况,编写对应的`.service`文件放置于`/lib/systemd/system/`内,并确保其中包含了正确的ExecStart指令指向待执行的目标程序位置以及任何必需的工作环境参数配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

つ( ̄^ ̄)つ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值