IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MaixII-Dock(v831)学习笔记——GPIO -> 正文阅读

[嵌入式]MaixII-Dock(v831)学习笔记——GPIO


前言

??GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。所有的 GPIO 在上电后的初始状态都是输入模式,可以控制电平的输出和获取外设的电平变化。

Linux操作gpio子系统

??Linux是一个庞大的系统,除了支持pc以外,还支持很多嵌入式的开发板。而种类繁多的开发板的GPIO驱动往往都不同,这就是使得驱动工程师不得不对于每一种开发板都设计一套GPIO驱动来,而且长此以往Linux内核会被这类无意义的代码所占据,因此Linux引入了GPIO子系统的架构来解决这个问题。
??MaixII-Dock上板载了一个LED可供我们观察gpio现象,对应管脚为GPIO14。
在这里插入图片描述

??在命令行终端中查看/sys/class/gpio 目录下的文件,有四种文件。
export 只写,写入 GPIO 编号来向内核申请 GPIO 控制权(前提是没有内核代码申请这个 GPIO 端口), 成功后会在目录下生成 gpioN 目录

unexport 卸载GPIO

gpioN 指代具体的 gpio 引脚: 指代某个具体的 gpio 端口, 内有以下属性文件:

AttributionRead/WriteValueFunction
directionRWin,out;low,high设置输入输出
valueRW0,非零读取或者写入 IO 电平
edgeRWnone , rising , falling , both配置中断触发方式
active_lowRW0,非零设置低电平有效

gpiochipN 指代 gpio 控制器: gpiochipN 表示的就是一个 gpio_chip, 用来管理和控制一组 gpio 端口的控制器,该目录下存在以下属性文件:

AttributionFunction
base和N相同,表示控制器管理的最小的端口编号。
lable诊断使用的标志,寄存器地址,1c20800.pinctrl
ngpio表示控制器管理的 gpio 端口数量,A~G,224

具体操作:

ls -l /sys/class/gpio/ # 查看GPIO
echo 238 > /sys/class/gpio/export  #写入GPIO,led对应管脚为PH14(238),
ls -l /sys/class/gpio/ # 查看GPIO
# output test
echo "out" > /sys/class/gpio/gpio238/direction # 设置GPIO为输出模式
echo 0 > /sys/class/gpio/gpio238/value # 设置为低电平
echo 1 > /sys/class/gpio/gpio238/value # 设置为高电平
echo 238 > /sys/class/gpio/unexport#卸载GPIO

当设置为0时输出低电平,led灯亮;当设置为1时输出高电平,led灯灭。

Python脚本操作GPIO

点灯LED

??maixpy3将很多复杂的操作封装成python包,像GPIO的使用等,直接调用包来就可以了,想详细了解的可以去看maixpy3的源码,点击这里
在这里插入图片描述

??点击这里查看V831_PIN功能介绍,查看介绍可以知道,V831 只能使用 gpiochip1且我们要操作的io为PH14,这时我们知道了三个参数分别为14、H 和 1。 这时可以使用以下的代码进行 GPIO 的实例化,GPIO 使用结束之后需要将其释放,否则会处于占用状态,通过 gpio.release() 释放 GPIO 或者使用一个类封装起来。

代码:

from maix import gpio
import time
led = gpio.gpio(14, "H", 1)
print(led.source)
for i in range(3):
    led.set_value(0)
    print(led.get_value())
    time.sleep(0.5)
    led.set_value(1)
    print(led.get_value())
    time.sleep(0.5)
led.release()

按键KEY

??MaixII-Dock的底板虽然板载有两个按键,查看MaixII-Dock功能介绍可以知道,两个按键是接到GPADC0的管脚上,根据ADC的数值判断按键是否按下,所以不能直接当做GPIO来使用,需要外接一个按键。
??将 GPIO 设置成输入模式,才能获取板子的电平变化。需要在 GPIO 实例化的时候添加多一个参数,来设置 GPIO 的模式。

key = gpio.gpio(6, "H", 1, line_mode = 2)

??GPIO 使用结束之后需要将其释放,否则会处于占用状态,通过 gpio.release() 释放 GPIO 或者使用一个类封装起来,完整代码如下:

import time
class BUTTON:
    def __init__(self, line, bank, chip=1, mode=2):
        from maix import gpio
        self.button = gpio.gpio(line, bank, chip, mode)
    def is_pressed(self):
        if self.button.get_value() != 1:
            return True
    def __del__(self):
        self.button.release()
key = BUTTON(6, "H")
print(key.button.source)
while True:
    if key.is_pressed():
        print("pressed!!")

总结

??个人感觉如果单单只是使用GPIO,能用python脚本电灯已经足够,但是要想深入了解Linux的gpio驱动,还需要更加深入的去学习linux系统,后期考虑入手一个正点原子的Linux开发板来深入学习。
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:22:30  更:2022-08-19 19:25:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 16:59:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计