树莓派——GPIO笔记

来源:互联网 发布:行最简形矩阵是什么 编辑:程序博客网 时间:2024/05/20 02:56

  1. shell命令行方式
    操作文件存在于Linux虚拟文件系统,树莓派重启以后消失
    1. sudo su:
      切换到root用户

    2. echo 25 >  /sys/class/gpio/export:
      将25写入 /sys/class/gpio目录下创建一个gpio25的文件夹

      cd /sys/class/gpio/gpio25

    3. echo out > direction
      输出电流方向

    4. echo 1 >value
      赋值:点亮(1后面必须有空格)

    5. echo 0 > value
      赋值:熄灭(同上)


  2. shell脚本方式
    一系列shell命令的集合
    1. sudo su
      切换到root用户

    2. cd ~
      pwd
      切换到/root的“家目录”

    3. nano blinkled.sh
      创建脚本文件,后缀为sh方便区分

      #!/bin/sh

      echo 25 > /sys/class/gpio/export
      echo out > /sys/class/gpio/gpio25/direction

      while true
      do
              echo 1 > /sys/class/gpio/gpio25/value
              sleep 0.5
              echo 0 > /sys/class/gpio/gpio25/value
              sleep 0.5
      done

    4. chmod +x blinkled.sh
      修改脚本为可执行文件

    5. ./blinkled.sh
      执行脚本

  3. Python控制
    使用模块,可移植性高
    1.  sudo python
      进入python交互界面

    2.  >>import RPi.GPIO as GPIO
      引用RPi.GPIO模块

      (如果出错则回到shell中安装 )
      quit( )返回shell命令行;
      sudo apt-get install python-rpi-gpio
      再进入Python交互界面
      >>GPIO.VERSION   可以顺便查看版本

    3. >>GPIO.setmode(GPIO.BCM)
      设置GPIO的定义方式(必须先引入模块

    4. >>GPIO.setup(25,GPIO.OUT)
      设置引脚接口为GPIO25,电流方向为OUT

    5. >>GPIO.output(25,GPIO.HIGH)
      点亮LED

    6. >>GPIO.output(25,GPIO.LOW)
      熄灭LED



  4. Python控制GPIO
    1. LED闪烁
      import RPi.GPIO as GPIO
      import time

      GPIO.setmode(GPIO.BCM)
      GPIO.setup(25,GPIO.OUT)

      while True:
              GPIO.output(25,GPIO.HIGH)
              time.sleep(0.5)
              GPIO.output(25,GPIO.LOW)
              time.sleep(0.5)

    2. 按键输入(消抖)
      import RPi.GPIO as GPIO
      import time

      GPIO.setmode(GPIO.BCM)
      GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
      GPIO.setup(25,GPIO.OUT)

      ledStatus = True

      while True:
              if (GPIO.input(24) == GPIO.HIGH):
                      print("button pressed!")
                      ledStatus = not ledStatus
                      if ledStatus:
                              GPIO.output(25,GPIO.HIGH)
                      else:
                              GPIO.output(25,GPIO.LOW)
                      time.sleep(0.3)
              time.sleep(0.01)

    3. 中断  
      import RPi.GPIO as GPIO
      import time

      GPIO.setmode(GPIO.BCM)

      GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
      GPIO.setup(25, GPIO.OUT)

      ledStatus = True

      def my_callback(channel):
              print("button pressed")
              global ledStatus
              ledStatus = not ledStatus
              if ledStatus:
                      GPIO.output(25, GPIO.HIGH)
              else:
                      GPIO,output(25, GPIO.LOW)

      GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)

      while True:
              try:
                      print("I'm working...")
                      time.sleep(5)
              except KeyboardInterrupt:
                      break

      GPIO.cleanup

0 0