【jeston】tx2 GPIO控制——C & python
发布于 2022年 05月 04日 10:00
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
c语言
/* Jetson-TX2中引脚总共有两个group:main,aon
参考tegra186-gpio.h,
group值分别是320和256,具体的计算公式如下:
以GPIO3_PI.04 为例,
根据tegra186-gpio.h中对应的PI为
PORT_I的缩写即在main组即
#define TEGRA_MAIN_GPIO_PORT_I 8,所以group是320,port为8,pin为4。
*/
/* A:0, B:1, C:2, D:3, E:4
F:5, G:6, H:7, I:8...
*/
/* 后续如果要改这几个引脚*/
int pin_group = 320;
int pin_port = 8;
int pin_index = 4;
int pin_num = group+ (port * 8 + pin); // =320+(8*8+4)=388
/* 初始化代码,初始化代码只需要运行一次 */
int fd;
fd = open("/sys/class/gpio/export", O_RDWR);
char buf[128];
int len;
len = sprintf(buf, "%d", pin_num);
write(fd, buf, len);
close(fd);
len = sprintf(buf, "/sys/class/gpio/gpio%d/direction", pin_num);
fd = open(buf, O_RDWR);
write(fd, "out", 3);
close(fd);
/* 初始化代码结束 */
/* 控制GPIO代码 */
len = sprintf(buf, "/sys/class/gpio/gpio%d/value", pin_num);
fd = open(buf, len);
/* 输出高电平 */
write(fd, "1", 1);
/* 输出低电平 */
write(fd, "1", 0);
close(fd);
python
import Jetson.GPIO as GPIO
import time as time
import os
single = 12
io1 = 29
io2 = 31
io3 = 32
io4 = 33
GPIO.setmode(GPIO.BOARD)
GPIO.setup(single, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(io1, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(io2, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(io3, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(io4, GPIO.OUT,initial=GPIO.LOW)
print('当前电平:',io1,io2,io3,io4,'初始化为 0000')
while(True):
with open('./label.txt','r') as f:
lst = f.readlines()
lst = [i.strip() for i in lst]
if len(lst)!=0:
GPIO.output(single, GPIO.HIGH)
print(f'有垃圾! 发送(PIN={single}) ')
for i in lst:
if i == 'hand':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4, '当前电平为 0000')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.LOW)
if i == '电池1#':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 0001')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.HIGH)
if i == '电池2#':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 0010')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.HIGH)
GPIO.output(io4, GPIO.LOW)
if i == '电池5#':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 0011')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.HIGH)
GPIO.output(io4, GPIO.HIGH)
if i == '矿泉水瓶':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 0100')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.HIGH)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.LOW)
if i == '易拉罐':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 0101')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.HIGH)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.HIGH)
if i == '硬纸板':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 0110')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.HIGH)
GPIO.output(io3, GPIO.HIGH)
GPIO.output(io4, GPIO.LOW)
if i == '菜叶':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 0111')
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.HIGH)
GPIO.output(io3, GPIO.HIGH)
GPIO.output(io4, GPIO.HIGH)
if i == '果皮':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 1000')
GPIO.output(io1, GPIO.HIGH)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.LOW)
if i == '蛋壳':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 1001')
GPIO.output(io1, GPIO.HIGH)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.HIGH)
if i == '砖瓦':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 1010')
GPIO.output(io1, GPIO.HIGH)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.HIGH)
GPIO.output(io4, GPIO.LOW)
if i == '烟头':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 1011')
GPIO.output(io1, GPIO.HIGH)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.HIGH)
GPIO.output(io4, GPIO.HIGH)
if i == '渣土':
print(f'当前是 |{i}|', 'PIN:',io1, 'PIN:',io2, 'PIN:',io3, 'PIN:',io4,'当前电平为 1100')
GPIO.output(io1, GPIO.HIGH)
GPIO.output(io2, GPIO.HIGH)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.LOW)
with open('./label.txt','w+') as fi:
fi.truncate(0)
if len(lst) ==0:
GPIO.output(single, GPIO.LOW)
GPIO.output(io1, GPIO.LOW)
GPIO.output(io2, GPIO.LOW)
GPIO.output(io3, GPIO.LOW)
GPIO.output(io4, GPIO.LOW)
print('无垃圾!,无信号!''PIN:', io1, 'PIN:', io2, 'PIN:', io3, 'PIN:', io4, '当前电平为 0000')
time.sleep(0.5)
GPIO.cleanup()