【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()

推荐文章