自动化脚本之GPIO/LED相关适用于Android/Linux

简介: 自动化脚本之GPIO/LED相关适用于Android/Linux

自个调试的时候写的简简单单脚本  Android/Linux 都兼容

简单的LED循环控制shell脚本

脚本功能介绍

这个脚本是用来控制一些LED灯的亮灭的。它定义了五个函数,每个函数都是一个无限循环,用来向/sys/devices/platform/leds/leds/led文件写入一些数字,来控制不同的LED灯的状态。每个函数都在后台运行,所以可以同时控制多个LED灯。最后一个函数还调用了另一个脚本/opt/test_gpio2.sh来控制一些GPIO引脚的电平。

使用示例

要运行这个脚本,只需要在终端中输入:

bash led.sh

然后就可以看到一些LED灯开始闪烁。要停止这个脚本,只需要按Ctrl+C,就可以发送SIGINT信号来终止所有的后台进程。

#!/bin/bash
 
# 定义GPIO编号的数组
DO=(27 28 29 30) # 输出端口
IN=(107 108 109 110) # 输入端口
 
# 导出GPIO
for i in ${DO[@]} ${IN[@]}; do
    echo $i > /sys/class/gpio/export
done
 
# 设置方向
for i in ${DO[@]}; do
    echo out > /sys/class/gpio/gpio$i/direction
done
 
for i in ${IN[@]}; do
    echo in > /sys/class/gpio/gpio$i/direction
done
 
# 循环控制和读取电平
while true; do
    # 设置DO为高电平
    for i in ${DO[@]}; do
        echo 1 > /sys/class/gpio/gpio$i/value
        echo "Set DO$i to high level"
    done
 
    # 读取IN的电平,并打印到屏幕上
    for i in ${IN[@]}; do
        value=$(cat /sys/class/gpio/gpio$i/value)
        echo -n "IN$i: $value "
    done
    echo # 换行
 
    # 打印时间戳
    date "+%Y-%m-%d %H:%M:%S"
 
    # 延迟一秒钟
    sleep 1
 
    # 设置DO为低电平
    for i in ${DO[@]}; do
        echo 0 > /sys/class/gpio/gpio$i/value
        echo "Set DO$i to low level"
    done
 
    # 读取IN的电平,并打印到屏幕上
    for i in ${IN[@]}; do
        value=$(cat /sys/class/gpio/gpio$i/value)
        echo -n "IN$i: $value "
    done
    echo # 换行
 
    # 打印时间戳
    date "+%Y-%m-%d %H:%M:%S"
 
    # 延迟一秒钟
    sleep 1
done

简单的GPIO逻辑控制shell脚本

脚本功能介绍

这个脚本是用来控制一些GPIO引脚的电平的。它接受四个参数,分别是gpio方向、gpio number、gpio value和restore。gpio方向可以是in或out,表示输入或输出。gpio number是一个0到159之间的整数,表示要控制的引脚的编号。gpio value可以是0或1,表示要设置的电平,只有在gpio方向为out时才有效。restore可以是on或off,表示是否在退出脚本时恢复原来的引脚状态。

这个脚本会根据rockchip rk3568 gpio计算规则,将gpio number转换为GPIOx_Ay的形式,并检查是否有权限访问gpio,是否已经被导出或占用。然后,它会将引脚导出到sysfs中,并设置引脚的方向和值。如果引脚的方向为输入,它会循环读取引脚的值,直到按下Ctrl-C;如果引脚的方向为输出,它会根据是否提供了gpio value参数来设置或切换引脚的值,直到按下Ctrl-C。最后,它会根据restore参数来决定是否取消导出并恢复原来的引脚状态。

使用示例

要运行这个脚本,需要在终端中输入:

bash test_gpio2.sh gpio_direction gpio_number [gpio_value] [restore]

例如:

bash test_gpio2.sh in 10 # 将gpio10设置为输入,并循环读取值
bash test_gpio2.sh out 20 1 # 将gpio20设置为输出,并设置值为1
bash test_gpio2.sh out 30 # 将gpio30设置为输出,并在0和1之间切换值
bash test_gpio2.sh in 40 on # 将gpio40设置为输入,并循环读取值,在退出时恢复原来的状态

简单的循环监听GPIO状态shell脚本

脚本功能介绍

这个脚本是用来控制一些GPIO引脚的电平,并读取另一些GPIO引脚的电平的。它定义了两个数组,分别是DO和IN,表示输出端口和输入端口的编号。它会将这些端口导出到sysfs中,并设置相应的方向。然后,它会循环地将输出端口的电平设置为高或低,并读取输入端口的电平,并打印到屏幕上,每次操作之间延迟一秒钟。

使用示例

要运行这个脚本,只需要在终端中输入:

bash gpio.sh

然后就可以看到类似下面的输出:

Set DO27 to high level
Set DO28 to high level
Set DO29 to high level
Set DO30 to high level
IN107: 0 IN108: 0 IN109: 0 IN110: 0 
2023-07-05 15:09:48
Set DO27 to low level
Set DO28 to low level
Set DO29 to low level
Set DO30 to low level
IN107: 1 IN108: 1 IN109: 1 IN110: 1 
2023-07-05 15:09:49

要停止这个脚本,只需要按Ctrl-C,就可以发送SIGINT信号来终止循环。


相关文章
|
5天前
|
Java Linux Android开发
深入探索Android系统架构:从Linux内核到应用层
本文将带领读者深入了解Android操作系统的复杂架构,从其基于Linux的内核到丰富多彩的应用层。我们将探讨Android的各个关键组件,包括硬件抽象层(HAL)、运行时环境、以及核心库等,揭示它们如何协同工作以支持广泛的设备和应用。通过本文,您将对Android系统的工作原理有一个全面的认识,理解其如何平衡开放性与安全性,以及如何在多样化的设备上提供一致的用户体验。
|
14天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
18天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
121 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
29天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
81 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
35 1
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
426 2
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
23 0
|
2月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
移动开发 Linux C++
Linux 下操作gpio(两种方法,驱动和mmap)
目前我所知道的在linux下操作GPIO有两种方法: 1.  编写驱动,这当然要熟悉linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据ioctl命令进行GPIO寄存器的读写,并把结果回送到应用层。
1315 0